CustomBlockConfig.java 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. package com.gmail.nossr50.config.mods;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Set;
  6. import org.bukkit.Material;
  7. import org.bukkit.configuration.ConfigurationSection;
  8. import org.bukkit.inventory.ItemStack;
  9. import org.bukkit.material.MaterialData;
  10. import com.gmail.nossr50.config.ConfigLoader;
  11. import com.gmail.nossr50.datatypes.mods.CustomBlock;
  12. public class CustomBlockConfig extends ConfigLoader {
  13. private static CustomBlockConfig instance;
  14. private boolean needsUpdate = false;
  15. private List<MaterialData> customExcavationBlocks = new ArrayList<MaterialData>();
  16. private List<MaterialData> customHerbalismBlocks = new ArrayList<MaterialData>();
  17. private List<MaterialData> customMiningBlocks = new ArrayList<MaterialData>();
  18. private List<MaterialData> customWoodcuttingBlocks = new ArrayList<MaterialData>();
  19. private List<MaterialData> customOres = new ArrayList<MaterialData>();
  20. private List<MaterialData> customLogs = new ArrayList<MaterialData>();
  21. private List<MaterialData> customLeaves = new ArrayList<MaterialData>();
  22. private List<MaterialData> customAbilityBlocks = new ArrayList<MaterialData>();
  23. private HashMap<MaterialData, CustomBlock> customBlockMap = new HashMap<MaterialData, CustomBlock>();
  24. public CustomBlockConfig() {
  25. super("mods", "blocks.yml");
  26. loadKeys();
  27. }
  28. public static CustomBlockConfig getInstance() {
  29. if (instance == null) {
  30. instance = new CustomBlockConfig();
  31. }
  32. return instance;
  33. }
  34. @Override
  35. protected void loadKeys() {
  36. while (!needsUpdate) {
  37. loadBlocks("Excavation", customExcavationBlocks);
  38. loadBlocks("Herbalism", customHerbalismBlocks);
  39. loadBlocks("Mining", customMiningBlocks);
  40. loadBlocks("Woodcutting", customWoodcuttingBlocks);
  41. loadBlocks("Ability_Blocks", customAbilityBlocks);
  42. }
  43. if (needsUpdate) {
  44. needsUpdate = false;
  45. backup();
  46. }
  47. }
  48. private void loadBlocks(String skillType, List<MaterialData> blockList) {
  49. ConfigurationSection skillSection = config.getConfigurationSection(skillType);
  50. if (skillSection == null) {
  51. return;
  52. }
  53. Set<String> skillConfigSet = skillSection.getKeys(false);
  54. for (String blockName : skillConfigSet) {
  55. if (config.contains(skillType + "." + blockName + "." + ".ID")) {
  56. needsUpdate = true;
  57. return;
  58. }
  59. String[] blockInfo = blockName.split("[|]");
  60. Material blockMaterial = Material.matchMaterial(blockInfo[0]);
  61. if (blockMaterial == null) {
  62. plugin.getLogger().warning("Invalid material name. This item will be skipped. - " + blockInfo[0]);
  63. continue;
  64. }
  65. byte blockData = Byte.valueOf(blockInfo[1]);
  66. MaterialData blockMaterialData = new MaterialData(blockMaterial, blockData);
  67. blockList.add(blockMaterialData);
  68. if (skillType.equals("Ability_Blocks")) {
  69. continue;
  70. }
  71. int xp = config.getInt(skillType + "." + blockName + ".XP_Gain");
  72. boolean shouldDropItem = config.getBoolean(skillType + "." + blockName + ".Drop_Item");
  73. Material dropMaterial = Material.matchMaterial(config.getString(skillType + "." + blockName + ".Drop_Item_Name"));
  74. if (shouldDropItem && dropMaterial == null) {
  75. plugin.getLogger().warning("Incomplete item drop information. This block will drop itself. - " + blockInfo[0]);
  76. shouldDropItem = false;
  77. }
  78. ItemStack itemDrop;
  79. if (shouldDropItem) {
  80. byte dropData = (byte) config.getInt(skillType + "." + blockName + ".Drop_Item_Data_Value");
  81. itemDrop = (new MaterialData(dropMaterial, dropData)).toItemStack(1);
  82. }
  83. else {
  84. itemDrop = blockMaterialData.toItemStack(1);
  85. }
  86. int minimumDropAmount = config.getInt(skillType + "." + blockName + ".Min_Drop_Item_Amount", 1);
  87. int maxiumDropAmount = config.getInt(skillType + "." + blockName + ".Max_Drop_Item_Amount", 1);
  88. if (skillType.equals("Mining") && config.getBoolean(skillType + "." + blockName + ".Is_Ore")) {
  89. customOres.add(blockMaterialData);
  90. }
  91. else if (skillType.equals("Woodcutting")) {
  92. if (config.getBoolean(skillType + "." + blockName + ".Is_Log")) {
  93. customLogs.add(blockMaterialData);
  94. }
  95. else {
  96. customLeaves.add(blockMaterialData);
  97. xp = 0; // Leaves don't grant XP
  98. }
  99. }
  100. customBlockMap.put(blockMaterialData, new CustomBlock(minimumDropAmount, maxiumDropAmount, itemDrop, xp));
  101. }
  102. }
  103. public CustomBlock getCustomBlock(MaterialData data) {
  104. return customBlockMap.get(data);
  105. }
  106. public boolean isCustomOre(MaterialData data) {
  107. return customOres.contains(data);
  108. }
  109. public boolean isCustomLog(MaterialData data) {
  110. return customLogs.contains(data);
  111. }
  112. public boolean isCustomLeaf(MaterialData data) {
  113. return customLeaves.contains(data);
  114. }
  115. public boolean isCustomAbilityBlock(MaterialData data) {
  116. return customAbilityBlocks.contains(data);
  117. }
  118. public boolean isCustomExcavationBlock(MaterialData data) {
  119. return customExcavationBlocks.contains(data);
  120. }
  121. public boolean isCustomHerbalismBlock(MaterialData data) {
  122. return customHerbalismBlocks.contains(data);
  123. }
  124. public boolean isCustomMiningBlock(MaterialData data) {
  125. return customMiningBlocks.contains(data);
  126. }
  127. public boolean isCustomWoodcuttingBlock(MaterialData data) {
  128. return customWoodcuttingBlocks.contains(data);
  129. }
  130. }