{
  "_class" : "hudson.model.FreeStyleBuild",
  "actions" : [
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "hudson.triggers.SCMTrigger$SCMTriggerCause",
          "shortDescription" : "Started by an SCM change"
        }
      ]
    },
    {
      
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "refs/remotes/origin/master" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 314,
          "buildResult" : null,
          "marked" : {
            "SHA1" : "3a69634a3392781d22b3fcb63ef223b9d139c3df",
            "branch" : [
              {
                "SHA1" : "3a69634a3392781d22b3fcb63ef223b9d139c3df",
                "name" : "refs/remotes/origin/master"
              }
            ]
          },
          "revision" : {
            "SHA1" : "3a69634a3392781d22b3fcb63ef223b9d139c3df",
            "branch" : [
              {
                "SHA1" : "3a69634a3392781d22b3fcb63ef223b9d139c3df",
                "name" : "refs/remotes/origin/master"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "3a69634a3392781d22b3fcb63ef223b9d139c3df",
        "branch" : [
          {
            "SHA1" : "3a69634a3392781d22b3fcb63ef223b9d139c3df",
            "name" : "refs/remotes/origin/master"
          }
        ]
      },
      "remoteUrls" : [
        "https://github.com/mcMMO-Dev/mcMMO.git"
      ],
      "scmName" : ""
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    }
  ],
  "artifacts" : [
    
  ],
  "building" : false,
  "description" : null,
  "displayName" : "#314",
  "duration" : 49668,
  "estimatedDuration" : 46420,
  "executor" : null,
  "fullDisplayName" : "mcMMO #314",
  "id" : "314",
  "inProgress" : false,
  "keepLog" : false,
  "number" : 314,
  "queueId" : 146,
  "result" : "FAILURE",
  "timestamp" : 1780202913343,
  "url" : "https://popicraft.net/jenkins/job/mcMMO/314/",
  "builtOn" : "Builder",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/AttributeMapper.java",
          "src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java",
          "Changelog.txt",
          "src/test/java/com/gmail/nossr50/util/skills/CombatUtilsTest.java"
        ],
        "commitId" : "8e1b6deaa5a81fabe92b362e8ef58adfe8e354f8",
        "timestamp" : 1780200740000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Fix melee attack strength scale after Paper fixed attack cooldown bug in 26.1.2\u000a\u000aPaper 26.1.2 fixed a bug where the player attack cooldown ticker was not\u000aresetting at the correct point during melee hits. mcMMO relied on the old\u000a(incorrect) order, reading the cooldown during the damage event, which\u000aalways returned near-zero after Paper's fix. Attack strength scale is\u000anow back-derived from the raw event damage divided by the player's\u000aGENERIC_ATTACK_DAMAGE attribute value and clamped to [0.0, 1.0].\u000a\u000aAttributeMapper now survives test environments where Bukkit registries\u000aare absent (catch Throwable in the registry reflection path).\u000a\u000aFixes #5287.\u000a",
        "date" : "2026-05-30 21:12:20 -0700",
        "id" : "8e1b6deaa5a81fabe92b362e8ef58adfe8e354f8",
        "msg" : "Fix melee attack strength scale after Paper fixed attack cooldown bug in 26.1.2",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/AttributeMapper.java"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/util/skills/CombatUtilsTest.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/datatypes/player/PlayerProfile.java",
          "src/main/java/com/gmail/nossr50/runnables/player/ClearRegisteredXPGainTask.java",
          "src/main/java/com/gmail/nossr50/datatypes/experience/SkillXpGain.java",
          "src/main/java/com/gmail/nossr50/datatypes/experience/DiminishedReturnsCache.java",
          "src/main/java/com/gmail/nossr50/datatypes/experience/DiminishedReturnsState.java",
          "src/test/java/com/gmail/nossr50/datatypes/experience/DiminishedReturnsCacheTest.java"
        ],
        "commitId" : "3fb13694441fa58f02f464cebf02cc9c40b10d5d",
        "timestamp" : 1780200750000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Refactor diminished returns tracking into DiminishedReturnsCache/State\u000a\u000aExtracts per-player DR data out of PlayerProfile into two new classes:\u000a- DiminishedReturnsState: thread-safe XP gain queue and rolling totals\u000a- DiminishedReturnsCache: UUID-keyed server-side cache that keeps DR\u000a  state alive across disconnect/reconnect to prevent window bypass\u000a\u000aFixes a bug where evictExpired() would remove fresh states that had\u000anever registered any XP, orphaning the PlayerProfile reference and\u000aallowing reconnects to bypass the DR window.\u000a\u000aDR tracking is now skipped entirely (no state mutation) when the\u000adiminished returns config option is disabled.\u000a\u000aFixes #3475. Fixes #3814.\u000a",
        "date" : "2026-05-30 21:12:30 -0700",
        "id" : "3fb13694441fa58f02f464cebf02cc9c40b10d5d",
        "msg" : "Refactor diminished returns tracking into DiminishedReturnsCache/State",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/runnables/player/ClearRegisteredXPGainTask.java"
          },
          {
            "editType" : "add",
            "file" : "src/main/java/com/gmail/nossr50/datatypes/experience/DiminishedReturnsState.java"
          },
          {
            "editType" : "add",
            "file" : "src/main/java/com/gmail/nossr50/datatypes/experience/DiminishedReturnsCache.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/datatypes/experience/DiminishedReturnsCacheTest.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/datatypes/player/PlayerProfile.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/datatypes/experience/SkillXpGain.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/database/FlatFileDatabaseManagerTest.java",
          ".gitignore",
          "src/test/java/com/gmail/nossr50/skills/tridents/TridentsTest.java",
          "src/main/java/com/gmail/nossr50/config/treasure/FishingTreasureConfig.java"
        ],
        "commitId" : "3a69634a3392781d22b3fcb63ef223b9d139c3df",
        "timestamp" : 1780202550000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Fix pre-existing test failures and improve Docker test skip mechanism\u000a\u000a- FishingTreasureConfig.fixMooshroomEntityId was a public static method that\u000a  called mcMMO.p.getLogger() directly, causing NPE when tests invoked it without\u000a  a live plugin instance. Add a private static Logger field and use it in the\u000a  static method instead.\u000a- TridentsTest.impaleDamageBonusShouldMatchRankOneBaseDamage had a stale expected\u000a  value (1.0) left over from before commit 71868d9d fixed the Impale formula to\u000a  use rank * multiplier. The correct expectation for rank 1 is\u000a  base + 1 * multiplier = 1.5. Rename the test to match the new semantic.\u000a- Add @Tag(docker) to FlatFileDatabaseManagerTest so the existing\u000a  skip-docker-tests Maven profile (-DskipDockerTests=true) excludes it alongside\u000a  SQLDatabaseManagerTest.\u000a- Add generated config file names (experience.yml, config.yml, etc.) to\u000a  .gitignore to prevent accidental staging when tests run without a properly\u000a  mocked getDataFolder().\u000a",
        "date" : "2026-05-30 21:42:30 -0700",
        "id" : "3a69634a3392781d22b3fcb63ef223b9d139c3df",
        "msg" : "Fix pre-existing test failures and improve Docker test skip mechanism",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/config/treasure/FishingTreasureConfig.java"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/database/FlatFileDatabaseManagerTest.java"
          },
          {
            "editType" : "edit",
            "file" : ".gitignore"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/skills/tridents/TridentsTest.java"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
      "fullName" : "nossr50"
    },
    {
      "absoluteUrl" : "https://popicraft.net/jenkins/user/github",
      "fullName" : "github"
    }
  ]
}