diff --git a/src/main/java/com/gmail/nossr50/config/BonusDropManager.java b/src/main/java/com/gmail/nossr50/config/BonusDropManager.java new file mode 100644 index 000000000..149d3a208 --- /dev/null +++ b/src/main/java/com/gmail/nossr50/config/BonusDropManager.java @@ -0,0 +1,60 @@ +package com.gmail.nossr50.config; + +import org.bukkit.Material; + +import java.util.HashMap; +import java.util.List; + +/** + * Manages a collection of whitelisted materials for Double Drops + */ +public class BonusDropManager implements Unload { + + private HashMap bonusDropWhitelist; + + public BonusDropManager() + { + bonusDropWhitelist = new HashMap<>(); + + //Start by setting all Materials to false to avoid null checks + for(Material material : Material.values()) + { + registerMaterial(material, false); + } + } + + @Override + public void unload() { + bonusDropWhitelist.clear(); + } + + /** + * Adds materials to the bonus drop whitelist + * @param materials target material list + */ + public void addToWhitelist(List materials) + { + for(Material material : materials) + { + registerMaterial(material, true); + } + } + + /** + * Adds a material to the bonus drop whitelist + * @param material target material + */ + private void registerMaterial(Material material, boolean isWhitelisted) { + bonusDropWhitelist.put(material, isWhitelisted); + } + + /** + * Check if a material can provide bonus drops + * @param material target material + * @return true if the material can provide bonus drops + */ + public boolean isBonusDropWhitelisted(Material material) + { + return bonusDropWhitelist.get(material); + } +} diff --git a/src/main/java/com/gmail/nossr50/config/ConfigManager.java b/src/main/java/com/gmail/nossr50/config/ConfigManager.java index 2d197b906..88bed0a1d 100644 --- a/src/main/java/com/gmail/nossr50/config/ConfigManager.java +++ b/src/main/java/com/gmail/nossr50/config/ConfigManager.java @@ -78,6 +78,7 @@ public final class ConfigManager { private RepairableManager repairableManager; private SalvageableManager salvageableManager; + private BonusDropManager bonusDropManager; /* MOD MANAGERS */ @@ -89,13 +90,6 @@ public final class ConfigManager { private ExperienceMapManager experienceMapManager; - //private ModManager modManager; - - /*private ToolConfigManager toolConfigManager; - private ArmorConfigManager armorConfigManager; - private BlockConfigManager blockConfigManager; - private EntityConfigManager entityConfigManager;*/ - /* CONFIG INSTANCES */ private SerializedConfigLoader configDatabase; @@ -147,14 +141,10 @@ public final class ConfigManager { private CoreSkillsConfig coreSkillsConfig; private SoundConfig soundConfig; private RankConfig rankConfig; -// private RepairConfig repairConfig; -// private SalvageConfig salvageConfig; private HashMap partyItemWeights; private HashMap partyFeatureUnlocks; - - /* CONFIG ERRORS */ private ArrayList configErrors; //Collect errors to whine about to server admins @@ -258,6 +248,9 @@ public final class ConfigManager { partyItemWeights = Maps.newHashMap(configParty.getConfig().getPartyItemShare().getItemShareMap()); //Item Share Weights partyFeatureUnlocks = Maps.newHashMap(configParty.getConfig().getPartyXP().getPartyLevel().getPartyFeatureUnlockMap()); //Party Progression + //Register Bonus Drops + registerBonusDrops(); + //YAML Configs mainConfig = new MainConfig(); @@ -278,10 +271,6 @@ public final class ConfigManager { rankConfig = new RankConfig(); -// repairConfig = new RepairConfig(); - -// salvageConfig = new SalvageConfig(); - /* * Managers */ @@ -325,6 +314,10 @@ public final class ConfigManager { // Handles registration of salvageables salvageableManager = new SalvageableManager(getSalvageables()); unloadables.add(salvageableManager); + + // Handles registration of bonus drops + bonusDropManager = new BonusDropManager(); + unloadables.add(bonusDropManager); } /** @@ -381,6 +374,16 @@ public final class ConfigManager { userFiles.add(userFile); } + /** + * Registers bonus drops from several skill configs + */ + public void registerBonusDrops() + { + bonusDropManager.addToWhitelist(configMining.getBonusDrops()); + bonusDropManager.addToWhitelist(configHerbalism.getBonusDrops()); + bonusDropManager.addToWhitelist(configWoodcutting.getBonusDrops()); + } + /* * GETTER BOILER PLATE */ @@ -586,6 +589,15 @@ public final class ConfigManager { return configSalvage.getConfig(); } + public BonusDropManager getBonusDropManager() { + return bonusDropManager; + } + + public boolean isBonusDropsEnabled(Material material) + { + return getBonusDropManager().isBonusDropWhitelisted(material); + } + public double getSkillMaxBonusLevel(SubSkillType subSkillType) { return skillPropertiesManager.getMaxBonusLevel(subSkillType); diff --git a/src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java b/src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java index 2b6438e98..f8375c9bc 100644 --- a/src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java +++ b/src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java @@ -181,7 +181,7 @@ public class HerbalismManager extends SkillManager { */ public boolean checkDoubleDrop(BlockState blockState) { - return BlockUtils.checkDoubleDrops(getPlayer(), blockState, skill, SubSkillType.HERBALISM_DOUBLE_DROPS); + return BlockUtils.checkDoubleDrops(getPlayer(), blockState, SubSkillType.HERBALISM_DOUBLE_DROPS); } /** diff --git a/src/main/java/com/gmail/nossr50/util/BlockUtils.java b/src/main/java/com/gmail/nossr50/util/BlockUtils.java index 46b0ef519..69879643d 100644 --- a/src/main/java/com/gmail/nossr50/util/BlockUtils.java +++ b/src/main/java/com/gmail/nossr50/util/BlockUtils.java @@ -1,7 +1,5 @@ package com.gmail.nossr50.util; -import com.gmail.nossr50.config.Config; -import com.gmail.nossr50.datatypes.skills.PrimarySkillType; import com.gmail.nossr50.datatypes.skills.SubSkillType; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.skills.repair.Repair; @@ -38,9 +36,9 @@ public final class BlockUtils { * @param blockState the blockstate * @return true if the player succeeded in the check */ - public static boolean checkDoubleDrops(Player player, BlockState blockState, PrimarySkillType skillType, SubSkillType subSkillType) + public static boolean checkDoubleDrops(Player player, BlockState blockState, SubSkillType subSkillType) { - if(Config.getInstance().getDoubleDropsEnabled(skillType, blockState.getType()) && Permissions.isSubSkillEnabled(player, subSkillType)) + if(mcMMO.getConfigManager().isBonusDropsEnabled(blockState.getType()) && Permissions.isSubSkillEnabled(player, subSkillType)) { return RandomChanceUtil.checkRandomChanceExecutionSuccess(new RandomChanceSkill(player, subSkillType, true)); }