diff --git a/Changelog.txt b/Changelog.txt index 4e023d34a..7c4e5314f 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -125,6 +125,10 @@ Version 2.1.16 Giga Drill Breaker will now break "diggable" blocks even if they have no configured treasures mcMMO's mod config system has been temporarily disabled as no modded bukkit servers even exist Mycellium removed from woodcutting XP (whoops) + Optimized XP lookups for block breaking + Super Breaker will now break "Mining" blocks even if they have no XP entries + Tree Feller will now break "Woodcutting" blocks even if they have no XP entries + Giga Drill Breaker will now break "diggable" blocks even if they have no configured treasures removed child.yml, child skills now have hard coded parents removed the hardcore and vampirism commands, these are dangerous settings and should not be toggle-able (turn them on in your configs if you want to use them) diff --git a/src/main/java/com/gmail/nossr50/config/ConfigManager.java b/src/main/java/com/gmail/nossr50/config/ConfigManager.java index 7f2fd9059..89758a71c 100644 --- a/src/main/java/com/gmail/nossr50/config/ConfigManager.java +++ b/src/main/java/com/gmail/nossr50/config/ConfigManager.java @@ -12,6 +12,7 @@ import com.gmail.nossr50.skills.repair.repairables.Repairable; import com.gmail.nossr50.skills.repair.repairables.SimpleRepairableManager; import com.gmail.nossr50.skills.salvage.salvageables.Salvageable; import com.gmail.nossr50.skills.salvage.salvageables.SimpleSalvageableManager; +import com.gmail.nossr50.util.experience.ExperienceMapManager; import java.io.File; import java.util.ArrayList; @@ -50,6 +51,10 @@ public final class ConfigManager { //TODO: Add these back when modded servers become a thing again + /* MISC MANAGERS */ + + private ExperienceMapManager experienceMapManager; + //private ModManager modManager; /*private ToolConfigManager toolConfigManager; @@ -127,10 +132,23 @@ public final class ConfigManager { // Multi Config Containers initMultiConfigContainers(); + /* + * Managers + */ + // Register Managers + initMiscManagers(); initCollectionManagers(); } + /** + * Misc managers + */ + private void initMiscManagers() + { + experienceMapManager = new ExperienceMapManager(); + } + /** * Initializes all of our Multi Config Containers */ @@ -277,4 +295,8 @@ public final class ConfigManager { public ItemWeightConfig getItemWeightConfig() { return itemWeightConfig; } + + public ExperienceMapManager getExperienceMapManager() { + return experienceMapManager; + } } diff --git a/src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java b/src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java index ed4438981..32f013da9 100644 --- a/src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java +++ b/src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java @@ -349,21 +349,6 @@ public class ExperienceConfig extends ConfigValidated { return getIntValue(path); } - /** - * Checks if a block gives XP - * This is used to determine whether or not mcMMO should track a block that is placed by a user, among other things. - * Note: If the block has an entry in the config that will return true even if the XP is 0, this does not check the value of the XP - * @param skill The skill to check for - * @param blockType the type of block - * @return true if the block does give XP - */ - public boolean doesBlockGiveSkillXP(PrimarySkillType skill, Material blockType) { - //TODO: This used to support wildcard characters, seems a bit unnecessary to do so. - //TODO: This is going to need to be changed, this code here is only placeholder - String[] path = new String[] {EXPERIENCE, StringUtils.getCapitalized(skill.toString()), blockType.toString()}; - return hasNode(path); - } - /* * Experience Bar Stuff */ diff --git a/src/main/java/com/gmail/nossr50/util/experience/ExperienceMapManager.java b/src/main/java/com/gmail/nossr50/util/experience/ExperienceMapManager.java new file mode 100644 index 000000000..08cba6d23 --- /dev/null +++ b/src/main/java/com/gmail/nossr50/util/experience/ExperienceMapManager.java @@ -0,0 +1,116 @@ +package com.gmail.nossr50.util.experience; + +import com.gmail.nossr50.config.Unload; +import com.gmail.nossr50.mcMMO; +import org.bukkit.Material; + +import java.util.HashMap; + +/** + * This class handles the XP for block break related XP + */ +public class ExperienceMapManager implements Unload { + public HashMap miningXpMap; + public HashMap herbalismXpMap; + public HashMap woodcuttingXpMap; + public HashMap excavationXpMap; + + public ExperienceMapManager() + { + miningXpMap = new HashMap<>(); + herbalismXpMap = new HashMap<>(); + woodcuttingXpMap = new HashMap<>(); + excavationXpMap = new HashMap<>(); + + //Register with unloader + mcMMO.getConfigManager().registerUnloadable(this); + } + + /** + * Determines whether or not a block has Mining XP + * @param material target block material type + * @return true if the block has valid xp registers + */ + public boolean hasMiningXp(Material material) + { + return miningXpMap.get(material) != null; + } + + /** + * Determines whether or not a block has Herbalism XP + * @param material target block material type + * @return true if the block has valid xp registers + */ + public boolean hasHerbalismXp(Material material) + { + return herbalismXpMap.get(material) != null; + } + + /** + * Determines whether or not a block has Woodcutting XP + * @param material target block material type + * @return true if the block has valid xp registers + */ + public boolean hasWoodcuttingXp(Material material) + { + return woodcuttingXpMap.get(material) != null; + } + + /** + * Determines whether or not a block has Excavation XP + * @param material target block material type + * @return true if the block has valid xp registers + */ + public boolean hasExcavationXp(Material material) + { + return excavationXpMap.get(material) != null; + } + + /** + * Gets the XP value for breaking this block from the xp map + * @param material the target block material + * @return the raw XP value before any modifiers are applied + */ + public int getMiningXp(Material material) + { + return miningXpMap.get(material); + } + + /** + * Gets the XP value for breaking this block from the xp map + * @param material the target block material + * @return the raw XP value before any modifiers are applied + */ + public int getHerbalismXp(Material material) + { + return herbalismXpMap.get(material); + } + + /** + * Gets the XP value for breaking this block from the xp map + * @param material the target block material + * @return the raw XP value before any modifiers are applied + */ + public int getWoodcuttingXp(Material material) + { + return woodcuttingXpMap.get(material); + } + + /** + * Gets the XP value for breaking this block from the xp map + * @param material the target block material + * @return the raw XP value before any modifiers are applied + */ + public int getExcavationXp(Material material) + { + return excavationXpMap.get(material); + } + + @Override + public void unload() { + miningXpMap.clear(); + woodcuttingXpMap.clear(); + herbalismXpMap.clear(); + excavationXpMap.clear(); + } +}