/** * @author Aleksey Terzi * */ package com.lishid.orebfuscator.config; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; import org.bukkit.Material; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.plugin.java.JavaPlugin; import com.lishid.orebfuscator.DeprecatedMethods; import com.lishid.orebfuscator.utils.Globals; public class MaterialReader { private static class MaterialResult { public Integer id; public String name; public MaterialResult(int id, String name) { this.id = id; this.name = name; } } private JavaPlugin plugin; private Logger logger; public MaterialReader(JavaPlugin plugin, Logger logger) { this.plugin = plugin; this.logger = logger; } private FileConfiguration getConfig() { return this.plugin.getConfig(); } public Integer getMaterialId(String materialName) { return getMaterial(materialName, null).id; } public Integer getMaterialIdByPath(String path, Integer defaultMaterialId, boolean withSave) { boolean hasKey = getConfig().get(path) != null; if(!hasKey && defaultMaterialId == null) { return null; } String materialName = hasKey ? getConfig().getString(path): Integer.toString(defaultMaterialId); MaterialResult material = getMaterial(materialName, defaultMaterialId); if(withSave || hasKey) { getConfig().set(path, material.name); } return material.id; } public Integer[] getMaterialIdsByPath(String path, Integer[] defaultMaterials, boolean withSave) { List<String> list; if(getConfig().get(path) != null) { list = getConfig().getStringList(path); withSave = true; } else { if(defaultMaterials != null) { list = new ArrayList<String>(); for(int materialId : defaultMaterials) { list.add(DeprecatedMethods.getMaterial(materialId).name()); } } else { return null; } } List<Integer> result = new ArrayList<Integer>(); for(int i = 0; i < list.size(); i++) { MaterialResult material = getMaterial(list.get(i), null); if(material != null) { list.set(i, material.name); result.add(material.id); } } if(withSave) { getConfig().set(path, list); } return result.toArray(new Integer[0]); } private MaterialResult getMaterial(String materialName, Integer defaultMaterialId) { Integer materialId; String defaultMaterialName = defaultMaterialId != null ? DeprecatedMethods.getMaterial(defaultMaterialId).name(): null; try { if(Character.isDigit(materialName.charAt(0))) { materialId = Integer.parseInt(materialName); Material obj = DeprecatedMethods.getMaterial(materialId); if(obj != null) { materialName = obj.name(); } else { if(defaultMaterialId != null) { this.logger.info(Globals.LogPrefix + "Material with ID = " + materialId + " is not found. Will be used default material: " + defaultMaterialName); materialId = defaultMaterialId; materialName = defaultMaterialName; } else { this.logger.info(Globals.LogPrefix + "Material with ID = " + materialId + " is not found. Skipped."); materialId = null; } } } else { Material obj = Material.getMaterial(materialName.toUpperCase()); if(obj != null) { materialId = DeprecatedMethods.getMaterialId(obj); } else { if(defaultMaterialId != null) { this.logger.info(Globals.LogPrefix + "Material " + materialName + " is not found. Will be used default material: " + defaultMaterialName); materialId = defaultMaterialId; materialName = defaultMaterialName; } else { this.logger.info(Globals.LogPrefix + "Material " + materialName + " is not found. Skipped."); materialId = null; } } } } catch (Exception e) { if(defaultMaterialId != null) { this.logger.info(Globals.LogPrefix + "Invalid material ID or name: " + materialName + ". Will be used default material: " + defaultMaterialName); materialId = defaultMaterialId; materialName = defaultMaterialName; } else { this.logger.info(Globals.LogPrefix + "Invalid material ID or name: " + materialName + ". Skipped."); materialId = null; } } return materialId != null ? new MaterialResult(materialId, materialName): null; } }