Browse Source

RepairConfig loader
and small fix for RepairConfigManager

NuclearW 13 years ago
parent
commit
c2d2359a8c

+ 80 - 2
src/main/java/com/gmail/nossr50/config/RepairConfig.java

@@ -2,9 +2,16 @@ package com.gmail.nossr50.config;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
+import java.util.Set;
+
+import org.bukkit.configuration.ConfigurationSection;
+import org.bukkit.configuration.file.YamlConfiguration;
 
 
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.skills.repair.RepairItemType;
+import com.gmail.nossr50.skills.repair.RepairMaterialType;
 import com.gmail.nossr50.skills.repair.Repairable;
 import com.gmail.nossr50.skills.repair.Repairable;
+import com.gmail.nossr50.skills.repair.RepairableFactory;
 
 
 public class RepairConfig extends ConfigLoader {
 public class RepairConfig extends ConfigLoader {
     private final String fileName;
     private final String fileName;
@@ -13,21 +20,92 @@ public class RepairConfig extends ConfigLoader {
     public RepairConfig(mcMMO plugin, String fileName) {
     public RepairConfig(mcMMO plugin, String fileName) {
         super(plugin, fileName);
         super(plugin, fileName);
         this.fileName = fileName;
         this.fileName = fileName;
+        this.config = YamlConfiguration.loadConfiguration(this.configFile);
     }
     }
 
 
     @Override
     @Override
     protected void load() {
     protected void load() {
-        if(plugin.isInJar(fileName)) addDefaults();
         loadKeys();
         loadKeys();
     }
     }
 
 
     @Override
     @Override
     protected void loadKeys() {
     protected void loadKeys() {
-        // TODO Auto-generated method stub
+        repairables = new ArrayList<Repairable>();
+
+        ConfigurationSection section = config.getConfigurationSection("Repairables");
+        Set<String> keys = section.getKeys(false);
+        for(String key : keys) {
+            // Validate all the things!
+            List<String> reason = new ArrayList<String>();
+
+            if(!config.contains("Repairables." + key + ".ItemId")) {
+                reason.add(key + " is missing ItemId");
+            }
+
+            if(!config.contains("Repairables." + key + ".RepairMaterialId")) {
+                reason.add(key + " is missing RepairMaterialId");
+            }
+
+            if(!config.contains("Repairables." + key + ".MaximumDurability")) {
+                reason.add(key + " is missing MaximumDurability");
+            }
+
+            int itemId = config.getInt("Repairables." + key + ".ItemId", 0);
+            int repairMaterialId = config.getInt("Repairables." + key + ".RepairMaterialId", 0);
+            int maximumDurability = config.getInt("Repairables." + key + ".MaximumDurability", 0);
+
+            int repairMetadata = config.getInt("Repairables." + key + ".RepairMaterialMetadata", -1);
+            int minimumLevel = config.getInt("Repairables." + key + ".MinimumLevel", 0);
+            int minimumQuantity = config.getInt("Repairables." + key + ".MinimumQuantity", 0);
+            double xpMultiplier = config.getDouble("Repairables." + key + ".XpMultiplier", 1);
+
+            RepairItemType repairItemType = RepairItemType.OTHER;
+            RepairMaterialType repairMaterialType = RepairMaterialType.OTHER;
+
+            String repairItemTypeString = config.getString("Repairables." + key + ".ItemType", "OTHER");
+            String repairMaterialTypeString = config.getString("Repairables." + key + ".MaterialType", "OTHER");
+
+            if(minimumLevel < 0) {
+                reason.add(key + " has an invalid MinimumLevel of " + minimumLevel);
+            }
+
+            if(minimumQuantity < 0) {
+                reason.add(key + " has an invalid MinimumQuantity of " + minimumQuantity);
+            }
+
+            try {
+                repairItemType = RepairItemType.valueOf(repairItemTypeString);
+            } catch (IllegalArgumentException ex) {
+                reason.add(key + " has an invalid ItemType of " + repairItemTypeString);
+            }
+
+            try {
+                repairMaterialType = RepairMaterialType.valueOf(repairMaterialTypeString);
+            } catch (IllegalArgumentException ex) {
+                reason.add(key + " has an invalid MaterialType of " + repairMaterialTypeString);
+            }
+
+            if(noErrorsInRepairable(reason)) {
+                Repairable repairable = RepairableFactory.getRepairable(itemId, repairMaterialId, (byte) repairMetadata, minimumLevel, minimumQuantity, (short) maximumDurability, repairItemType, repairMaterialType, xpMultiplier);
+                repairables.add(repairable);
+            }
+        }
     }
     }
 
 
     protected List<Repairable> getLoadedRepairables() {
     protected List<Repairable> getLoadedRepairables() {
         if(repairables == null) return new ArrayList<Repairable>();
         if(repairables == null) return new ArrayList<Repairable>();
         return repairables;
         return repairables;
     }
     }
+
+    private boolean noErrorsInRepairable(List<String> issues) {
+        if (issues.isEmpty()) {
+            return true;
+        }
+        else {
+            for (String issue : issues) {
+                plugin.getLogger().warning(issue);
+            }
+            return false;
+        }
+    }
 }
 }

+ 2 - 0
src/main/java/com/gmail/nossr50/config/RepairConfigManager.java

@@ -12,6 +12,8 @@ public class RepairConfigManager {
     private List<Repairable> repairables;
     private List<Repairable> repairables;
 
 
     public RepairConfigManager(mcMMO plugin) {
     public RepairConfigManager(mcMMO plugin) {
+        repairables = new ArrayList<Repairable>();
+
         Pattern pattern = Pattern.compile("repair\\.(?:.+)\\.yml");
         Pattern pattern = Pattern.compile("repair\\.(?:.+)\\.yml");
         File dataFolder = plugin.getDataFolder();
         File dataFolder = plugin.getDataFolder();