diff --git a/src/main/java/com/gmail/nossr50/config/collectionconfigs/RepairConfig.java b/src/main/java/com/gmail/nossr50/config/collectionconfigs/RepairConfig.java index 7cd873cf3..71650c48c 100644 --- a/src/main/java/com/gmail/nossr50/config/collectionconfigs/RepairConfig.java +++ b/src/main/java/com/gmail/nossr50/config/collectionconfigs/RepairConfig.java @@ -33,9 +33,9 @@ public class RepairConfig extends ConfigCollection { public static final String MINIMUM_LEVEL = "MinimumLevel"; public static final String MINIMUM_QUANTITY = "MinimumQuantity"; - public RepairConfig(String fileName) { + public RepairConfig(String fileName, boolean merge) { //super(McmmoCore.getDataFolderPath().getAbsoluteFile(), fileName, false); - super(mcMMO.p.getDataFolder().getAbsoluteFile(), fileName, false); + super(mcMMO.p.getDataFolder().getAbsoluteFile(), fileName, merge); } /** @@ -108,10 +108,10 @@ public class RepairConfig extends ConfigCollection { else { //If a material cannot be matched, try matching the material to its repair material type string from the config try { - repairMaterialType = MaterialType.valueOf(repairMaterialTypeString); + repairMaterialType = MaterialType.valueOf(repairMaterialTypeString.toUpperCase()); } catch (IllegalArgumentException ex) { - errorMessages.add(key + " has an invalid " + MATERIAL_TYPE + " of " + repairMaterialTypeString); + errorMessages.add("Repair Config: " + key + " has an invalid " + MATERIAL_TYPE + " of " + repairMaterialTypeString); continue; } } @@ -234,16 +234,4 @@ public class RepairConfig extends ConfigCollection { private String getRepairMaterialStringName(String key) { return getStringValue(REPAIRABLES, key, REPAIR_MATERIAL); } - - - /** - * Check if there are any errors for this repairable and if there are reports them to console - * @param issues errors related to loading a repairable - * @return returns true if there are no errors for this repairable - */ - private boolean noErrorsInRepairable(List issues) { - - - return issues.isEmpty(); - } } diff --git a/src/main/java/com/gmail/nossr50/config/collectionconfigs/SalvageConfig.java b/src/main/java/com/gmail/nossr50/config/collectionconfigs/SalvageConfig.java index a6302a4cc..3f96ee91a 100644 --- a/src/main/java/com/gmail/nossr50/config/collectionconfigs/SalvageConfig.java +++ b/src/main/java/com/gmail/nossr50/config/collectionconfigs/SalvageConfig.java @@ -9,6 +9,7 @@ import com.gmail.nossr50.skills.salvage.salvageables.SalvageableFactory; import com.gmail.nossr50.util.ItemUtils; import com.gmail.nossr50.util.skills.SkillUtils; import ninja.leaping.configurate.commented.CommentedConfigurationNode; +import ninja.leaping.configurate.objectmapping.ObjectMappingException; import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.inventory.ItemStack; @@ -19,9 +20,19 @@ import java.util.Set; public class SalvageConfig extends ConfigCollection { - public SalvageConfig(String fileName) { + public static final String SALVAGEABLES = "Salvageables"; + public static final String MATERIAL_TYPE = "MaterialType"; + public static final String SALVAGE_MATERIAL = "SalvageMaterial"; + public static final String MAXIMUM_DURABILITY = "MaximumDurability"; + public static final String ITEM_TYPE = "ItemType"; + public static final String METADATA = "Metadata"; + public static final String MINIMUM_LEVEL = "MinimumLevel"; + public static final String XP_MULTIPLIER = "XpMultiplier"; + public static final String MAXIMUM_QUANTITY = "MaximumQuantity"; + + public SalvageConfig(String fileName, boolean merge) { //super(McmmoCore.getDataFolderPath().getAbsoluteFile(), fileName, false); - super(mcMMO.p.getDataFolder().getAbsoluteFile(), fileName, false); + super(mcMMO.p.getDataFolder().getAbsoluteFile(), fileName, merge); } /** @@ -36,123 +47,139 @@ public class SalvageConfig extends ConfigCollection { @Override public void register() { - CommentedConfigurationNode section = getUserRootNode().getNode("Salvageables"); - Set keys = section.getKeys(false); - for (String key : keys) { - // Validate all the things! - List reason = new ArrayList(); + try { + //Grab the "keys" under the Repairables node + ArrayList keys = new ArrayList<>(getStringValueList(SALVAGEABLES)); - // ItemStack Material - Material itemMaterial = Material.matchMaterial(key); + for (String key : keys) { + // Validate all the things! + List errorMessages = new ArrayList(); - if (itemMaterial == null) { - reason.add("Invalid material: " + key); - } + // ItemStack Material + Material itemMaterial = Material.matchMaterial(key); - // Salvage Material Type - MaterialType salvageMaterialType = MaterialType.OTHER; - String salvageMaterialTypeString = getStringValue("Salvageables." + key + ".MaterialType", "OTHER"); - - if (!config.contains("Salvageables." + key + ".MaterialType") && itemMaterial != null) { - ItemStack salvageItem = new ItemStack(itemMaterial); - - if (ItemUtils.isWoodTool(salvageItem)) { - salvageMaterialType = MaterialType.WOOD; - } else if (ItemUtils.isStoneTool(salvageItem)) { - salvageMaterialType = MaterialType.STONE; - } else if (ItemUtils.isStringTool(salvageItem)) { - salvageMaterialType = MaterialType.STRING; - } else if (ItemUtils.isLeatherArmor(salvageItem)) { - salvageMaterialType = MaterialType.LEATHER; - } else if (ItemUtils.isIronArmor(salvageItem) || ItemUtils.isIronTool(salvageItem)) { - salvageMaterialType = MaterialType.IRON; - } else if (ItemUtils.isGoldArmor(salvageItem) || ItemUtils.isGoldTool(salvageItem)) { - salvageMaterialType = MaterialType.GOLD; - } else if (ItemUtils.isDiamondArmor(salvageItem) || ItemUtils.isDiamondTool(salvageItem)) { - salvageMaterialType = MaterialType.DIAMOND; + if (itemMaterial == null) { + errorMessages.add("Salvage Config: Invalid material - " + key); + continue; } - } else { - try { - salvageMaterialType = MaterialType.valueOf(salvageMaterialTypeString.replace(" ", "_").toUpperCase()); - } catch (IllegalArgumentException ex) { - reason.add(key + " has an invalid MaterialType of " + salvageMaterialTypeString); + + // Salvage Material Type + MaterialType salvageMaterialType = MaterialType.OTHER; + + String salvageMaterialTypeString; + + if(hasNode(SALVAGEABLES, key, MATERIAL_TYPE)) + salvageMaterialTypeString = getStringValue(SALVAGEABLES, key, MATERIAL_TYPE); + else + salvageMaterialTypeString = "OTHER"; + + if (!hasNode(SALVAGEABLES, key, MATERIAL_TYPE)) { + ItemStack salvageItem = new ItemStack(itemMaterial); + + if (ItemUtils.isWoodTool(salvageItem)) { + salvageMaterialType = MaterialType.WOOD; + } else if (ItemUtils.isStoneTool(salvageItem)) { + salvageMaterialType = MaterialType.STONE; + } else if (ItemUtils.isStringTool(salvageItem)) { + salvageMaterialType = MaterialType.STRING; + } else if (ItemUtils.isLeatherArmor(salvageItem)) { + salvageMaterialType = MaterialType.LEATHER; + } else if (ItemUtils.isIronArmor(salvageItem) || ItemUtils.isIronTool(salvageItem)) { + salvageMaterialType = MaterialType.IRON; + } else if (ItemUtils.isGoldArmor(salvageItem) || ItemUtils.isGoldTool(salvageItem)) { + salvageMaterialType = MaterialType.GOLD; + } else if (ItemUtils.isDiamondArmor(salvageItem) || ItemUtils.isDiamondTool(salvageItem)) { + salvageMaterialType = MaterialType.DIAMOND; + } + } else { + try { + salvageMaterialType = MaterialType.valueOf(salvageMaterialTypeString.replace(" ", "_").toUpperCase()); + } catch (IllegalArgumentException ex) { + errorMessages.add("Salvage Config: " + key + " has an invalid MaterialType of " + salvageMaterialTypeString); + } } - } - // Salvage Material - String salvageMaterialName = getStringValue("Salvageables." + key + ".SalvageMaterial"); - Material salvageMaterial = (salvageMaterialName == null ? salvageMaterialType.getDefaultMaterial() : Material.matchMaterial(salvageMaterialName)); + // Salvage Material + String salvageMaterialName = getStringValue(SALVAGEABLES, key, SALVAGE_MATERIAL); + Material salvageMaterial = (salvageMaterialName == null ? salvageMaterialType.getDefaultMaterial() : Material.matchMaterial(salvageMaterialName)); - if (salvageMaterial == null) { - reason.add(key + " has an invalid salvage material: " + salvageMaterialName); - } - - // Maximum Durability - short maximumDurability = (itemMaterial != null ? itemMaterial.getMaxDurability() : (short) getIntValue("Salvageables." + key + ".MaximumDurability")); - - // ItemStack Type - ItemType salvageItemType = ItemType.OTHER; - String salvageItemTypeString = getStringValue("Salvageables." + key + ".ItemType", "OTHER"); - - if (!config.contains("Salvageables." + key + ".ItemType") && itemMaterial != null) { - ItemStack salvageItem = new ItemStack(itemMaterial); - - if (ItemUtils.isMinecraftTool(salvageItem)) { - salvageItemType = ItemType.TOOL; - } else if (ItemUtils.isArmor(salvageItem)) { - salvageItemType = ItemType.ARMOR; + if (salvageMaterial == null) { + errorMessages.add(key + " has an invalid salvage material: " + salvageMaterialName); + continue; } - } else { - try { - salvageItemType = ItemType.valueOf(salvageItemTypeString.replace(" ", "_").toUpperCase()); - } catch (IllegalArgumentException ex) { - reason.add(key + " has an invalid ItemType of " + salvageItemTypeString); + + // Maximum Durability + short maximumDurability = itemMaterial.getMaxDurability(); + + // ItemStack Type + ItemType salvageItemType = ItemType.OTHER; + + String salvageItemTypeString; + + if(hasNode(SALVAGEABLES, key, ITEM_TYPE)) + salvageItemTypeString = getStringValue(SALVAGEABLES, key, ITEM_TYPE); + else + salvageItemTypeString = "OTHER"; + + if (!hasNode(SALVAGEABLES, key, ITEM_TYPE)) { + ItemStack salvageItem = new ItemStack(itemMaterial); + + if (ItemUtils.isMinecraftTool(salvageItem)) { + salvageItemType = ItemType.TOOL; + } else if (ItemUtils.isArmor(salvageItem)) { + salvageItemType = ItemType.ARMOR; + } + } else { + try { + salvageItemType = ItemType.valueOf(salvageItemTypeString.replace(" ", "_").toUpperCase()); + } catch (IllegalArgumentException ex) { + errorMessages.add("Salvage Config: " + key + " has an invalid " + ITEM_TYPE + " of " + salvageItemTypeString); + } } - } - byte salvageMetadata = (byte) getIntValue("Salvageables." + key + ".SalvageMaterialMetadata", -1); - int minimumLevel = getIntValue("Salvageables." + key + ".MinimumLevel"); - double xpMultiplier = getDoubleValue("Salvageables." + key + ".XpMultiplier", 1); + byte salvageMetadata = -1; + + if(hasNode(SALVAGEABLES, key, SALVAGE_MATERIAL, METADATA)) + salvageMetadata = (byte) getIntValue(SALVAGEABLES, key, SALVAGE_MATERIAL, METADATA); + + int minimumLevel = getIntValue(SALVAGEABLES, key, MINIMUM_LEVEL); + double xpMultiplier = 1; - if (minimumLevel < 0) { - reason.add(key + " has an invalid MinimumLevel of " + minimumLevel); - } + if(hasNode(SALVAGEABLES, key, XP_MULTIPLIER)) + xpMultiplier = getDoubleValue(SALVAGEABLES, key, XP_MULTIPLIER); - // Maximum Quantity - int maximumQuantity = (itemMaterial != null ? SkillUtils.getRepairAndSalvageQuantities(new ItemStack(itemMaterial), salvageMaterial, salvageMetadata) : getIntValue("Salvageables." + key + ".MaximumQuantity", 2)); + // Maximum Quantity + int maximumQuantity = SkillUtils.getRepairAndSalvageQuantities(new ItemStack(itemMaterial), salvageMaterial, salvageMetadata); - if (maximumQuantity <= 0 && itemMaterial != null) { - maximumQuantity = getIntValue("Salvageables." + key + ".MaximumQuantity", 1); - } + if(hasNode(SALVAGEABLES, key, MAXIMUM_QUANTITY)) + maximumQuantity = getIntValue(SALVAGEABLES, key, MAXIMUM_QUANTITY); - int configMaximumQuantity = getIntValue("Salvageables." + key + ".MaximumQuantity", -1); - if (configMaximumQuantity > 0) { - maximumQuantity = configMaximumQuantity; - } + /* + * VALIDATE + */ - if (maximumQuantity <= 0) { - reason.add("Maximum quantity of " + key + " must be greater than 0!"); - } + if(minimumLevel < 0) + minimumLevel = 0; + + if(maximumQuantity < 0) + maximumQuantity = 1; + + if(xpMultiplier < 0) + xpMultiplier = 0; - if (noErrorsInSalvageable(reason)) { Salvageable salvageable = SalvageableFactory.getSalvageable(itemMaterial, salvageMaterial, salvageMetadata, minimumLevel, maximumQuantity, maximumDurability, salvageItemType, salvageMaterialType, xpMultiplier); genericCollection.add(salvageable); + + for (String issue : errorMessages) { + mcMMO.p.getLogger().warning(issue); + } } + + } catch (ObjectMappingException e) { + e.printStackTrace(); } } - private boolean noErrorsInSalvageable(List issues) { - if (!issues.isEmpty()) { - plugin.getLogger().warning("Errors have been found in: " + fileName); - plugin.getLogger().warning("The following issues were found:"); - } - - for (String issue : issues) { - plugin.getLogger().warning(issue); - } - - return issues.isEmpty(); - } }