Browse Source

BonusDrops (Double/Triple) are now managed by BonusDropManager

nossr50 6 years ago
parent
commit
5c6f0e8cbf

+ 60 - 0
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<Material, Boolean> 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<Material> 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);
+    }
+}

+ 27 - 15
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> 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<Material, Integer> partyItemWeights;
     private HashMap<PartyFeature, Integer> partyFeatureUnlocks;
 
-
-
     /* CONFIG ERRORS */
 
     private ArrayList<String> 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);

+ 1 - 1
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);
     }
 
     /**

+ 2 - 4
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));
         }