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