瀏覽代碼

2.1.212 - Fixed herbalism exploit and added damage limit for XP
calculations used in combat

nossr50 3 年之前
父節點
當前提交
d19cf1e260

+ 7 - 0
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
 Version 2.1.211
     Added /mmodebug info for players hitting other players
     Added /mmodebug info for players hitting other players
     Fixed Immortal Player bug
     Fixed Immortal Player bug

+ 1 - 1
pom.xml

@@ -2,7 +2,7 @@
     <modelVersion>4.0.0</modelVersion>
     <modelVersion>4.0.0</modelVersion>
     <groupId>com.gmail.nossr50.mcMMO</groupId>
     <groupId>com.gmail.nossr50.mcMMO</groupId>
     <artifactId>mcMMO</artifactId>
     <artifactId>mcMMO</artifactId>
-    <version>2.1.211</version>
+    <version>2.1.212</version>
     <name>mcMMO</name>
     <name>mcMMO</name>
     <url>https://github.com/mcMMO-Dev/mcMMO</url>
     <url>https://github.com/mcMMO-Dev/mcMMO</url>
     <scm>
     <scm>

+ 13 - 0
src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java

@@ -25,6 +25,12 @@ public class ExperienceConfig extends BukkitConfig {
         validate();
         validate();
     }
     }
 
 
+    @Override
+    public void initDefaults() {
+       config.addDefault("ExploitFix.Combat.XPCeiling.Enabled", true);
+       config.addDefault("ExploitFix.Combat.XPCeiling.Damage_Limit", 100);
+    }
+
     public static ExperienceConfig getInstance() {
     public static ExperienceConfig getInstance() {
         if (instance == null) {
         if (instance == null) {
             instance = new ExperienceConfig();
             instance = new ExperienceConfig();
@@ -423,6 +429,13 @@ public class ExperienceConfig extends BukkitConfig {
     public boolean getAddExtraDetails() {
     public boolean getAddExtraDetails() {
         return config.getBoolean("Experience_Bars.ThisMayCauseLag.AlwaysUpdateTitlesWhenXPIsGained.ExtraDetails", false);
         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() {
     public boolean isExperienceBarsEnabled() {
         return config.getBoolean("Experience_Bars.Enable", true);
         return config.getBoolean("Experience_Bars.Enable", true);

+ 6 - 0
src/main/java/com/gmail/nossr50/runnables/skills/AwardCombatXpTask.java

@@ -1,5 +1,7 @@
 package com.gmail.nossr50.runnables.skills;
 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.XPGainReason;
 import com.gmail.nossr50.datatypes.experience.XPGainSource;
 import com.gmail.nossr50.datatypes.experience.XPGainSource;
 import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 import com.gmail.nossr50.datatypes.player.McMMOPlayer;
@@ -39,6 +41,10 @@ public class AwardCombatXpTask extends BukkitRunnable {
             damage += health;
             damage += health;
         }
         }
 
 
+        if(ExperienceConfig.getInstance().useCombatHPCeiling()) {
+            damage = Math.min(damage, ExperienceConfig.getInstance().getCombatHPCeiling());
+        }
+
         mcMMOPlayer.beginXpGain(primarySkillType, (int) (damage * baseXp), xpGainReason, XPGainSource.SELF);
         mcMMOPlayer.beginXpGain(primarySkillType, (int) (damage * baseXp), xpGainReason, XPGainSource.SELF);
     }
     }
 }
 }

+ 4 - 1
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 primarySkillType The skill being used
      * @param multiplier final XP result will be multiplied by this
      * @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;
         double baseXP = 0;
         XPGainReason xpGainReason;
         XPGainReason xpGainReason;
 
 

+ 4 - 0
src/main/resources/experience.yml

@@ -25,6 +25,10 @@
 EarlyGameBoost:
 EarlyGameBoost:
     Enabled: true
     Enabled: true
 ExploitFix:
 ExploitFix:
+    Combat:
+        XPCeiling:
+            Enabled: true
+            Damage_Limit: 100
     COTWBreeding: true
     COTWBreeding: true
     UnsafeEnchantments: false
     UnsafeEnchantments: false
     # Prevent many exploits related to fishing
     # Prevent many exploits related to fishing