瀏覽代碼

Added an option to turn off fishing exploit detection as a band-aid fix until the config update is done

nossr50 6 年之前
父節點
當前提交
dece43429d

+ 6 - 0
Changelog.txt

@@ -7,6 +7,12 @@ Key:
   ! Change
   - Removal
 
+Version 2.1.20
+    Players can now fish in the same spot about 3 times before mcMMO will mark the area as being over-fished (over-fishing is to prevent abuse)
+    Added a toggle to turn off the fishing exploit detection to experience.yml "ExploitFix.Fishing"
+        Note: The new config update is coming soon and will use a different setting, putting this out as a band-aid fix for people that don't like the new fishing exploit prevention stuff
+    Added a message to warn players that their next fishing attempt will result in over-fishing (Locale: Fishing.LowResources)
+
 Version 2.1.19
     Greatly Improved Fishing AFK/Exploit Detection
     Fixed a bug where Fishing AFK detection did not work on a new exploit

+ 1 - 1
pom.xml

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

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

@@ -144,6 +144,7 @@ public class ExperienceConfig extends AutoUpdateConfigLoader {
     /* EXPLOIT TOGGLES */
     public boolean isEndermanEndermiteFarmingPrevented() { return config.getBoolean("ExploitFix.EndermanEndermiteFarms", true); }
 
+    public boolean isFishingExploitingPrevented() { return config.getBoolean("ExploitFix.Fishing", true); }
     /* Curve settings */
     public FormulaType getFormulaType() { return FormulaType.getFormulaType(config.getString("Experience_Formula.Curve")); }
     public boolean getCumulativeCurveEnabled() { return config.getBoolean("Experience_Formula.Cumulative_Curve", false); }

+ 25 - 18
src/main/java/com/gmail/nossr50/listeners/PlayerListener.java

@@ -324,23 +324,26 @@ public class PlayerListener implements Listener {
         FishingManager fishingManager = UserManager.getPlayer(player).getFishingManager();
 
         //Track the hook
-        if(event.getHook().getMetadata(mcMMO.FISH_HOOK_REF_METAKEY).size() == 0)
+        if(ExperienceConfig.getInstance().isFishingExploitingPrevented())
         {
-            fishingManager.setFishHookReference(event.getHook());
-        }
-
-        //Spam Fishing
-        if(event.getState() == PlayerFishEvent.State.CAUGHT_FISH && fishingManager.isFishingTooOften())
-        {
-            event.setExpToDrop(0);
-
-            if(caught instanceof Item)
+            if(event.getHook().getMetadata(mcMMO.FISH_HOOK_REF_METAKEY).size() == 0)
             {
-                Item caughtItem = (Item) caught;
-                caughtItem.remove();
+                fishingManager.setFishHookReference(event.getHook());
             }
 
-            return;
+            //Spam Fishing
+            if(event.getState() == PlayerFishEvent.State.CAUGHT_FISH && fishingManager.isFishingTooOften())
+            {
+                event.setExpToDrop(0);
+
+                if(caught instanceof Item)
+                {
+                    Item caughtItem = (Item) caught;
+                    caughtItem.remove();
+                }
+
+                return;
+            }
         }
 
         switch (event.getState()) {
@@ -351,12 +354,16 @@ public class PlayerListener implements Listener {
                 }
                 return;
             case CAUGHT_FISH:
-                if(fishingManager.isExploitingFishing(event.getHook().getLocation().toVector()))
+                if(ExperienceConfig.getInstance().isFishingExploitingPrevented())
                 {
-                    event.setExpToDrop(0);
-                    Item caughtItem = (Item) caught;
-                    caughtItem.remove();
-                    return;
+                    if(fishingManager.isExploitingFishing(event.getHook().getLocation().toVector()))
+                    {
+                        player.sendMessage(LocaleLoader.getString("Fishing.Scarcity"));
+                        event.setExpToDrop(0);
+                        Item caughtItem = (Item) caught;
+                        caughtItem.remove();
+                        return;
+                    }
                 }
 
                 fishingManager.handleFishing((Item) caught);

+ 13 - 5
src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java

@@ -45,6 +45,7 @@ import java.util.*;
 
 public class FishingManager extends SkillManager {
     public static final int FISHING_ROD_CAST_CD_MILLISECONDS = 200;
+    public static final int OVERFISH_LIMIT = 4;
     private final long FISHING_COOLDOWN_SECONDS = 1000L;
 
     private long fishingRodCastTimestamp = 0L;
@@ -55,6 +56,7 @@ public class FishingManager extends SkillManager {
     private BoundingBox lastFishingBoundingBox;
     private Item fishingCatch;
     private Location hookLocation;
+    private int fishCaughtCounter = 1;
 
     public FishingManager(McMMOPlayer mcMMOPlayer) {
         super(mcMMOPlayer, PrimarySkillType.FISHING);
@@ -131,15 +133,21 @@ public class FishingManager extends SkillManager {
 
         boolean sameTarget = lastFishingBoundingBox != null && lastFishingBoundingBox.overlaps(newCastBoundingBox);
 
-        //If the new bounding box does not intersect with the old one, then update our bounding box reference
-        if(!sameTarget)
-            lastFishingBoundingBox = newCastBoundingBox;
+        if(sameTarget)
+            fishCaughtCounter++;
         else
+            fishCaughtCounter = 1;
+
+        if(fishCaughtCounter + 1 == OVERFISH_LIMIT)
         {
-            getPlayer().sendMessage(LocaleLoader.getString("Fishing.Scarcity"));
+            getPlayer().sendMessage(LocaleLoader.getString("Fishing.LowResources"));
         }
 
-        return sameTarget;
+        //If the new bounding box does not intersect with the old one, then update our bounding box reference
+        if(!sameTarget)
+            lastFishingBoundingBox = newCastBoundingBox;
+
+        return sameTarget && fishCaughtCounter >= OVERFISH_LIMIT;
     }
 
     public static BoundingBox makeBoundingBox(Vector centerOfCastVector) {

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

@@ -23,6 +23,8 @@
 #SOLID
 #   The bar is one solid piece
 ExploitFix:
+    # Prevent many exploits related to fishing
+    Fishing: true
     EndermanEndermiteFarms: true
 Experience_Bars:
     # Turn this to false if you wanna disable XP bars

+ 1 - 0
src/main/resources/locale/locale_en_US.properties

@@ -220,6 +220,7 @@ Excavation.Skills.GigaDrillBreaker.Other.On=[[GREEN]]{0}[[DARK_GREEN]] has used
 Fishing.Scarcity=[[YELLOW]]&oThis area is suffering from overfishing, try fishing in a new area.
 Fishing.Scared=[[GRAY]]&oChaotic movements will scare fish!
 Fishing.Exhausting=[[RED]]&oImproper use of the fishing rod will cause fatigue and wear out the rod!
+Fishing.LowResources=[[GRAY]]You sense that there might not be many fish left in this area.
 Fishing.Ability.Info=Magic Hunter: [[GRAY]] **Improves With Treasure Hunter Rank**
 Fishing.Ability.Locked.0=LOCKED UNTIL {0}+ SKILL (SHAKE)
 Fishing.Ability.Locked.1=LOCKED UNTIL {0}+ SKILL (ICE FISHING)