<freeStyleBuild _class='hudson.model.FreeStyleBuild'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>340</buildNumber><marked><SHA1>0edb5ad634a0c78298b290bcb4eda8d599994920</SHA1><branch><SHA1>0edb5ad634a0c78298b290bcb4eda8d599994920</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>0edb5ad634a0c78298b290bcb4eda8d599994920</SHA1><branch><SHA1>0edb5ad634a0c78298b290bcb4eda8d599994920</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>0edb5ad634a0c78298b290bcb4eda8d599994920</SHA1><branch><SHA1>0edb5ad634a0c78298b290bcb4eda8d599994920</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/mcMMO-Dev/mcMMO.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><artifact><displayPath>mcMMO.jar</displayPath><fileName>mcMMO.jar</fileName><relativePath>target/mcMMO.jar</relativePath></artifact><artifact><displayPath>original-mcMMO.jar</displayPath><fileName>original-mcMMO.jar</fileName><relativePath>target/original-mcMMO.jar</relativePath></artifact><building>false</building><displayName>#340</displayName><duration>155444</duration><estimatedDuration>135282</estimatedDuration><fullDisplayName>mcMMO #340</fullDisplayName><id>340</id><inProgress>false</inProgress><keepLog>false</keepLog><number>340</number><queueId>213</queueId><result>SUCCESS</result><timestamp>1783728251304</timestamp><url>https://popicraft.net/jenkins/job/mcMMO/340/</url><builtOn>Builder</builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java</affectedPath><affectedPath>src/main/java/com/gmail/nossr50/listeners/PlayerListener.java</affectedPath><affectedPath>src/test/java/com/gmail/nossr50/listeners/PlayerListenerFishingExploitTest.java</affectedPath><affectedPath>Changelog.txt</affectedPath><commitId>0edb5ad634a0c78298b290bcb4eda8d599994920</commitId><timestamp>1783727376000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></author><authorEmail>nossr50@gmail.com</authorEmail><comment>Keep denied spam-fishing catches from paying Fishing rewards

The exploit check split in #5313 gates rewards in the HIGHEST-priority
handler by re-reading the exploit verdicts, but only the overfishing
verdict could be re-read: isFishingTooOften() stamps the catch timestamp
on every call, so the reward gate could not call it again and spam
catches kept their skill XP, treasure rolls, and extra fish.

FishingManager now records the verdict of the most recent spam check,
exposed through wasFishingTooOften(), and the reward gate checks both
verdicts. Covered by a new listener test that dispatches PlayerFishEvents
through the real handler priority chain.
</comment><date>2026-07-10 16:49:36 -0700</date><id>0edb5ad634a0c78298b290bcb4eda8d599994920</id><msg>Keep denied spam-fishing catches from paying Fishing rewards</msg><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/listeners/PlayerListener.java</file></path><path><editType>add</editType><file>src/test/java/com/gmail/nossr50/listeners/PlayerListenerFishingExploitTest.java</file></path><path><editType>edit</editType><file>Changelog.txt</file></path><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></culprit></freeStyleBuild>