diff --git a/Changelog.txt b/Changelog.txt index 49e4dede8..58589232f 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,3 +1,10 @@ +Version 2.1.212 + An herbalism exploit has been patched (thanks WhatsTheBadNews) + Added 'ExploitFix.Combat.XPCeiling.Enabled' to experience.yml + Added 'ExploitFix.Combat.XPCeiling.Damage_Limit' to experience.yml + Single instances of combat damage above 100 give are capped to give the same reward as 100 by default (100 is a lot, but you can change this in settings) + + NOTES: The damage ceiling won't affect server that don't have mobs running around with abnormally high health, if your server does you'll want to adjust this limit or disable it. Version 2.1.211 Added /mmodebug info for players hitting other players Fixed Immortal Player bug diff --git a/pom.xml b/pom.xml index 4a5d0331d..f0cc4b158 100755 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.gmail.nossr50.mcMMO mcMMO - 2.1.211 + 2.1.212 mcMMO https://github.com/mcMMO-Dev/mcMMO 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 d10145212..75686cfcd 100644 --- a/src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java +++ b/src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java @@ -25,6 +25,12 @@ public class ExperienceConfig extends BukkitConfig { validate(); } + @Override + public void initDefaults() { + config.addDefault("ExploitFix.Combat.XPCeiling.Enabled", true); + config.addDefault("ExploitFix.Combat.XPCeiling.Damage_Limit", 100); + } + public static ExperienceConfig getInstance() { if (instance == null) { instance = new ExperienceConfig(); @@ -423,6 +429,13 @@ public class ExperienceConfig extends BukkitConfig { public boolean getAddExtraDetails() { return config.getBoolean("Experience_Bars.ThisMayCauseLag.AlwaysUpdateTitlesWhenXPIsGained.ExtraDetails", false); } + public boolean useCombatHPCeiling() { + return config.getBoolean("ExploitFix.Combat.XPCeiling.Enabled", true); + } + + public int getCombatHPCeiling() { + return config.getInt("ExploitFix.Combat.XPCeiling.HP_Modifier_Limit", 100); + } public boolean isExperienceBarsEnabled() { return config.getBoolean("Experience_Bars.Enable", true); diff --git a/src/main/java/com/gmail/nossr50/runnables/skills/AwardCombatXpTask.java b/src/main/java/com/gmail/nossr50/runnables/skills/AwardCombatXpTask.java index 735ed8c17..e9aea8f2a 100644 --- a/src/main/java/com/gmail/nossr50/runnables/skills/AwardCombatXpTask.java +++ b/src/main/java/com/gmail/nossr50/runnables/skills/AwardCombatXpTask.java @@ -1,5 +1,7 @@ package com.gmail.nossr50.runnables.skills; +import com.gmail.nossr50.config.AdvancedConfig; +import com.gmail.nossr50.config.experience.ExperienceConfig; import com.gmail.nossr50.datatypes.experience.XPGainReason; import com.gmail.nossr50.datatypes.experience.XPGainSource; import com.gmail.nossr50.datatypes.player.McMMOPlayer; @@ -39,6 +41,10 @@ public class AwardCombatXpTask extends BukkitRunnable { damage += health; } + if(ExperienceConfig.getInstance().useCombatHPCeiling()) { + damage = Math.min(damage, ExperienceConfig.getInstance().getCombatHPCeiling()); + } + mcMMOPlayer.beginXpGain(primarySkillType, (int) (damage * baseXp), xpGainReason, XPGainSource.SELF); } } diff --git a/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java b/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java index 181cddde6..85c1e09b2 100644 --- a/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java +++ b/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java @@ -732,7 +732,10 @@ public final class CombatUtils { * @param primarySkillType The skill being used * @param multiplier final XP result will be multiplied by this */ - public static void processCombatXP(@NotNull McMMOPlayer mcMMOPlayer, @NotNull LivingEntity target, @NotNull PrimarySkillType primarySkillType, double multiplier) { + public static void processCombatXP(@NotNull McMMOPlayer mcMMOPlayer, + @NotNull LivingEntity target, + @NotNull PrimarySkillType primarySkillType, + double multiplier) { double baseXP = 0; XPGainReason xpGainReason; diff --git a/src/main/resources/experience.yml b/src/main/resources/experience.yml index 18b4d446e..0401e34be 100644 --- a/src/main/resources/experience.yml +++ b/src/main/resources/experience.yml @@ -25,6 +25,10 @@ EarlyGameBoost: Enabled: true ExploitFix: + Combat: + XPCeiling: + Enabled: true + Damage_Limit: 100 COTWBreeding: true UnsafeEnchantments: false # Prevent many exploits related to fishing