package de.tobiyas.racesandclasses.configuration.armory; import java.io.File; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import org.bukkit.Material; import de.tobiyas.racesandclasses.RacesAndClasses; import de.tobiyas.util.config.YAMLConfigExtended; import de.tobiyas.racesandclasses.util.items.ItemUtils.ItemQuality; public class ArmorConfig { /** * The File for the Default File. */ private final File defaultFile = new File(RacesAndClasses.getPlugin().getDataFolder(), "armor.yml"); /** * The Config to use. */ private final YAMLConfigExtended config = new YAMLConfigExtended(defaultFile); public ArmorConfig() { if(!defaultFile.exists()){ createDefaultFile(); } reload(); } /** * Creates the default File. */ private void createDefaultFile() { config.clearConfig(); Set<Material> materials = new HashSet<Material>(); materials.clear(); materials.add(Material.LEATHER_BOOTS); materials.add(Material.LEATHER_LEGGINGS); materials.add(Material.LEATHER_CHESTPLATE); materials.add(Material.LEATHER_HELMET); config.addDefault("leather", toStringList(materials)); materials.clear(); materials.add(Material.IRON_BOOTS); materials.add(Material.IRON_LEGGINGS); materials.add(Material.IRON_CHESTPLATE); materials.add(Material.IRON_HELMET); config.addDefault("iron", toStringList(materials)); materials.clear(); materials.add(Material.CHAINMAIL_BOOTS); materials.add(Material.CHAINMAIL_LEGGINGS); materials.add(Material.CHAINMAIL_CHESTPLATE); materials.add(Material.CHAINMAIL_HELMET); config.addDefault("chain", toStringList(materials)); materials.clear(); materials.add(Material.GOLD_BOOTS); materials.add(Material.GOLD_LEGGINGS); materials.add(Material.GOLD_CHESTPLATE); materials.add(Material.GOLD_HELMET); config.addDefault("gold", toStringList(materials)); materials.clear(); materials.add(Material.DIAMOND_BOOTS); materials.add(Material.DIAMOND_LEGGINGS); materials.add(Material.DIAMOND_CHESTPLATE); materials.add(Material.DIAMOND_HELMET); config.addDefault("diamond", toStringList(materials)); config.options().copyDefaults(true); config.save(); } /** * Returns a new List with String from the Collection. * * @param mats to parse. * @return a list of Strings. */ private List<String> toStringList(Collection<Material> mats){ List<String> names = new LinkedList<String>(); for(Material mat : mats) names.add(mat.name()); return names; } /** * Reloads the Config. */ public void reload(){ config.load(); Map<String,Set<Material>> toSet = new HashMap<String, Set<Material>>(); for(String node : config.getRootChildren()){ Set<Material> parsed = new HashSet<Material>(); parseMaterials(parsed, config.getStringList(node)); if(!parsed.isEmpty()) toSet.put(node, parsed); } //Load default! ItemQuality.loadDefault(); //now Set! if(!toSet.isEmpty()) ItemQuality.set(toSet); } /** * Parses and adds the Materials to the Collections List. * <br>This also clears the Collection before. * * @param collection to add to * @param toAdd to add */ private void parseMaterials(Collection<Material> collection, Collection<String> toAdd){ collection.clear(); for(String key : toAdd){ addMaterial(collection, key); } } /** * Adds a Mat to the List passed. * * @param collection to add to * @param mat to add */ private void addMaterial(Collection<Material> collection, String mat){ try{ Material realMat = Material.matchMaterial(mat); if(realMat != null) collection.add(realMat); }catch(Throwable exp){} } }