RepairConfig.java 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package com.gmail.nossr50.config;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Set;
  5. import org.bukkit.configuration.ConfigurationSection;
  6. import org.bukkit.configuration.file.YamlConfiguration;
  7. import com.gmail.nossr50.mcMMO;
  8. import com.gmail.nossr50.skills.repair.RepairItemType;
  9. import com.gmail.nossr50.skills.repair.RepairMaterialType;
  10. import com.gmail.nossr50.skills.repair.Repairable;
  11. import com.gmail.nossr50.skills.repair.RepairableFactory;
  12. public class RepairConfig extends ConfigLoader {
  13. private final String fileName;
  14. private List<Repairable> repairables;
  15. public RepairConfig(mcMMO plugin, String fileName) {
  16. super(plugin, fileName);
  17. this.fileName = fileName;
  18. this.config = YamlConfiguration.loadConfiguration(this.configFile);
  19. }
  20. @Override
  21. protected void load() {
  22. loadKeys();
  23. }
  24. @Override
  25. protected void loadKeys() {
  26. repairables = new ArrayList<Repairable>();
  27. ConfigurationSection section = config.getConfigurationSection("Repairables");
  28. Set<String> keys = section.getKeys(false);
  29. for(String key : keys) {
  30. // Validate all the things!
  31. List<String> reason = new ArrayList<String>();
  32. if(!config.contains("Repairables." + key + ".ItemId")) {
  33. reason.add(key + " is missing ItemId");
  34. }
  35. if(!config.contains("Repairables." + key + ".RepairMaterialId")) {
  36. reason.add(key + " is missing RepairMaterialId");
  37. }
  38. if(!config.contains("Repairables." + key + ".MaximumDurability")) {
  39. reason.add(key + " is missing MaximumDurability");
  40. }
  41. int itemId = config.getInt("Repairables." + key + ".ItemId", 0);
  42. int repairMaterialId = config.getInt("Repairables." + key + ".RepairMaterialId", 0);
  43. int maximumDurability = config.getInt("Repairables." + key + ".MaximumDurability", 0);
  44. int repairMetadata = config.getInt("Repairables." + key + ".RepairMaterialMetadata", -1);
  45. int minimumLevel = config.getInt("Repairables." + key + ".MinimumLevel", 0);
  46. int minimumQuantity = config.getInt("Repairables." + key + ".MinimumQuantity", 0);
  47. double xpMultiplier = config.getDouble("Repairables." + key + ".XpMultiplier", 1);
  48. RepairItemType repairItemType = RepairItemType.OTHER;
  49. RepairMaterialType repairMaterialType = RepairMaterialType.OTHER;
  50. String repairItemTypeString = config.getString("Repairables." + key + ".ItemType", "OTHER");
  51. String repairMaterialTypeString = config.getString("Repairables." + key + ".MaterialType", "OTHER");
  52. if(minimumLevel < 0) {
  53. reason.add(key + " has an invalid MinimumLevel of " + minimumLevel);
  54. }
  55. if(minimumQuantity < 0) {
  56. reason.add(key + " has an invalid MinimumQuantity of " + minimumQuantity);
  57. }
  58. try {
  59. repairItemType = RepairItemType.valueOf(repairItemTypeString);
  60. } catch (IllegalArgumentException ex) {
  61. reason.add(key + " has an invalid ItemType of " + repairItemTypeString);
  62. }
  63. try {
  64. repairMaterialType = RepairMaterialType.valueOf(repairMaterialTypeString);
  65. } catch (IllegalArgumentException ex) {
  66. reason.add(key + " has an invalid MaterialType of " + repairMaterialTypeString);
  67. }
  68. if(noErrorsInRepairable(reason)) {
  69. Repairable repairable = RepairableFactory.getRepairable(itemId, repairMaterialId, (byte) repairMetadata, minimumLevel, minimumQuantity, (short) maximumDurability, repairItemType, repairMaterialType, xpMultiplier);
  70. repairables.add(repairable);
  71. }
  72. }
  73. }
  74. protected List<Repairable> getLoadedRepairables() {
  75. if(repairables == null) return new ArrayList<Repairable>();
  76. return repairables;
  77. }
  78. private boolean noErrorsInRepairable(List<String> issues) {
  79. if (issues.isEmpty()) {
  80. return true;
  81. }
  82. else {
  83. for (String issue : issues) {
  84. plugin.getLogger().warning(issue);
  85. }
  86. return false;
  87. }
  88. }
  89. }