HerbalismTreasureConfig.java 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. package com.gmail.nossr50.config.treasure;
  2. import com.gmail.nossr50.config.Config;
  3. import com.gmail.nossr50.config.ConfigConstants;
  4. import com.gmail.nossr50.config.Registers;
  5. import com.gmail.nossr50.config.UnsafeValueValidation;
  6. import com.gmail.nossr50.datatypes.treasure.HylianTreasure;
  7. import com.gmail.nossr50.mcMMO;
  8. import com.gmail.nossr50.util.StringUtils;
  9. import com.google.common.reflect.TypeToken;
  10. import ninja.leaping.configurate.ConfigurationNode;
  11. import ninja.leaping.configurate.objectmapping.ObjectMappingException;
  12. import org.bukkit.Material;
  13. import org.bukkit.Tag;
  14. import java.util.ArrayList;
  15. import java.util.HashMap;
  16. import java.util.List;
  17. public class HerbalismTreasureConfig extends Config implements UnsafeValueValidation, Registers {
  18. public static final String HYLIAN_LUCK = "Hylian_Luck";
  19. public static final String AMOUNT = "Amount";
  20. public static final String XP = "XP";
  21. public static final String DROP_CHANCE = "Drop_Chance";
  22. public static final String DROP_LEVEL = "Drop_Level";
  23. public static final String CUSTOM_NAME = "Custom_Name";
  24. public static final String LORE = "Lore";
  25. public HashMap<String, List<HylianTreasure>> hylianMap = new HashMap<String, List<HylianTreasure>>();
  26. public HerbalismTreasureConfig() {
  27. super("hylian_luck_drops", mcMMO.p.getDataFolder().getAbsoluteFile(), ConfigConstants.RELATIVE_PATH_CONFIG_DIR, true, false, true, false);
  28. register();
  29. }
  30. /**
  31. * This grabs an instance of this config class from the Config Manager
  32. * This method is deprecated and will be removed in the future
  33. * @see mcMMO#getConfigManager()
  34. * @return the instance of this config
  35. * @deprecated Please use mcMMO.getConfigManager() to grab a specific config instead
  36. */
  37. @Deprecated
  38. public static HerbalismTreasureConfig getInstance() {
  39. return mcMMO.getConfigManager().getHerbalismTreasureConfig();
  40. }
  41. /**
  42. * Register stuff
  43. */
  44. @Override
  45. public void register() {
  46. ConfigurationNode herbalismTreasureNode = getUserRootNode().getNode(HYLIAN_LUCK);
  47. if(herbalismTreasureNode == null)
  48. {
  49. mcMMO.p.getLogger().info("Excavation treasures in treasures config not defined");
  50. return;
  51. }
  52. try {
  53. for (ConfigurationNode treasureNode : herbalismTreasureNode.getChildrenList()) {
  54. String treasureName = treasureNode.getString();
  55. //Treasure Material Definition
  56. Material treasureMaterial = Material.matchMaterial(treasureName.toUpperCase());
  57. if(treasureMaterial != null)
  58. {
  59. ConfigurationNode currentTreasure = herbalismTreasureNode.getNode(treasureName);
  60. //TODO: Rewrite the entire treasure system because it sucks
  61. /*
  62. * TREASURE PARAMETERS
  63. */
  64. int amount = currentTreasure.getNode(AMOUNT).getInt();
  65. int xp = currentTreasure.getNode(XP).getInt();
  66. double dropChance = currentTreasure.getNode(DROP_CHANCE).getDouble();
  67. int dropLevel = currentTreasure.getNode(DROP_LEVEL).getInt();
  68. String customName = null;
  69. /*
  70. * PARAMETER INIT
  71. */
  72. ArrayList<String> dropsFrom = new ArrayList(currentTreasure.getNode("Drops_From").getList(TypeToken.of(String.class)));
  73. //VALIDATE AMOUNT
  74. if(amount <= 0)
  75. {
  76. mcMMO.p.getLogger().severe("Herbalism Hylian Luck Treasure named "+treasureName+" in the config has an amount of 0 or below, is this intentional?");
  77. mcMMO.p.getLogger().severe("Skipping "+treasureName+" for being invalid");
  78. continue;
  79. }
  80. //VALIDATE XP
  81. if(xp <= 0)
  82. {
  83. mcMMO.p.getLogger().info("Herbalism Hylian Luck Treasure named "+treasureName+" in the config has xp set to 0 or below, is this intentional?");
  84. xp = 0;
  85. }
  86. //VALIDATE DROP CHANCE
  87. if(dropChance <= 0)
  88. {
  89. mcMMO.p.getLogger().severe("Herbalism Hylian Luck Treasure named "+treasureName+" in the config has a drop chance of 0 or below, is this intentional?");
  90. mcMMO.p.getLogger().severe("Skipping "+treasureName+" for being invalid");
  91. continue;
  92. }
  93. //VALIDATE DROP LEVEL
  94. if(dropLevel < 0)
  95. {
  96. mcMMO.p.getLogger().info("Herbalism Hylian Luck Treasure named "+treasureName+" in the config has a drop level below 0, is this intentional?");
  97. dropLevel = 0;
  98. }
  99. //VALIDATE DROP SOURCES
  100. if(dropsFrom == null || dropsFrom.isEmpty())
  101. {
  102. mcMMO.p.getLogger().severe("Herbalism Hylian Luck Treasure named "+treasureName+" in the config has no drop targets, which would make it impossible to obtain, is this intentional?");
  103. mcMMO.p.getLogger().severe("Skipping "+treasureName+" for being invalid");
  104. continue;
  105. }
  106. /* OPTIONAL PARAMETERS */
  107. //Custom Name
  108. if(currentTreasure.getNode(CUSTOM_NAME) != null && !currentTreasure.getNode(CUSTOM_NAME).getString().equalsIgnoreCase("ChangeMe"))
  109. {
  110. customName = currentTreasure.getNode(CUSTOM_NAME).getString();
  111. }
  112. /*
  113. * REGISTER TREASURE
  114. */
  115. HylianTreasure hylianTreasure = TreasureFactory.makeHylianTreasure(treasureMaterial, amount, xp, dropChance, dropLevel, customName, currentTreasure.getNode(LORE));
  116. /*
  117. * Add to map
  118. */
  119. for(String dropBlock : dropsFrom)
  120. {
  121. if (dropBlock.equals("Bushes")) {
  122. addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.FERN), hylianTreasure);
  123. addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.TALL_GRASS), hylianTreasure);
  124. for (Material species : Tag.SAPLINGS.getValues())
  125. addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(species), hylianTreasure);
  126. addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.DEAD_BUSH), hylianTreasure);
  127. continue;
  128. }
  129. if (dropBlock.equals("Flowers")) {
  130. addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.POPPY), hylianTreasure);
  131. addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.DANDELION), hylianTreasure);
  132. addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.BLUE_ORCHID), hylianTreasure);
  133. addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.ALLIUM), hylianTreasure);
  134. addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.AZURE_BLUET), hylianTreasure);
  135. addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.ORANGE_TULIP), hylianTreasure);
  136. addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.PINK_TULIP), hylianTreasure);
  137. addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.RED_TULIP), hylianTreasure);
  138. addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.WHITE_TULIP), hylianTreasure);
  139. continue;
  140. }
  141. if (dropBlock.equals("Pots")) {
  142. for (Material species : Tag.FLOWER_POTS.getValues())
  143. addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(species), hylianTreasure);
  144. continue;
  145. }
  146. addHylianTreasure(dropBlock, hylianTreasure);
  147. }
  148. } else {
  149. mcMMO.p.getLogger().severe("Excavation Treasure Config - Material named "+treasureName+" does not match any known material.");
  150. }
  151. }
  152. } catch (ObjectMappingException e) {
  153. e.printStackTrace();
  154. }
  155. }
  156. @Override
  157. public void unload() {
  158. hylianMap.clear();
  159. }
  160. @Override
  161. public List<String> validateKeys() {
  162. return null;
  163. }
  164. /**
  165. * The version of this config
  166. *
  167. * @return
  168. */
  169. @Override
  170. public double getConfigVersion() {
  171. return 1;
  172. }
  173. private void addHylianTreasure(String dropper, HylianTreasure treasure) {
  174. if (!hylianMap.containsKey(dropper))
  175. hylianMap.put(dropper, new ArrayList<HylianTreasure>());
  176. hylianMap.get(dropper).add(treasure);
  177. }
  178. }