From 2e3f9b4a9604d537274ea1fc0b97235b96caa792 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Mon, 13 May 2019 02:55:20 -0700 Subject: [PATCH] Add + Wire DiminishingReturn config values Removed the experience multiplier from the xp conversion task, it just seems like something very unecessary --- Changelog.txt | 3 +- .../com/gmail/nossr50/api/ExperienceAPI.java | 2 +- .../api/exceptions/InvalidSkillException.java | 4 +- .../exceptions/UndefinedSkillBehaviour.java | 9 ++ .../gmail/nossr50/config/ConfigManager.java | 1 - .../config/experience/ExperienceConfig.java | 27 ------ .../config/hocon/CustomXPPerkSerializer.java | 2 +- .../hocon/playerleveling/ConfigLeveling.java | 33 +++++++ .../ConfigLevelingDiminishedReturns.java | 86 +++++++++++++++++++ .../treasure/ExcavationTreasureConfig.java | 5 -- .../treasure/HerbalismTreasureConfig.java | 6 -- .../gmail/nossr50/core/BonusDropManager.java | 1 + .../datatypes/experience/SkillXpGain.java | 3 +- .../gmail/nossr50/listeners/SelfListener.java | 6 +- src/main/java/com/gmail/nossr50/mcMMO.java | 3 +- .../database/FormulaConversionTask.java | 2 +- .../util/experience/ExperienceMapManager.java | 8 +- 17 files changed, 146 insertions(+), 55 deletions(-) create mode 100644 src/main/java/com/gmail/nossr50/api/exceptions/UndefinedSkillBehaviour.java create mode 100644 src/main/java/com/gmail/nossr50/config/hocon/playerleveling/ConfigLevelingDiminishedReturns.java diff --git a/Changelog.txt b/Changelog.txt index 3cf89b1cf..a76a4ac60 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -138,7 +138,7 @@ Version 2.2.0 Update_Check, Prefer_Beta, Ability_Activation_Level_Gate, Max_Tries_At_Same_Location, Prevent_AFK_Leveling, Items_Pickup_Disabled_Full_Inventory Removed the following config settings for being unwanted - Config_Update_Overwrite, Tool_Mods_Enabled, Armor_Mods_Enabled, Block_Mods_Enabled, Entity_Mods_Enabled, + Config_Update_Overwrite, Tool_Mods_Enabled, Armor_Mods_Enabled, Block_Mods_Enabled, Entity_Mods_Enabled, ExperienceConversionMultiplier API Changes Config settings can now be found in the ConfigManager (getter for it in mcMMO.java) @@ -150,6 +150,7 @@ Version 2.2.0 Added API method to check if player parties are size capped Added API method to grab the level cap of a skill by its PrimarySkillType ENUM definition Added API method to check if a skill was being level capped + Added 'UndefinedSkillBehaviour' for trying to use a method that has no behaviour defined for the provided skill Version 2.1.58 Fixed the wrong locale string being used for Mining Double Drops diff --git a/src/main/java/com/gmail/nossr50/api/ExperienceAPI.java b/src/main/java/com/gmail/nossr50/api/ExperienceAPI.java index 0038b84ef..a581e3ee7 100644 --- a/src/main/java/com/gmail/nossr50/api/ExperienceAPI.java +++ b/src/main/java/com/gmail/nossr50/api/ExperienceAPI.java @@ -1092,7 +1092,7 @@ public final class ExperienceAPI { PrimarySkillType skill = PrimarySkillType.getSkill(skillType); if (skill == null) { - throw new InvalidSkillException(); + throw new InvalidSkillException(skillType); } return skill; diff --git a/src/main/java/com/gmail/nossr50/api/exceptions/InvalidSkillException.java b/src/main/java/com/gmail/nossr50/api/exceptions/InvalidSkillException.java index f94207a41..ff389de2f 100644 --- a/src/main/java/com/gmail/nossr50/api/exceptions/InvalidSkillException.java +++ b/src/main/java/com/gmail/nossr50/api/exceptions/InvalidSkillException.java @@ -3,7 +3,7 @@ package com.gmail.nossr50.api.exceptions; public class InvalidSkillException extends RuntimeException { private static final long serialVersionUID = 942705284195791157L; - public InvalidSkillException() { - super("That is not a valid skill."); + public InvalidSkillException(String s) { + super(s+" does not match a valid skill."); } } diff --git a/src/main/java/com/gmail/nossr50/api/exceptions/UndefinedSkillBehaviour.java b/src/main/java/com/gmail/nossr50/api/exceptions/UndefinedSkillBehaviour.java new file mode 100644 index 000000000..a50db1843 --- /dev/null +++ b/src/main/java/com/gmail/nossr50/api/exceptions/UndefinedSkillBehaviour.java @@ -0,0 +1,9 @@ +package com.gmail.nossr50.api.exceptions; + +import com.gmail.nossr50.datatypes.skills.PrimarySkillType; + +public class UndefinedSkillBehaviour extends RuntimeException { + public UndefinedSkillBehaviour(PrimarySkillType primarySkillType) { + super("Undefined behaviour for skill! - "+primarySkillType.toString()); + } +} diff --git a/src/main/java/com/gmail/nossr50/config/ConfigManager.java b/src/main/java/com/gmail/nossr50/config/ConfigManager.java index e4c50a0f0..91982db81 100644 --- a/src/main/java/com/gmail/nossr50/config/ConfigManager.java +++ b/src/main/java/com/gmail/nossr50/config/ConfigManager.java @@ -50,7 +50,6 @@ import com.gmail.nossr50.datatypes.skills.PrimarySkillType; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.skills.repair.repairables.Repairable; import com.gmail.nossr50.skills.salvage.salvageables.Salvageable; -import com.google.common.collect.Maps; import com.google.common.reflect.TypeToken; import ninja.leaping.configurate.objectmapping.serialize.TypeSerializerCollection; import ninja.leaping.configurate.objectmapping.serialize.TypeSerializers; 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 793379cc0..289c2b1ba 100644 --- a/src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java +++ b/src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java @@ -122,33 +122,6 @@ public class ExperienceConfig extends ConfigValidated { config.set(EXPERIENCE_FORMULA, MULTIPLIER, GLOBAL, value); }*/ - /* Custom XP perk */ - public double getCustomXpPerkBoost() { - return getDoubleValue(EXPERIENCE_FORMULA, CUSTOM_XP_PERK, BOOST); - } - - /* Diminished Returns */ - public float getDiminishedReturnsCap() { - return (float) getDoubleValue(DIMISHED_RETURNS, GUARANTEED_MINIMUM_PERCENTAGE); - } - - public boolean getDiminishedReturnsEnabled() { - return getBooleanValue(DIMINISHED_RETURNS, ENABLED); - } - - public int getDiminishedReturnsThreshold(PrimarySkillType skill) { - return getIntValue(DIMINISHED_RETURNS, THRESHOLD, StringUtils.getCapitalized(skill.toString())); - } - - public int getDiminishedReturnsTimeInterval() { - return getIntValue(DIMINISHED_RETURNS, TIME_INTERVAL); - } - - /* Conversion */ - public double getExpModifier() { - return getDoubleValue(CONVERSION, EXP + MODIFIER); - } - /* * XP SETTINGS */ diff --git a/src/main/java/com/gmail/nossr50/config/hocon/CustomXPPerkSerializer.java b/src/main/java/com/gmail/nossr50/config/hocon/CustomXPPerkSerializer.java index 7752bcb47..157d982e7 100644 --- a/src/main/java/com/gmail/nossr50/config/hocon/CustomXPPerkSerializer.java +++ b/src/main/java/com/gmail/nossr50/config/hocon/CustomXPPerkSerializer.java @@ -64,7 +64,7 @@ public class CustomXPPerkSerializer implements TypeSerializer { return primarySkillType; } - throw new InvalidSkillException(); + throw new InvalidSkillException(string); } /* diff --git a/src/main/java/com/gmail/nossr50/config/hocon/playerleveling/ConfigLeveling.java b/src/main/java/com/gmail/nossr50/config/hocon/playerleveling/ConfigLeveling.java index 891671bf1..ce4d2d790 100644 --- a/src/main/java/com/gmail/nossr50/config/hocon/playerleveling/ConfigLeveling.java +++ b/src/main/java/com/gmail/nossr50/config/hocon/playerleveling/ConfigLeveling.java @@ -1,10 +1,14 @@ package com.gmail.nossr50.config.hocon.playerleveling; +import com.gmail.nossr50.api.exceptions.InvalidSkillException; import com.gmail.nossr50.datatypes.experience.FormulaType; import com.gmail.nossr50.datatypes.skills.PrimarySkillType; +import com.gmail.nossr50.mcMMO; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; +import java.util.HashMap; + @ConfigSerializable public class ConfigLeveling { @@ -27,10 +31,37 @@ public class ConfigLeveling { @Setting(value = "Experience-Formula") private ConfigExperienceFormula configExperienceFormula = new ConfigExperienceFormula(); + @Setting(value = "Diminished-Returns", comment = "Penalize players for gaining XP too quickly in a given time period.") + private ConfigLevelingDiminishedReturns configLevelingDiminishedReturns = new ConfigLevelingDiminishedReturns(); + /* * GETTER BOILERPLATE */ + public float getGuaranteedMinimums() { + return configLevelingDiminishedReturns.getGuaranteedMinimums(); + } + + public boolean isDiminishedReturnsEnabled() { + return configLevelingDiminishedReturns.isDiminishedReturnsEnabled(); + } + + public int getDimishedReturnTimeInterval() { + return configLevelingDiminishedReturns.getDimishedReturnTimeInterval(); + } + + public HashMap getSkillThresholds() { + return configLevelingDiminishedReturns.getSkillThresholds(); + } + + public int getSkillThreshold(PrimarySkillType primarySkillType) { + return configLevelingDiminishedReturns.getSkillThreshold(primarySkillType); + } + + public ConfigLevelingDiminishedReturns getConfigLevelingDiminishedReturns() { + return configLevelingDiminishedReturns; + } + public double getSkillXpFormulaModifier(PrimarySkillType primarySkillType) { return getConfigExperienceFormula().getSkillXpFormulaModifier(primarySkillType); } @@ -152,6 +183,7 @@ public class ConfigLeveling { case SALVAGE: return configSectionLevelCaps.getConfigSectionSkillLevelCaps().getSalvage().getLevelCap(); default: + mcMMO.p.getLogger().severe("No defined level cap for "+primarySkillType.toString()+" - Contact the mcMMO dev team!"); return Integer.MAX_VALUE; } } @@ -189,6 +221,7 @@ public class ConfigLeveling { case SALVAGE: return configSectionLevelCaps.getConfigSectionSkillLevelCaps().getSalvage().isLevelCapEnabled(); default: + mcMMO.p.getLogger().severe("No defined level cap for "+primarySkillType.toString()+" - Contact the mcMMO dev team!"); return false; } } diff --git a/src/main/java/com/gmail/nossr50/config/hocon/playerleveling/ConfigLevelingDiminishedReturns.java b/src/main/java/com/gmail/nossr50/config/hocon/playerleveling/ConfigLevelingDiminishedReturns.java new file mode 100644 index 000000000..477716ba3 --- /dev/null +++ b/src/main/java/com/gmail/nossr50/config/hocon/playerleveling/ConfigLevelingDiminishedReturns.java @@ -0,0 +1,86 @@ +package com.gmail.nossr50.config.hocon.playerleveling; + +import com.gmail.nossr50.datatypes.skills.PrimarySkillType; +import ninja.leaping.configurate.objectmapping.Setting; +import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; + +import java.util.HashMap; + +import static com.gmail.nossr50.datatypes.skills.PrimarySkillType.*; + +@ConfigSerializable +public class ConfigLevelingDiminishedReturns { + + /* + Diminished_Returns: + #This is the minimum amount of XP a player will earn after reaching the timed threshold (this is to prevent punishing a player too hard for earning XP) + ## A value of 1 would mean that a player gets FULL XP, which defeats the purpose of diminished returns, the default value is 0.05 (5% minimum XP) + ### Set this value to 0 to turn it off + Guaranteed_Minimum_Percentage: 0.05 + Enabled: false + */ + + private static final HashMap SKILL_THRESHOLDS_DEFAULT; + public static final float GURANTEED_MIN_DEFAULT = 0.05f; + + static { + SKILL_THRESHOLDS_DEFAULT = new HashMap<>(); + SKILL_THRESHOLDS_DEFAULT.put(ACROBATICS, 10000); + SKILL_THRESHOLDS_DEFAULT.put(ALCHEMY, 10000); + SKILL_THRESHOLDS_DEFAULT.put(ARCHERY, 10000); + SKILL_THRESHOLDS_DEFAULT.put(AXES, 10000); + SKILL_THRESHOLDS_DEFAULT.put(EXCAVATION, 10000); + SKILL_THRESHOLDS_DEFAULT.put(FISHING, 10000); + SKILL_THRESHOLDS_DEFAULT.put(HERBALISM, 10000); + SKILL_THRESHOLDS_DEFAULT.put(MINING, 10000); + SKILL_THRESHOLDS_DEFAULT.put(REPAIR, 10000); + SKILL_THRESHOLDS_DEFAULT.put(SWORDS, 10000); + SKILL_THRESHOLDS_DEFAULT.put(TAMING, 10000); + SKILL_THRESHOLDS_DEFAULT.put(UNARMED, 10000); + SKILL_THRESHOLDS_DEFAULT.put(WOODCUTTING, 10000); + } + + private static final boolean DIMINISHED_RETURNS_DEFAULT = false; + private static final int DIMINISHED_TIME_DEFAULT = 10; + + @Setting(value = "Enabled", comment = "Setting this to true will enable Diminished Returns on XP Gains." + + "\nDefault value: "+DIMINISHED_RETURNS_DEFAULT) + private boolean diminishedReturnsEnabled = DIMINISHED_RETURNS_DEFAULT; + + @Setting(value = "Time-Interval-In-Minutes", comment = "The period of time in which to measure a players XP gain and reduce gains above a threshold during that time" + + "\nPlayers will be able to gain up to the threshold of XP in this time period before having their XP drastically reduced" + + "\nDefault value: "+DIMINISHED_TIME_DEFAULT) + private int dimishedReturnTimeInterval = DIMINISHED_TIME_DEFAULT; + + @Setting(value = "Skill-Thresholds", comment = "The amount of XP that a player can gain without penalty in the defined time interval." + + "\nDefault value: 10000 for each skill, undefined skills will default to this value") + private HashMap skillThresholds = SKILL_THRESHOLDS_DEFAULT; + + @Setting(value = "Guaranteed-Minimum", comment = "The multiplier applied to an XP gain when a player has reached diminishing returns to guarantee that some XP is still gained." + + "\nPlayers will gain (raw XP * guaranteedMinimum) if they are under sever enough diminishing return penalty (ie their XP would normally fall below this value)" + + "\nDefault value: ") + private float guaranteedMinimums = GURANTEED_MIN_DEFAULT; + + public int getSkillThreshold(PrimarySkillType primarySkillType) { + if(skillThresholds.get(primarySkillType) == null) + return 10000; + + return skillThresholds.get(primarySkillType); + } + + public float getGuaranteedMinimums() { + return guaranteedMinimums; + } + + public boolean isDiminishedReturnsEnabled() { + return diminishedReturnsEnabled; + } + + public int getDimishedReturnTimeInterval() { + return dimishedReturnTimeInterval; + } + + public HashMap getSkillThresholds() { + return skillThresholds; + } +} diff --git a/src/main/java/com/gmail/nossr50/config/treasure/ExcavationTreasureConfig.java b/src/main/java/com/gmail/nossr50/config/treasure/ExcavationTreasureConfig.java index 2607ef457..562ca7089 100644 --- a/src/main/java/com/gmail/nossr50/config/treasure/ExcavationTreasureConfig.java +++ b/src/main/java/com/gmail/nossr50/config/treasure/ExcavationTreasureConfig.java @@ -5,12 +5,7 @@ import com.gmail.nossr50.config.ConfigConstants; import com.gmail.nossr50.config.UnsafeValueValidation; import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure; import com.gmail.nossr50.mcMMO; -import com.google.common.reflect.TypeToken; -import ninja.leaping.configurate.ConfigurationNode; -import ninja.leaping.configurate.objectmapping.ObjectMappingException; -import org.bukkit.Material; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; diff --git a/src/main/java/com/gmail/nossr50/config/treasure/HerbalismTreasureConfig.java b/src/main/java/com/gmail/nossr50/config/treasure/HerbalismTreasureConfig.java index 89383dd7f..185e2be07 100644 --- a/src/main/java/com/gmail/nossr50/config/treasure/HerbalismTreasureConfig.java +++ b/src/main/java/com/gmail/nossr50/config/treasure/HerbalismTreasureConfig.java @@ -5,12 +5,6 @@ import com.gmail.nossr50.config.ConfigConstants; import com.gmail.nossr50.config.UnsafeValueValidation; import com.gmail.nossr50.datatypes.treasure.HylianTreasure; import com.gmail.nossr50.mcMMO; -import com.gmail.nossr50.util.StringUtils; -import com.google.common.reflect.TypeToken; -import ninja.leaping.configurate.ConfigurationNode; -import ninja.leaping.configurate.objectmapping.ObjectMappingException; -import org.bukkit.Material; -import org.bukkit.Tag; import java.util.ArrayList; import java.util.HashMap; diff --git a/src/main/java/com/gmail/nossr50/core/BonusDropManager.java b/src/main/java/com/gmail/nossr50/core/BonusDropManager.java index 00ee30c69..a97d88086 100644 --- a/src/main/java/com/gmail/nossr50/core/BonusDropManager.java +++ b/src/main/java/com/gmail/nossr50/core/BonusDropManager.java @@ -46,6 +46,7 @@ public class BonusDropManager { for (String material : materials) { Material m = Material.matchMaterial(material); if (m == null) { + //TODO: reduce to info level? mcMMO.p.getLogger().severe("Error registering Bonus Drop -- Invalid Minecraft Name ID: " + material); continue; } diff --git a/src/main/java/com/gmail/nossr50/datatypes/experience/SkillXpGain.java b/src/main/java/com/gmail/nossr50/datatypes/experience/SkillXpGain.java index d17a1f268..695e71a69 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/experience/SkillXpGain.java +++ b/src/main/java/com/gmail/nossr50/datatypes/experience/SkillXpGain.java @@ -2,6 +2,7 @@ package com.gmail.nossr50.datatypes.experience; import com.gmail.nossr50.config.experience.ExperienceConfig; import com.gmail.nossr50.datatypes.skills.PrimarySkillType; +import com.gmail.nossr50.mcMMO; import java.util.concurrent.Delayed; import java.util.concurrent.TimeUnit; @@ -18,7 +19,7 @@ public class SkillXpGain implements Delayed { } private static long getDuration() { - return TimeUnit.MINUTES.toMillis(ExperienceConfig.getInstance().getDiminishedReturnsTimeInterval()); + return TimeUnit.MINUTES.toMillis(mcMMO.getConfigManager().getConfigLeveling().getDimishedReturnTimeInterval()); } public PrimarySkillType getSkill() { diff --git a/src/main/java/com/gmail/nossr50/listeners/SelfListener.java b/src/main/java/com/gmail/nossr50/listeners/SelfListener.java index 0ae35def6..9be4187a7 100644 --- a/src/main/java/com/gmail/nossr50/listeners/SelfListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/SelfListener.java @@ -99,9 +99,9 @@ public class SelfListener implements Listener { } } - int threshold = ExperienceConfig.getInstance().getDiminishedReturnsThreshold(primarySkillType); + int threshold = mcMMO.getConfigManager().getConfigLeveling().getSkillThreshold(primarySkillType); - if (threshold <= 0 || !ExperienceConfig.getInstance().getDiminishedReturnsEnabled()) { + if (threshold <= 0 || !mcMMO.getConfigManager().getConfigLeveling().getConfigLevelingDiminishedReturns().isDiminishedReturnsEnabled()) { // Diminished returns is turned off return; } @@ -117,7 +117,7 @@ public class SelfListener implements Listener { final float rawXp = event.getRawXpGained(); - float guaranteedMinimum = ExperienceConfig.getInstance().getDiminishedReturnsCap() * rawXp; + float guaranteedMinimum = mcMMO.getConfigManager().getConfigLeveling().getGuaranteedMinimums() * rawXp; float modifiedThreshold = (float) (threshold / primarySkillType.getXpModifier() * mcMMO.getDynamicSettingsManager().getExperienceMapManager().getGlobalXpMult()); float difference = (mcMMOPlayer.getProfile().getRegisteredXpGain(primarySkillType) - modifiedThreshold) / modifiedThreshold; diff --git a/src/main/java/com/gmail/nossr50/mcMMO.java b/src/main/java/com/gmail/nossr50/mcMMO.java index 0c5768066..41b9e7baa 100644 --- a/src/main/java/com/gmail/nossr50/mcMMO.java +++ b/src/main/java/com/gmail/nossr50/mcMMO.java @@ -51,7 +51,6 @@ import org.bukkit.plugin.java.JavaPlugin; import java.io.File; import java.io.IOException; -import java.lang.reflect.Method; public class mcMMO extends JavaPlugin { public static mcMMO p; @@ -564,7 +563,7 @@ public class mcMMO extends JavaPlugin { new PowerLevelUpdatingTask().runTaskTimer(this, 2 * Misc.TICK_CONVERSION_FACTOR, 2 * Misc.TICK_CONVERSION_FACTOR); // Clear the registered XP data so players can earn XP again - if (ExperienceConfig.getInstance().getDiminishedReturnsEnabled()) { + if (mcMMO.getConfigManager().getConfigExperience().get) { new ClearRegisteredXPGainTask().runTaskTimer(this, 60, 60); } diff --git a/src/main/java/com/gmail/nossr50/runnables/database/FormulaConversionTask.java b/src/main/java/com/gmail/nossr50/runnables/database/FormulaConversionTask.java index 6cfbe782f..8c11ddaf7 100644 --- a/src/main/java/com/gmail/nossr50/runnables/database/FormulaConversionTask.java +++ b/src/main/java/com/gmail/nossr50/runnables/database/FormulaConversionTask.java @@ -66,7 +66,7 @@ public class FormulaConversionTask extends BukkitRunnable { continue; } - int[] newExperienceValues = mcMMO.getFormulaManager().calculateNewLevel(primarySkillType, (int) Math.floor(totalOldXP / ExperienceConfig.getInstance().getExpModifier()), formulaType); + int[] newExperienceValues = mcMMO.getFormulaManager().calculateNewLevel(primarySkillType, (int) Math.floor(totalOldXP / 1.0), formulaType); int newLevel = newExperienceValues[0]; int newXPlevel = newExperienceValues[1]; diff --git a/src/main/java/com/gmail/nossr50/util/experience/ExperienceMapManager.java b/src/main/java/com/gmail/nossr50/util/experience/ExperienceMapManager.java index 1c424f48f..6f4ca226e 100644 --- a/src/main/java/com/gmail/nossr50/util/experience/ExperienceMapManager.java +++ b/src/main/java/com/gmail/nossr50/util/experience/ExperienceMapManager.java @@ -1,6 +1,6 @@ package com.gmail.nossr50.util.experience; -import com.gmail.nossr50.api.exceptions.InvalidSkillException; +import com.gmail.nossr50.api.exceptions.UndefinedSkillBehaviour; import com.gmail.nossr50.datatypes.skills.PrimarySkillType; import com.gmail.nossr50.mcMMO; import org.bukkit.Material; @@ -193,11 +193,11 @@ public class ExperienceMapManager { * @param primarySkillType target skill * @param material target material * @return XP value for breaking this block for said skill - * @throws InvalidSkillException for skills that don't give block break experience + * @throws UndefinedSkillBehaviour for skills that don't give block break experience * @deprecated its faster to use direct calls to get XP, for example getMiningXP(Material material) instead of using this method */ @Deprecated - public float getBlockBreakXpValue(PrimarySkillType primarySkillType, Material material) throws InvalidSkillException { + public float getBlockBreakXpValue(PrimarySkillType primarySkillType, Material material) throws UndefinedSkillBehaviour { switch (primarySkillType) { case MINING: return getMiningXp(material); @@ -208,7 +208,7 @@ public class ExperienceMapManager { case WOODCUTTING: return getWoodcuttingXp(material); default: - throw new InvalidSkillException(); + throw new UndefinedSkillBehaviour(primarySkillType); } }