<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>314</buildNumber><marked><SHA1>3a69634a3392781d22b3fcb63ef223b9d139c3df</SHA1><branch><SHA1>3a69634a3392781d22b3fcb63ef223b9d139c3df</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>3a69634a3392781d22b3fcb63ef223b9d139c3df</SHA1><branch><SHA1>3a69634a3392781d22b3fcb63ef223b9d139c3df</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>3a69634a3392781d22b3fcb63ef223b9d139c3df</SHA1><branch><SHA1>3a69634a3392781d22b3fcb63ef223b9d139c3df</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'><artifactsUrl>https://popicraft.net/jenkins/job/mcMMO/314/artifact</artifactsUrl><changesUrl>https://popicraft.net/jenkins/job/mcMMO/changes</changesUrl><displayUrl>https://popicraft.net/jenkins/job/mcMMO/314/</displayUrl><testsUrl>https://popicraft.net/jenkins/job/mcMMO/314/testReport</testsUrl></action><building>false</building><displayName>#314</displayName><duration>49668</duration><estimatedDuration>46420</estimatedDuration><fullDisplayName>mcMMO #314</fullDisplayName><id>314</id><inProgress>false</inProgress><keepLog>false</keepLog><number>314</number><queueId>146</queueId><result>FAILURE</result><timestamp>1780202913343</timestamp><url>https://popicraft.net/jenkins/job/mcMMO/314/</url><builtOn>Builder</builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/main/java/com/gmail/nossr50/util/AttributeMapper.java</affectedPath><affectedPath>src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java</affectedPath><affectedPath>Changelog.txt</affectedPath><affectedPath>src/test/java/com/gmail/nossr50/util/skills/CombatUtilsTest.java</affectedPath><commitId>8e1b6deaa5a81fabe92b362e8ef58adfe8e354f8</commitId><timestamp>1780200740000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></author><authorEmail>nossr50@gmail.com</authorEmail><comment>Fix melee attack strength scale after Paper fixed attack cooldown bug in 26.1.2

Paper 26.1.2 fixed a bug where the player attack cooldown ticker was not
resetting at the correct point during melee hits. mcMMO relied on the old
(incorrect) order, reading the cooldown during the damage event, which
always returned near-zero after Paper's fix. Attack strength scale is
now back-derived from the raw event damage divided by the player's
GENERIC_ATTACK_DAMAGE attribute value and clamped to [0.0, 1.0].

AttributeMapper now survives test environments where Bukkit registries
are absent (catch Throwable in the registry reflection path).

Fixes #5287.
</comment><date>2026-05-30 21:12:20 -0700</date><id>8e1b6deaa5a81fabe92b362e8ef58adfe8e354f8</id><msg>Fix melee attack strength scale after Paper fixed attack cooldown bug in 26.1.2</msg><path><editType>edit</editType><file>Changelog.txt</file></path><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/util/AttributeMapper.java</file></path><path><editType>edit</editType><file>src/test/java/com/gmail/nossr50/util/skills/CombatUtilsTest.java</file></path><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/main/java/com/gmail/nossr50/datatypes/player/PlayerProfile.java</affectedPath><affectedPath>src/main/java/com/gmail/nossr50/runnables/player/ClearRegisteredXPGainTask.java</affectedPath><affectedPath>src/main/java/com/gmail/nossr50/datatypes/experience/SkillXpGain.java</affectedPath><affectedPath>src/main/java/com/gmail/nossr50/datatypes/experience/DiminishedReturnsCache.java</affectedPath><affectedPath>src/main/java/com/gmail/nossr50/datatypes/experience/DiminishedReturnsState.java</affectedPath><affectedPath>src/test/java/com/gmail/nossr50/datatypes/experience/DiminishedReturnsCacheTest.java</affectedPath><commitId>3fb13694441fa58f02f464cebf02cc9c40b10d5d</commitId><timestamp>1780200750000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></author><authorEmail>nossr50@gmail.com</authorEmail><comment>Refactor diminished returns tracking into DiminishedReturnsCache/State

Extracts per-player DR data out of PlayerProfile into two new classes:
- DiminishedReturnsState: thread-safe XP gain queue and rolling totals
- DiminishedReturnsCache: UUID-keyed server-side cache that keeps DR
  state alive across disconnect/reconnect to prevent window bypass

Fixes a bug where evictExpired() would remove fresh states that had
never registered any XP, orphaning the PlayerProfile reference and
allowing reconnects to bypass the DR window.

DR tracking is now skipped entirely (no state mutation) when the
diminished returns config option is disabled.

Fixes #3475. Fixes #3814.
</comment><date>2026-05-30 21:12:30 -0700</date><id>3fb13694441fa58f02f464cebf02cc9c40b10d5d</id><msg>Refactor diminished returns tracking into DiminishedReturnsCache/State</msg><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/runnables/player/ClearRegisteredXPGainTask.java</file></path><path><editType>add</editType><file>src/main/java/com/gmail/nossr50/datatypes/experience/DiminishedReturnsState.java</file></path><path><editType>add</editType><file>src/main/java/com/gmail/nossr50/datatypes/experience/DiminishedReturnsCache.java</file></path><path><editType>add</editType><file>src/test/java/com/gmail/nossr50/datatypes/experience/DiminishedReturnsCacheTest.java</file></path><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/datatypes/player/PlayerProfile.java</file></path><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/datatypes/experience/SkillXpGain.java</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/test/java/com/gmail/nossr50/database/FlatFileDatabaseManagerTest.java</affectedPath><affectedPath>.gitignore</affectedPath><affectedPath>src/test/java/com/gmail/nossr50/skills/tridents/TridentsTest.java</affectedPath><affectedPath>src/main/java/com/gmail/nossr50/config/treasure/FishingTreasureConfig.java</affectedPath><commitId>3a69634a3392781d22b3fcb63ef223b9d139c3df</commitId><timestamp>1780202550000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></author><authorEmail>nossr50@gmail.com</authorEmail><comment>Fix pre-existing test failures and improve Docker test skip mechanism

- FishingTreasureConfig.fixMooshroomEntityId was a public static method that
  called mcMMO.p.getLogger() directly, causing NPE when tests invoked it without
  a live plugin instance. Add a private static Logger field and use it in the
  static method instead.
- TridentsTest.impaleDamageBonusShouldMatchRankOneBaseDamage had a stale expected
  value (1.0) left over from before commit 71868d9d fixed the Impale formula to
  use rank * multiplier. The correct expectation for rank 1 is
  base + 1 * multiplier = 1.5. Rename the test to match the new semantic.
- Add @Tag(docker) to FlatFileDatabaseManagerTest so the existing
  skip-docker-tests Maven profile (-DskipDockerTests=true) excludes it alongside
  SQLDatabaseManagerTest.
- Add generated config file names (experience.yml, config.yml, etc.) to
  .gitignore to prevent accidental staging when tests run without a properly
  mocked getDataFolder().
</comment><date>2026-05-30 21:42:30 -0700</date><id>3a69634a3392781d22b3fcb63ef223b9d139c3df</id><msg>Fix pre-existing test failures and improve Docker test skip mechanism</msg><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/config/treasure/FishingTreasureConfig.java</file></path><path><editType>edit</editType><file>src/test/java/com/gmail/nossr50/database/FlatFileDatabaseManagerTest.java</file></path><path><editType>edit</editType><file>.gitignore</file></path><path><editType>edit</editType><file>src/test/java/com/gmail/nossr50/skills/tridents/TridentsTest.java</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName><id>nossr50</id></culprit><culprit><absoluteUrl>https://popicraft.net/jenkins/user/github</absoluteUrl><fullName>github</fullName><id>github</id></culprit></freeStyleBuild>