Browse Source

Converting salvage config to the new system

nossr50 6 years ago
parent
commit
4bfa790be9

+ 4 - 16
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<String> issues) {
-
-
-        return issues.isEmpty();
-    }
 }

+ 123 - 96
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<String> keys = section.getKeys(false);
 
-        for (String key : keys) {
-            // Validate all the things!
-            List<String> reason = new ArrayList<String>();
+        try {
+            //Grab the "keys" under the Repairables node
+            ArrayList<String> keys = new ArrayList<>(getStringValueList(SALVAGEABLES));
 
-            // ItemStack Material
-            Material itemMaterial = Material.matchMaterial(key);
+            for (String key : keys) {
+                // Validate all the things!
+                List<String> errorMessages = new ArrayList<String>();
 
-            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);
-            }
+                if (salvageMaterial == null) {
+                    errorMessages.add(key + " has an invalid salvage material: " + salvageMaterialName);
+                    continue;
+                }
 
-            // Maximum Durability
-            short maximumDurability = (itemMaterial != null ? itemMaterial.getMaxDurability() : (short) getIntValue("Salvageables." + key + ".MaximumDurability"));
+                // 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);
+                    }
+                }
 
-            // ItemStack Type
-            ItemType salvageItemType = ItemType.OTHER;
-            String salvageItemTypeString = getStringValue("Salvageables." + key + ".ItemType", "OTHER");
+                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 (!config.contains("Salvageables." + key + ".ItemType") && itemMaterial != null) {
-                ItemStack salvageItem = new ItemStack(itemMaterial);
+                if(hasNode(SALVAGEABLES, key, XP_MULTIPLIER))
+                    xpMultiplier = getDoubleValue(SALVAGEABLES, key, XP_MULTIPLIER);
 
-                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) {
-                    reason.add(key + " has an invalid ItemType of " + salvageItemTypeString);
-                }
-            }
+                // Maximum Quantity
+                int maximumQuantity = SkillUtils.getRepairAndSalvageQuantities(new ItemStack(itemMaterial), salvageMaterial, salvageMetadata);
 
-            byte salvageMetadata = (byte) getIntValue("Salvageables." + key + ".SalvageMaterialMetadata", -1);
-            int minimumLevel = getIntValue("Salvageables." + key + ".MinimumLevel");
-            double xpMultiplier = getDoubleValue("Salvageables." + key + ".XpMultiplier", 1);
+                if(hasNode(SALVAGEABLES, key, MAXIMUM_QUANTITY))
+                    maximumQuantity = getIntValue(SALVAGEABLES, key, MAXIMUM_QUANTITY);
 
-            if (minimumLevel < 0) {
-                reason.add(key + " has an invalid MinimumLevel of " + minimumLevel);
-            }
 
-            // Maximum Quantity
-            int maximumQuantity = (itemMaterial != null ? SkillUtils.getRepairAndSalvageQuantities(new ItemStack(itemMaterial), salvageMaterial, salvageMetadata) : getIntValue("Salvageables." + key + ".MaximumQuantity", 2));
+                /*
+                 * VALIDATE
+                 */
 
-            if (maximumQuantity <= 0 && itemMaterial != null) {
-                maximumQuantity = getIntValue("Salvageables." + key + ".MaximumQuantity", 1);
-            }
+                if(minimumLevel < 0)
+                    minimumLevel = 0;
 
-            int configMaximumQuantity = getIntValue("Salvageables." + key + ".MaximumQuantity", -1);
+                if(maximumQuantity < 0)
+                    maximumQuantity = 1;
 
-            if (configMaximumQuantity > 0) {
-                maximumQuantity = configMaximumQuantity;
-            }
-
-            if (maximumQuantity <= 0) {
-                reason.add("Maximum quantity of " + key + " must be greater than 0!");
-            }
+                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<String> 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();
-    }
 }