diff --git a/Changelog.txt b/Changelog.txt index 93248c7e7..466bfb1f5 100644 --- a/Changelog.txt +++ b/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 diff --git a/pom.xml b/pom.xml index 75ccf688a..2cd9ae2cd 100755 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.gmail.nossr50.mcMMO mcMMO - 2.1.19 + 2.1.20 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 22c7de84d..6f4f86fb3 100644 --- a/src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java +++ b/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); } diff --git a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java index 567202e7b..55c1a8776 100644 --- a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java +++ b/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); diff --git a/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java b/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java index 5fe8dd366..61a670599 100644 --- a/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java +++ b/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(sameTarget) + fishCaughtCounter++; + else + fishCaughtCounter = 1; + + if(fishCaughtCounter + 1 == OVERFISH_LIMIT) + { + getPlayer().sendMessage(LocaleLoader.getString("Fishing.LowResources")); + } + //If the new bounding box does not intersect with the old one, then update our bounding box reference if(!sameTarget) lastFishingBoundingBox = newCastBoundingBox; - else - { - getPlayer().sendMessage(LocaleLoader.getString("Fishing.Scarcity")); - } - return sameTarget; + return sameTarget && fishCaughtCounter >= OVERFISH_LIMIT; } public static BoundingBox makeBoundingBox(Vector centerOfCastVector) { diff --git a/src/main/resources/experience.yml b/src/main/resources/experience.yml index dd8119e1e..0e2f41b6b 100644 --- a/src/main/resources/experience.yml +++ b/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 diff --git a/src/main/resources/locale/locale_en_US.properties b/src/main/resources/locale/locale_en_US.properties index 10fd7767b..133ef89b7 100644 --- a/src/main/resources/locale/locale_en_US.properties +++ b/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)