{
  "_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" : 331,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "9b76ac274d13f7165fb0dff410ed7144a4a4be11",
            "branch" : [
              {
                "SHA1" : "9b76ac274d13f7165fb0dff410ed7144a4a4be11",
                "name" : "refs/remotes/origin/master"
              }
            ]
          },
          "revision" : {
            "SHA1" : "9b76ac274d13f7165fb0dff410ed7144a4a4be11",
            "branch" : [
              {
                "SHA1" : "9b76ac274d13f7165fb0dff410ed7144a4a4be11",
                "name" : "refs/remotes/origin/master"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "9b76ac274d13f7165fb0dff410ed7144a4a4be11",
        "branch" : [
          {
            "SHA1" : "9b76ac274d13f7165fb0dff410ed7144a4a4be11",
            "name" : "refs/remotes/origin/master"
          }
        ]
      },
      "remoteUrls" : [
        "https://github.com/mcMMO-Dev/mcMMO.git"
      ],
      "scmName" : ""
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    }
  ],
  "artifacts" : [
    {
      "displayPath" : "mcMMO.jar",
      "fileName" : "mcMMO.jar",
      "relativePath" : "target/mcMMO.jar"
    },
    {
      "displayPath" : "original-mcMMO.jar",
      "fileName" : "original-mcMMO.jar",
      "relativePath" : "target/original-mcMMO.jar"
    }
  ],
  "building" : False,
  "description" : None,
  "displayName" : "#331",
  "duration" : 84358,
  "estimatedDuration" : 135282,
  "executor" : None,
  "fullDisplayName" : "mcMMO #331",
  "id" : "331",
  "inProgress" : False,
  "keepLog" : False,
  "number" : 331,
  "queueId" : 203,
  "result" : "SUCCESS",
  "timestamp" : 1783582450968,
  "url" : "https://popicraft.net/jenkins/job/mcMMO/331/",
  "builtOn" : "Builder",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt",
          "src/test/java/com/gmail/nossr50/util/blockmeta/BitSetChunkStoreTest.java",
          "src/main/java/com/gmail/nossr50/util/blockmeta/BitSetChunkStore.java"
        ],
        "commitId" : "3d05c0b9f521d48225809317dd338cd98c81ec4f",
        "timestamp" : 1783503186000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Fix placed-block data loss when world height limits shrink\u000a",
        "date" : "2026-07-08 02:33:06 -0700",
        "id" : "3d05c0b9f521d48225809317dd338cd98c81ec4f",
        "msg" : "Fix placed-block data loss when world height limits shrink",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/util/blockmeta/BitSetChunkStoreTest.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/blockmeta/BitSetChunkStore.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/blockmeta/HashChunkManager.java",
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/blockmeta/BitSetChunkStore.java"
        ],
        "commitId" : "9acf67b6e2aad3a2d99a0830c2abe76aa1106065",
        "timestamp" : 1783503327000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Warn instead of silently resetting unreadable placed-block chunk data\u000a",
        "date" : "2026-07-08 02:35:27 -0700",
        "id" : "9acf67b6e2aad3a2d99a0830c2abe76aa1106065",
        "msg" : "Warn instead of silently resetting unreadable placed-block chunk data",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/blockmeta/BitSetChunkStore.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/blockmeta/HashChunkManager.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/util/random/ProbabilityUtilTest.java",
          "src/main/java/com/gmail/nossr50/util/random/ProbabilityUtil.java",
          "Changelog.txt"
        ],
        "commitId" : "8ec5ef3285021e5f8d7edc1d584e6de6d91a42fd",
        "timestamp" : 1783539562000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Fix SubSkillEvent result modifier shrinking skill chances 100-fold\u000a",
        "date" : "2026-07-08 12:39:22 -0700",
        "id" : "8ec5ef3285021e5f8d7edc1d584e6de6d91a42fd",
        "msg" : "Fix SubSkillEvent result modifier shrinking skill chances 100-fold",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/random/ProbabilityUtil.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/util/random/ProbabilityUtilTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/util/random/ProbabilityUtilTest.java",
          "src/main/java/com/gmail/nossr50/util/random/ProbabilityUtil.java",
          "Changelog.txt"
        ],
        "commitId" : "d083d933ca1b0cfe2e102c07a6ca496d3a6c99c3",
        "timestamp" : 1783539638000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Apply attack strength to skill RNG rolls for players without Lucky\u000a",
        "date" : "2026-07-08 12:40:38 -0700",
        "id" : "d083d933ca1b0cfe2e102c07a6ca496d3a6c99c3",
        "msg" : "Apply attack strength to skill RNG rolls for players without Lucky",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/random/ProbabilityUtil.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/util/random/ProbabilityUtilTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/EventUtils.java",
          "Changelog.txt",
          "src/test/java/com/gmail/nossr50/util/EventUtilsTest.java"
        ],
        "commitId" : "4460e076a7d729c6fb5c9dcc075f111319d7c567",
        "timestamp" : 1783540036000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Fix cancelled level change events corrupting levels and crashing on unloaded players\u000a",
        "date" : "2026-07-08 12:47:16 -0700",
        "id" : "4460e076a7d729c6fb5c9dcc075f111319d7c567",
        "msg" : "Fix cancelled level change events corrupting levels and crashing on unloaded players",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/EventUtils.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/util/EventUtilsTest.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/PotionUtil.java",
          "Changelog.txt",
          "src/test/java/com/gmail/nossr50/util/PotionUtilTest.java"
        ],
        "commitId" : "41731c867d72b17ff931c3d81d264f59d1ece3dc",
        "timestamp" : 1783540245000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Fix legacy potion name conversion corrupting modern REGENERATION names\u000a",
        "date" : "2026-07-08 12:50:45 -0700",
        "id" : "41731c867d72b17ff931c3d81d264f59d1ece3dc",
        "msg" : "Fix legacy potion name conversion corrupting modern REGENERATION names",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/PotionUtil.java"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/util/PotionUtilTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/listeners/EntityListenerTest.java",
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/listeners/EntityListener.java"
        ],
        "commitId" : "4871b36b6a7d6e81c2d7825285b4010f8976ec49",
        "timestamp" : 1783540551000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Flag jockey riders with the same XP tracking as their spawned mount\u000a",
        "date" : "2026-07-08 12:55:51 -0700",
        "id" : "4871b36b6a7d6e81c2d7825285b4010f8976ec49",
        "msg" : "Flag jockey riders with the same XP tracking as their spawned mount",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/EntityListener.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/listeners/EntityListenerTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/listeners/EntityListener.java"
        ],
        "commitId" : "99a6211c01e16126b2585805967bedd5d25b366f",
        "timestamp" : 1783540821000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Fix splash potions skipping saturation when other custom effects come first\u000a",
        "date" : "2026-07-08 13:00:21 -0700",
        "id" : "99a6211c01e16126b2585805967bedd5d25b366f",
        "msg" : "Fix splash potions skipping saturation when other custom effects come first",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/EntityListener.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/listeners/SelfListener.java",
          "src/test/java/com/gmail/nossr50/listeners/SelfListenerTest.java",
          "Changelog.txt"
        ],
        "commitId" : "dae8f37cf5ab00e4a187aebd489a088b836cad25",
        "timestamp" : 1783541115000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Stop processing XP gains after WorldGuard denies them\u000a",
        "date" : "2026-07-08 13:05:15 -0700",
        "id" : "dae8f37cf5ab00e4a187aebd489a088b836cad25",
        "msg" : "Stop processing XP gains after WorldGuard denies them",
        "paths" : [
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/listeners/SelfListenerTest.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/SelfListener.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/listeners/PlayerListener.java",
          "Changelog.txt",
          "src/test/java/com/gmail/nossr50/listeners/PlayerListenerQuitCleanupTest.java"
        ],
        "commitId" : "07347d227824496c7499f1f9311319e0b137eb4c",
        "timestamp" : 1783541290000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Clean up fishing hand tracking when players quit\u000a",
        "date" : "2026-07-08 13:08:10 -0700",
        "id" : "07347d227824496c7499f1f9311319e0b137eb4c",
        "msg" : "Clean up fishing hand tracking when players quit",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/PlayerListener.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/listeners/PlayerListenerQuitCleanupTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/listeners/EntityListenerTest.java",
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/listeners/EntityListener.java"
        ],
        "commitId" : "df03caceaa36cfce6697af77d04449d33b700611",
        "timestamp" : 1783541384000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Ignore non-player owners in EntityTameEvent handling\u000a",
        "date" : "2026-07-08 13:09:44 -0700",
        "id" : "df03caceaa36cfce6697af77d04449d33b700611",
        "msg" : "Ignore non-player owners in EntityTameEvent handling",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/EntityListener.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/listeners/EntityListenerTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/listeners/EntityListenerTest.java",
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/listeners/EntityListener.java"
        ],
        "commitId" : "84ac9d1f8fcc8793aaf22da580b9047835cd0a9f",
        "timestamp" : 1783541692000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Untrack Call of the Wild summons when they die\u000a",
        "date" : "2026-07-08 13:14:52 -0700",
        "id" : "84ac9d1f8fcc8793aaf22da580b9047835cd0a9f",
        "msg" : "Untrack Call of the Wild summons when they die",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/listeners/EntityListenerTest.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/EntityListener.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/TransientEntityTracker.java",
          "Changelog.txt"
        ],
        "commitId" : "b862e449e08d4d154df15d0cf341312642b32f13",
        "timestamp" : 1783541706000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Tidy TransientEntityTracker internals\u000a",
        "date" : "2026-07-08 13:15:06 -0700",
        "id" : "b862e449e08d4d154df15d0cf341312642b32f13",
        "msg" : "Tidy TransientEntityTracker internals",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/TransientEntityTracker.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/util/ChimaeraWingTest.java",
          "src/main/java/com/gmail/nossr50/util/ChimaeraWing.java",
          "Changelog.txt"
        ],
        "commitId" : "08cb7872ca9ce28f552df9e337cc0607a5cbd845",
        "timestamp" : 1783541847000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Fix Chimaera Wing underground penalty crashing for low-health players\u000a",
        "date" : "2026-07-08 13:17:27 -0700",
        "id" : "08cb7872ca9ce28f552df9e337cc0607a5cbd845",
        "msg" : "Fix Chimaera Wing underground penalty crashing for low-health players",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/ChimaeraWing.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/util/ChimaeraWingTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/sounds/SoundRegistryUtils.java",
          "src/main/java/com/gmail/nossr50/util/sounds/SoundManager.java",
          "src/test/java/com/gmail/nossr50/util/sounds/SoundManagerTest.java",
          "src/main/java/com/gmail/nossr50/util/sounds/SoundType.java",
          "Changelog.txt"
        ],
        "commitId" : "63d486d81aae2bfcfe21cb1b063fa6cd56101098",
        "timestamp" : 1783542399000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Fix sound registry resolution and Cripple sound fallback\u000a",
        "date" : "2026-07-08 13:26:39 -0700",
        "id" : "63d486d81aae2bfcfe21cb1b063fa6cd56101098",
        "msg" : "Fix sound registry resolution and Cripple sound fallback",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/sounds/SoundManager.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/util/sounds/SoundManagerTest.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/sounds/SoundRegistryUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/sounds/SoundType.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/util/platform/MinecraftGameVersionTest.java",
          "src/main/java/com/gmail/nossr50/util/platform/MajorMinorPatchVersion.java",
          "Changelog.txt"
        ],
        "commitId" : "be18bbe830dcc01fee58ee15ae53573608ed7fff",
        "timestamp" : 1783542511000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Fix patch version strings printing object references\u000a",
        "date" : "2026-07-08 13:28:31 -0700",
        "id" : "be18bbe830dcc01fee58ee15ae53573608ed7fff",
        "msg" : "Fix patch version strings printing object references",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/util/platform/MinecraftGameVersionTest.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/platform/MajorMinorPatchVersion.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/adapter/BiomeAdapter.java",
          "src/test/java/com/gmail/nossr50/util/adapter/BiomeAdapterTest.java",
          "Changelog.txt"
        ],
        "commitId" : "af18395d74def6663836d736366a2847d161e09c",
        "timestamp" : 1783562457000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Harden cold biome resolution against missing biomes\u000a",
        "date" : "2026-07-08 19:00:57 -0700",
        "id" : "af18395d74def6663836d736366a2847d161e09c",
        "msg" : "Harden cold biome resolution against missing biomes",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/util/adapter/BiomeAdapterTest.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/adapter/BiomeAdapter.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/commands/CommandUtils.java",
          "Changelog.txt",
          "src/test/java/com/gmail/nossr50/util/commands/CommandUtilsTest.java"
        ],
        "commitId" : "07de5c4ef8b20bfa41c4742250a1af5fbff7a00b",
        "timestamp" : 1783562613000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Fix console tab-completion for player names in mcMMO commands\u000a",
        "date" : "2026-07-08 19:03:33 -0700",
        "id" : "07de5c4ef8b20bfa41c4742250a1af5fbff7a00b",
        "msg" : "Fix console tab-completion for player names in mcMMO commands",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/util/commands/CommandUtilsTest.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/commands/CommandUtils.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt",
          "src/test/java/com/gmail/nossr50/util/MobHealthbarUtilsTest.java",
          "src/main/java/com/gmail/nossr50/util/MobHealthbarUtils.java"
        ],
        "commitId" : "ce3b46d88f21e1e3762796cbf12c23605cfd7b77",
        "timestamp" : 1783562790000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Skip healthbar name changes when the display type is disabled\u000a",
        "date" : "2026-07-08 19:06:30 -0700",
        "id" : "ce3b46d88f21e1e3762796cbf12c23605cfd7b77",
        "msg" : "Skip healthbar name changes when the display type is disabled",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/util/MobHealthbarUtilsTest.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/MobHealthbarUtils.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/player/UserManager.java"
        ],
        "commitId" : "d5dac2d8de742910b51e13178ced453626b536cc",
        "timestamp" : 1783562893000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Make shutdown save tracking thread-safe for Folia\u000a",
        "date" : "2026-07-08 19:08:13 -0700",
        "id" : "d5dac2d8de742910b51e13178ced453626b536cc",
        "msg" : "Make shutdown save tracking thread-safe for Folia",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/player/UserManager.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/util/text/TextUtilsTest.java",
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/text/TextUtils.java"
        ],
        "commitId" : "d66ad98698abba20d0390492589d29f43d164701",
        "timestamp" : 1783563185000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Fix component grouping to honor the requested group size\u000a",
        "date" : "2026-07-08 19:13:05 -0700",
        "id" : "d66ad98698abba20d0390492589d29f43d164701",
        "msg" : "Fix component grouping to honor the requested group size",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/text/TextUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/util/text/TextUtilsTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/util/LogFilterTest.java",
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/LogFilter.java"
        ],
        "commitId" : "2e4141e29f7650aa2b7c30b387b5f080d1084109",
        "timestamp" : 1783563284000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Fix log filter hiding normal messages and crashing on null messages\u000a",
        "date" : "2026-07-08 19:14:44 -0700",
        "id" : "2e4141e29f7650aa2b7c30b387b5f080d1084109",
        "msg" : "Fix log filter hiding normal messages and crashing on null messages",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/LogFilter.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/util/LogFilterTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/random/ProbabilityUtil.java",
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/text/StringUtils.java"
        ],
        "commitId" : "e68ef41d22e7733366cf3dce8063e97c3087b37f",
        "timestamp" : 1783563386000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Use thread-local DecimalFormats for skill display formatting\u000a",
        "date" : "2026-07-08 19:16:26 -0700",
        "id" : "e68ef41d22e7733366cf3dce8063e97c3087b37f",
        "msg" : "Use thread-local DecimalFormats for skill display formatting",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/random/ProbabilityUtil.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/text/StringUtils.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/upgrade/UpgradeManager.java"
        ],
        "commitId" : "65e6f40069c6fe0b220650e6c0ea7ca8158a07e1",
        "timestamp" : 1783564342000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Log upgrade tracking save failures through the plugin logger\u000a",
        "date" : "2026-07-08 19:32:22 -0700",
        "id" : "65e6f40069c6fe0b220650e6c0ea7ca8158a07e1",
        "msg" : "Log upgrade tracking save failures through the plugin logger",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/upgrade/UpgradeManager.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/sounds/SoundRegistryUtils.java"
        ],
        "commitId" : "8f1aae11ebc1a6a4bbc7041c385f83795b887229",
        "timestamp" : 1783564532000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Fall back to legacy sound lookup when the registry class fails to initialize\u000a",
        "date" : "2026-07-08 19:35:32 -0700",
        "id" : "8f1aae11ebc1a6a4bbc7041c385f83795b887229",
        "msg" : "Fall back to legacy sound lookup when the registry class fails to initialize",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/sounds/SoundRegistryUtils.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/skills/RankUtils.java",
          "src/test/java/com/gmail/nossr50/util/skills/RankUtilsTest.java",
          "Changelog.txt"
        ],
        "commitId" : "c7118fa6f9639d4a203c682f06a0b915d6b634f2",
        "timestamp" : 1783565022000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Cache subskill unlock levels instead of re-reading rank config per check\u000a",
        "date" : "2026-07-08 19:43:42 -0700",
        "id" : "c7118fa6f9639d4a203c682f06a0b915d6b634f2",
        "msg" : "Cache subskill unlock levels instead of re-reading rank config per check",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/skills/RankUtils.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/util/skills/RankUtilsTest.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/datatypes/skills/SubSkillType.java",
          "src/main/java/com/gmail/nossr50/util/Permissions.java",
          "Changelog.txt",
          "src/test/java/com/gmail/nossr50/util/PermissionsNodeFormatTest.java"
        ],
        "commitId" : "93e56505f3cf1a6c79564a89e3b8c7885ea883ec",
        "timestamp" : 1783565307000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Precompute permission node names for frequent checks\u000a",
        "date" : "2026-07-08 19:48:27 -0700",
        "id" : "93e56505f3cf1a6c79564a89e3b8c7885ea883ec",
        "msg" : "Precompute permission node names for frequent checks",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/datatypes/skills/SubSkillType.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/util/PermissionsNodeFormatTest.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/Permissions.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/MobMetadataUtils.java"
        ],
        "commitId" : "6bd8a519d5cf63b91b6e2383754552e96370cfc4",
        "timestamp" : 1783565438000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Read persistent mob flag config once instead of per check\u000a",
        "date" : "2026-07-08 19:50:38 -0700",
        "id" : "6bd8a519d5cf63b91b6e2383754552e96370cfc4",
        "msg" : "Read persistent mob flag config once instead of per check",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/MobMetadataUtils.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java"
        ],
        "commitId" : "2ee06f48e61e614d8aaf03ca849f6c47040deca9",
        "timestamp" : 1783565656000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Snapshot hot experience.yml settings instead of re-parsing per event\u000a",
        "date" : "2026-07-08 19:54:16 -0700",
        "id" : "2ee06f48e61e614d8aaf03ca849f6c47040deca9",
        "msg" : "Snapshot hot experience.yml settings instead of re-parsing per event",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/config/GeneralConfig.java",
          "Changelog.txt"
        ],
        "commitId" : "81359ffee9fe7e3b59bd2374c3c7ce5c2d4a989f",
        "timestamp" : 1783565812000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Snapshot hot config.yml settings instead of re-parsing per event\u000a",
        "date" : "2026-07-08 19:56:52 -0700",
        "id" : "81359ffee9fe7e3b59bd2374c3c7ce5c2d4a989f",
        "msg" : "Snapshot hot config.yml settings instead of re-parsing per event",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/config/GeneralConfig.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/listeners/EntityListener.java"
        ],
        "commitId" : "90a59838dc4ebbaa8306910d7259d26b780cff8c",
        "timestamp" : 1783566040000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Reorder combat damage gates cheapest-first and drop duplicate checks\u000a",
        "date" : "2026-07-08 20:00:40 -0700",
        "id" : "90a59838dc4ebbaa8306910d7259d26b780cff8c",
        "msg" : "Reorder combat damage gates cheapest-first and drop duplicate checks",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/EntityListener.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/listeners/BlockListener.java",
          "Changelog.txt"
        ],
        "commitId" : "02e6711a1f7c98e84a18069efba6237d350840ae",
        "timestamp" : 1783566210000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Exit block drop handling early when no mcMMO metadata is attached\u000a",
        "date" : "2026-07-08 20:03:30 -0700",
        "id" : "02e6711a1f7c98e84a18069efba6237d350840ae",
        "msg" : "Exit block drop handling early when no mcMMO metadata is attached",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/BlockListener.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/listeners/BlockListener.java",
          "Changelog.txt"
        ],
        "commitId" : "e4308015d5d6d253f885afa074e0b719aabad15f",
        "timestamp" : 1783566290000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Skip fake block damage events before world and region checks\u000a",
        "date" : "2026-07-08 20:04:50 -0700",
        "id" : "e4308015d5d6d253f885afa074e0b719aabad15f",
        "msg" : "Skip fake block damage events before world and region checks",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/BlockListener.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/listeners/BlockListener.java",
          "Changelog.txt"
        ],
        "commitId" : "5ebd538ea81045bc64c93730b8bd474d304e4744",
        "timestamp" : 1783566415000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Trim block place and break handlers of redundant snapshots and loops\u000a",
        "date" : "2026-07-08 20:06:55 -0700",
        "id" : "5ebd538ea81045bc64c93730b8bd474d304e4744",
        "msg" : "Trim block place and break handlers of redundant snapshots and loops",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/BlockListener.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/listeners/BlockListener.java",
          "src/main/java/com/gmail/nossr50/listeners/InventoryListener.java",
          "src/main/java/com/gmail/nossr50/listeners/ChunkListener.java",
          "Changelog.txt"
        ],
        "commitId" : "5c6559d5a0b9422d6a81c89c9eca8883f116ecda",
        "timestamp" : 1783566527000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Fetch chunk entities once on unload and use single brewing stand map lookups\u000a",
        "date" : "2026-07-08 20:08:47 -0700",
        "id" : "5c6559d5a0b9422d6a81c89c9eca8883f116ecda",
        "msg" : "Fetch chunk entities once on unload and use single brewing stand map lookups",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/BlockListener.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/ChunkListener.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/InventoryListener.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/player/NotificationManager.java",
          "src/main/java/com/gmail/nossr50/listeners/PlayerListener.java",
          "src/main/java/com/gmail/nossr50/listeners/SelfListener.java",
          "src/main/java/com/gmail/nossr50/listeners/InventoryListener.java",
          "src/main/java/com/gmail/nossr50/listeners/EntityListener.java",
          "src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java",
          "Changelog.txt"
        ],
        "commitId" : "4a643dcc81c5612e0fdeb4a2d2674f945d8634c9",
        "timestamp" : 1783567326000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Resolve McMMOPlayer once per event across hot listener paths\u000a\u000aEvent handlers that null-checked UserManager.getPlayer and then called\u000ait again (sometimes several times) now resolve the McMMOPlayer a single\u000atime and reuse it. Also hoists the NPC-interaction and attacker lookups\u000aout of the applyAbilityAoE loop and gives NotificationManager a\u000asingle-lookup notification eligibility check.\u000a",
        "date" : "2026-07-08 20:22:06 -0700",
        "id" : "4a643dcc81c5612e0fdeb4a2d2674f945d8634c9",
        "msg" : "Resolve McMMOPlayer once per event across hot listener paths",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/EntityListener.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/PlayerListener.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/InventoryListener.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/player/NotificationManager.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/SelfListener.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/listeners/InventoryListener.java",
          "src/main/java/com/gmail/nossr50/util/ItemUtils.java",
          "src/test/java/com/gmail/nossr50/util/ItemUtilsTest.java",
          "Changelog.txt"
        ],
        "commitId" : "b495114f99cb212ccb07f1ba18d86c54f72c56be",
        "timestamp" : 1783567923000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Trim repeated work from hot ItemUtils checks\u000a\u000aEnchantment presence checks now use ItemStack#containsEnchantment\u000ainstead of cloning ItemMeta twice per check, enchantment-by-name\u000alookups are remembered in a map instead of scanning the registry every\u000acall, isSmelted gains a Material overload so furnace extraction stops\u000aallocating a throwaway ItemStack, Chimaera Wing checks fetch ItemMeta\u000aonce, and getRandomEnchantment picks by index instead of shuffling the\u000atreasure book's shared enchantment list on every enchanted-book catch.\u000a",
        "date" : "2026-07-08 20:32:03 -0700",
        "id" : "b495114f99cb212ccb07f1ba18d86c54f72c56be",
        "msg" : "Trim repeated work from hot ItemUtils checks",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/InventoryListener.java"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/util/ItemUtilsTest.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/ItemUtils.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/BlockUtils.java",
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/listeners/EntityListener.java"
        ],
        "commitId" : "7e9dd2a844f4044d42ff37cda2fc427362fef40c",
        "timestamp" : 1783568107000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Stop rebuilding block lookup data on hot BlockUtils paths\u000a\u000aisPartOfTree reads the block type once instead of snapshotting the\u000aBlockState (it runs on every block place and axe-readying raycast),\u000agetTransparentBlocks returns a set built once at class load instead of\u000ascanning every Material per call, and onEntityChangeBlock reuses the\u000asnapshot it already took instead of capturing a second one.\u000a",
        "date" : "2026-07-08 20:35:07 -0700",
        "id" : "7e9dd2a844f4044d42ff37cda2fc427362fef40c",
        "msg" : "Stop rebuilding block lookup data on hot BlockUtils paths",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/EntityListener.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/BlockUtils.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/blockmeta/HashChunkManager.java",
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/blockmeta/BitSetChunkStore.java"
        ],
        "commitId" : "348ef94d34712459c8c31105db8128faff2999f4",
        "timestamp" : 1783568715000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Lighten placed-block tracking lookups and chunk store memory\u000a\u000aHashChunkManager coordinate keys become a record so map lookups on\u000aevery block check stop boxing through Objects.hash, and\u000aBitSetChunkStore lets its BitSet grow on demand instead of\u000apre-allocating the full world height for every chunk, most of which\u000atrack few or no blocks.\u000a",
        "date" : "2026-07-08 20:45:15 -0700",
        "id" : "348ef94d34712459c8c31105db8128faff2999f4",
        "msg" : "Lighten placed-block tracking lookups and chunk store memory",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/blockmeta/HashChunkManager.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/blockmeta/BitSetChunkStore.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/experience/FormulaManager.java",
          "Changelog.txt"
        ],
        "commitId" : "a1f43be3c1a2958063681ddaa7e994eceaa870d7",
        "timestamp" : 1783568732000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Reduce map traffic in FormulaManager level lookups\u000a\u000aXP-to-next-level caches now use computeIfAbsent instead of a\u000acontainsKey/put/get triple per lookup, and calculateXPNeeded falls back\u000ato the linear formula without recursing when handed an invalid formula\u000atype.\u000a",
        "date" : "2026-07-08 20:45:32 -0700",
        "id" : "a1f43be3c1a2958063681ddaa7e994eceaa870d7",
        "msg" : "Reduce map traffic in FormulaManager level lookups",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/experience/FormulaManager.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/ContainerMetadataUtils.java",
          "src/main/java/com/gmail/nossr50/util/ItemMetadataUtils.java"
        ],
        "commitId" : "594b8ab40f22bb2367d9afbeae6ac2aa943fb3a7",
        "timestamp" : 1783568749000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Read container and item metadata once per operation\u000a\u000aContainer ownership processing resolves the current owner a single\u000atime instead of re-reading persistent data (and re-resolving the\u000aOfflinePlayer) for the ownership check, the change, and the debug\u000amessage. ItemMetadataUtils methods fetch ItemMeta and the persistent\u000adata value once each, and removing a super ability boost reuses one\u000ameta copy and one Efficiency enchantment lookup.\u000a",
        "date" : "2026-07-08 20:45:49 -0700",
        "id" : "594b8ab40f22bb2367d9afbeae6ac2aa943fb3a7",
        "msg" : "Read container and item metadata once per operation",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/ContainerMetadataUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/ItemMetadataUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/listeners/InventoryListener.java",
          "src/main/java/com/gmail/nossr50/locale/LocaleLoader.java",
          "src/main/java/com/gmail/nossr50/listeners/PlayerListener.java",
          "Changelog.txt"
        ],
        "commitId" : "1a1bffd0c9720c9923c0d09b01d31ffbf30279ae",
        "timestamp" : 1783568773000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Cut per-event work in click, fishing, and command handlers\u000a\u000aInventory clicks return before resolving player data unless the\u000ainventory is a furnace or brewing stand, the fishing catch handler\u000areads the caught item type and the boosted XP value once, and\u000alocalized skill command aliases are looked up from a map built once\u000aper locale generation instead of localizing every skill name on every\u000acommand. LocaleLoader gains a generation counter so the alias map\u000arebuilds after /mcmmoreloadlocale.\u000a",
        "date" : "2026-07-08 20:46:13 -0700",
        "id" : "1a1bffd0c9720c9923c0d09b01d31ffbf30279ae",
        "msg" : "Cut per-event work in click, fishing, and command handlers",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/locale/LocaleLoader.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/InventoryListener.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/PlayerListener.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/datatypes/skills/SubSkillType.java",
          "src/main/java/com/gmail/nossr50/mcMMO.java",
          "src/main/java/com/gmail/nossr50/config/AdvancedConfig.java",
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java"
        ],
        "commitId" : "6d440410796466dd86ade6516f0c96727ab7b769",
        "timestamp" : 1783569139000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Snapshot per-roll and per-event config reads\u000a\u000aSkill chance rolls hit AdvancedConfig getMaximumProbability and\u000agetMaxBonusLevel on every RNG check, rebuilding the advanced.yml key\u000astring each time; the addresses are now memoized on SubSkillType like\u000athe permission nodes, and the values live in EnumMaps reset by\u000aloadKeys(). useAttackCooldown, the Archery force multiplier, and the\u000aper-event ExploitFix toggles in experience.yml get the same one-read\u000atreatment. The retro mode flag is now stored before AdvancedConfig\u000aloads since its level scaling reads that flag while validating.\u000a",
        "date" : "2026-07-08 20:52:19 -0700",
        "id" : "6d440410796466dd86ade6516f0c96727ab7b769",
        "msg" : "Snapshot per-roll and per-event config reads",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/mcMMO.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/datatypes/skills/SubSkillType.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/config/AdvancedConfig.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/nms/NMSVersion.java",
          "src/main/java/com/gmail/nossr50/util/ModManager.java",
          "src/main/java/com/gmail/nossr50/util/nms/NMSConstants.java",
          "src/main/java/com/gmail/nossr50/util/scoreboards/ObjectiveType.java",
          "src/main/java/com/gmail/nossr50/util/skills/SkillActivationType.java",
          "src/main/java/com/gmail/nossr50/util/FixSpellingNetheriteUtil.java",
          "Changelog.txt"
        ],
        "commitId" : "97ba6dbe814b021749895ce0a11e5816b23c202d",
        "timestamp" : 1783569356000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Drop ModManager and deprecate unused public classes\u000a\u000aModManager has been a fully commented-out file with zero references\u000afor years, so it is deleted outright. NMSConstants, NMSVersion,\u000aFixSpellingNetheriteUtil, SkillActivationType, and ObjectiveType have\u000ano internal references but are public, so they follow the\u000adeprecate-first policy and are annotated forRemoval instead of\u000adeleted.\u000a",
        "date" : "2026-07-08 20:55:56 -0700",
        "id" : "97ba6dbe814b021749895ce0a11e5816b23c202d",
        "msg" : "Drop ModManager and deprecate unused public classes",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/skills/SkillActivationType.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/nms/NMSConstants.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/scoreboards/ObjectiveType.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/FixSpellingNetheriteUtil.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/nms/NMSVersion.java"
          },
          {
            "editType" : "delete",
            "file" : "src/main/java/com/gmail/nossr50/util/ModManager.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/PotionUtil.java",
          "src/main/java/com/gmail/nossr50/util/BlockUtils.java",
          "src/main/java/com/gmail/nossr50/util/ItemUtils.java",
          "src/main/java/com/gmail/nossr50/util/skills/ParticleEffectUtils.java",
          "src/main/java/com/gmail/nossr50/listeners/BlockListener.java",
          "src/main/java/com/gmail/nossr50/util/Misc.java",
          "src/main/java/com/gmail/nossr50/listeners/EntityListener.java",
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/listeners/PlayerListener.java",
          "src/main/java/com/gmail/nossr50/util/skills/PerksUtils.java",
          "src/main/java/com/gmail/nossr50/listeners/InventoryListener.java",
          "src/main/java/com/gmail/nossr50/util/skills/SkillTools.java",
          "src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java",
          "src/main/java/com/gmail/nossr50/util/player/PlayerLevelUtils.java"
        ],
        "commitId" : "804bc9a257ed577f27f10bcb8c7dac07d71e1a06",
        "timestamp" : 1783569985000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Clear out dead code and deprecate orphaned public members\u000a\u000aDeletes zero-API-surface dead code: the commented-out Flux Mining,\u000acustom-damage-metadata, item-share, firework shower, and 2014-era Misc\u000ablocks, PlayerLevelUtils commented constructor, the unused private\u000aSpawnOrbTask and hasHeadRoom helpers, an unused local in\u000agetParticleLocation, and the onCraftItem handler whose body had no\u000aremaining effect.\u000a\u000aPublic members with no remaining callers follow the deprecate-first\u000apolicy instead: playAbilityDisabledEffect (now a no-op),\u000aSkillUtils.calculateLengthDisplayValues, both handleLuckyPerks\u000aoverloads, getModName, getKeyGetKey, convertPotionConfigName,\u000aFORMATTED_SUBSKILL_NAMES, the size-limited spawnItemsFromCollection,\u000aand the unused ItemUtils enchantment-check overloads.\u000a",
        "date" : "2026-07-08 21:06:25 -0700",
        "id" : "804bc9a257ed577f27f10bcb8c7dac07d71e1a06",
        "msg" : "Clear out dead code and deprecate orphaned public members",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/InventoryListener.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/EntityListener.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/player/PlayerLevelUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/skills/SkillTools.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/Misc.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/skills/PerksUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/PlayerListener.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/BlockUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/ItemUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/BlockListener.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/PotionUtil.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/skills/ParticleEffectUtils.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/listeners/PlayerListener.java",
          "src/main/java/com/gmail/nossr50/listeners/BlockListener.java",
          "src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java",
          "src/main/java/com/gmail/nossr50/util/EventUtils.java",
          "src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java",
          "src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java",
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java",
          "src/main/java/com/gmail/nossr50/runnables/skills/AbilityDisableTask.java"
        ],
        "commitId" : "8521f9369418ae31a831c918b1bfd4bb6b2206cf",
        "timestamp" : 1783570334000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Finish the deprecation sweep for existing forRemoval batches\u000a\u000aThe simulateBlockBreak overloads whose javadoc claimed deprecation\u000awithout the annotation now carry a real @Deprecated(forRemoval), and\u000aall internal callers pass FakeBlockBreakEventType.FAKE explicitly.\u000aAbilityDisableTask calls the McMMOPlayer overload of\u000acallAbilityDeactivateEvent instead of the deprecated Player one it\u000aalready had the McMMOPlayer for, and CombatUtils loses a duplicate\u000aMobHealthbarUtils import.\u000a",
        "date" : "2026-07-08 21:12:14 -0700",
        "id" : "8521f9369418ae31a831c918b1bfd4bb6b2206cf",
        "msg" : "Finish the deprecation sweep for existing forRemoval batches",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/BlockListener.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/runnables/skills/AbilityDisableTask.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/EventUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/PlayerListener.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/MaterialMapStore.java"
        ],
        "commitId" : "7ce3de3a32ece4ee691b4fa8accdbd793df0ab87",
        "timestamp" : 1783570544000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Fix Green Terra and Green Thumb ignoring dirt paths\u000a\u000aThe mossy whitelist still listed grass_path, which stopped existing\u000awhen Minecraft 1.17 renamed it to dirt_path, so the dirt path\u000aconversion that Herbalism.convertGreenTerraBlocks already supports\u000acould never trigger.\u000a",
        "date" : "2026-07-08 21:15:44 -0700",
        "id" : "7ce3de3a32ece4ee691b4fa8accdbd793df0ab87",
        "msg" : "Fix Green Terra and Green Thumb ignoring dirt paths",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/MaterialMapStore.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/MaterialMapStore.java"
        ],
        "commitId" : "a26bc85b412a810d4904f18f346cc41f21df47c0",
        "timestamp" : 1783570623000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Fix Super Breaker ignoring the modern copper block family\u000a\u000aThe pickaxe block whitelist listed the cut copper slabs and stairs\u000aunder their pre-1.17-release snapshot names (lightly_weathered_*,\u000asemi_weathered_*), which were renamed to exposed/weathered/oxidized in\u000a21w05a and have never matched since. The whitelist now carries the\u000acurrent names for the copper block, cut copper, slab, and stair\u000afamilies including waxed variants.\u000a",
        "date" : "2026-07-08 21:17:03 -0700",
        "id" : "a26bc85b412a810d4904f18f346cc41f21df47c0",
        "msg" : "Fix Super Breaker ignoring the modern copper block family",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/MaterialMapStore.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/ItemUtils.java",
          "Changelog.txt"
        ],
        "commitId" : "2fd3e61bac31cbfc5d28ec04ac5df084efa7ac7a",
        "timestamp" : 1783570695000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Add mangrove and cherry logs to the woodcutting drop list\u000a\u000aisWoodcuttingDrop categorizes drops for party item sharing but never\u000alearned the mangrove and cherry logs; the stripped mangrove log was\u000apresent while its unstripped form was not. Item sharing is currently\u000adisabled at the pickup handler, so this is parity work for when it\u000areturns rather than a player-visible fix.\u000a",
        "date" : "2026-07-08 21:18:15 -0700",
        "id" : "2fd3e61bac31cbfc5d28ec04ac5df084efa7ac7a",
        "msg" : "Add mangrove and cherry logs to the woodcutting drop list",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/ItemUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/util/MaterialMapStoreTest.java",
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/MaterialMapStore.java"
        ],
        "commitId" : "fdfc70de9631158892007ece2ec847ba7cc1b063",
        "timestamp" : 1783571054000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Cull material names that never match and test the registers\u000a\u000atwisted_vines_plant was a misspelling of twisting_vines_plant, so\u000atwisting vines never got multi-block plant handling; the name is\u000acorrected. Entries that cannot match any block or item in either\u000aedition are removed: the pre-1.13 wood_/gold_ tool and armor names\u000a(their wooden_/golden_ forms stay), copper_blocks, petrified_oak_stairs,\u000asmooth_stone_stairs, and the cut sandstone stair variants that never\u000aexisted.\u000a\u000aBedrock-style identifiers stay on purpose for Bukkit-API servers with\u000aBedrock naming. A new MaterialMapStoreTest reflects over every register\u000aand fails on any name that neither resolves to a real Material nor sits\u000aon the documented Bedrock-alias or newer-than-test-API allowlists, so\u000afuture typos and stale names surface immediately.\u000a",
        "date" : "2026-07-08 21:24:14 -0700",
        "id" : "fdfc70de9631158892007ece2ec847ba7cc1b063",
        "msg" : "Cull material names that never match and test the registers",
        "paths" : [
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/util/MaterialMapStoreTest.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/MaterialMapStore.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/MaterialMapStore.java"
        ],
        "commitId" : "50d99fdc6b1bec4fa59bc0d2239d6c57ff95bc6a",
        "timestamp" : 1783571115000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Guard MaterialMapStore set getters\u000a\u000agetNetheriteArmor hands out a copy instead of the live register so\u000acallers cannot corrupt it, and getNetheriteTools, which nothing calls,\u000ais deprecated for removal.\u000a",
        "date" : "2026-07-08 21:25:15 -0700",
        "id" : "50d99fdc6b1bec4fa59bc0d2239d6c57ff95bc6a",
        "msg" : "Guard MaterialMapStore set getters",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/MaterialMapStore.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/util/PotionEffectUtilTest.java",
          "src/main/java/com/gmail/nossr50/util/PotionEffectUtil.java",
          "src/main/java/com/gmail/nossr50/util/EnchantmentMapper.java",
          "src/main/java/com/gmail/nossr50/listeners/EntityListener.java",
          "src/main/java/com/gmail/nossr50/listeners/PlayerListener.java",
          "Changelog.txt"
        ],
        "commitId" : "ccbd598b6fc69280d7648682ed1fb408fc03aea3",
        "timestamp" : 1783571452000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Drop compatibility shims obsoleted by the 1.20.5 floor\u000a\u000aPotionEffectUtil returns the HASTE and NAUSEA constants directly\u000ainstead of reflecting over legacy field names (its skipped tautological\u000atests are removed), EnchantmentMapper resolves each enchantment with a\u000asingle registry lookup through a shared helper instead of per-\u000aenchantment legacy alias loops, the glow berries food case joins the\u000aFarmers Diet switch it was special-cased around, the bone meal crop\u000acheck becomes an EnumSet and drops nether wart block (bone meal cannot\u000abe used on it, and the old case let it clear placed-block tracking),\u000aand armor stand detection compares EntityType instead of strings.\u000aMannequin stays string-matched since the entity type is newer than the\u000aoldest supported API.\u000a",
        "date" : "2026-07-08 21:30:52 -0700",
        "id" : "ccbd598b6fc69280d7648682ed1fb408fc03aea3",
        "msg" : "Drop compatibility shims obsoleted by the 1.20.5 floor",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/PlayerListener.java"
          },
          {
            "editType" : "delete",
            "file" : "src/test/java/com/gmail/nossr50/util/PotionEffectUtilTest.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/EntityListener.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/PotionEffectUtil.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/EnchantmentMapper.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/listeners/BlockListener.java",
          "src/main/java/com/gmail/nossr50/listeners/PlayerListener.java",
          "src/main/java/com/gmail/nossr50/listeners/ListenerGuards.java",
          "Changelog.txt"
        ],
        "commitId" : "af1d82e5e5da8a5fdfd0278dde07e7c1527b3dbb",
        "timestamp" : 1783571835000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Introduce a shared listener guard preamble\u000a\u000aListenerGuards.resolveEligiblePlayer runs the standard handler gates in\u000acheapest-first order (world blacklist, WorldGuard main flag, player\u000adata key, loaded profile) and hands back the McMMOPlayer or null.\u000aAdopted by the block damage handlers, both fishing handlers, and the\u000aitem pickup handler, whose preambles matched it verbatim; handlers\u000awith side effects in their gates keep their own logic.\u000a",
        "date" : "2026-07-08 21:37:15 -0700",
        "id" : "af1d82e5e5da8a5fdfd0278dde07e7c1527b3dbb",
        "msg" : "Introduce a shared listener guard preamble",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/PlayerListener.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/BlockListener.java"
          },
          {
            "editType" : "add",
            "file" : "src/main/java/com/gmail/nossr50/listeners/ListenerGuards.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/listeners/BlockListener.java",
          "src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java",
          "src/test/java/com/gmail/nossr50/util/skills/CombatUtilsTest.java",
          "Changelog.txt"
        ],
        "commitId" : "52b1197dae5adfb1c45a05523196d42ba0ed4ebf",
        "timestamp" : 1783572670000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Restructure melee combat dispatch and combat XP calculation\u000a\u000aresolveMeleeSkill resolves which skill claims a hit in the historical\u000apredicate order and processMeleeCombat dispatches on the result,\u000areplacing six copies of the trigger-toggle/permission/process pattern.\u000aThe spear branch no longer falls through into the sword branch thanks\u000ato the resolver being first-match-wins; new parameterized tests lock\u000athe routing. processCombatXP splits into isPvpXpIneligible,\u000acalculatePvpBaseXP, and calculatePveBaseXP helpers.\u000a\u000aThe ability preparation branches in BlockListener drop their outer\u000aPermissions checks; checkAbilityActivation performs the same check\u000abefore activating, so the outer copies only duplicated work and one\u000aof them (Berserk) sat at the wrong precedence level inside the FISTS\u000acondition.\u000a",
        "date" : "2026-07-08 21:51:10 -0700",
        "id" : "52b1197dae5adfb1c45a05523196d42ba0ed4ebf",
        "msg" : "Restructure melee combat dispatch and combat XP calculation",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/BlockListener.java"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/util/skills/CombatUtilsTest.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "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/util/EventUtils.java",
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/HardcoreManager.java"
        ],
        "commitId" : "5e368956eceadc8e3319208657184cf8206b7c33",
        "timestamp" : 1783572885000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Deduplicate event firing and hardcore penalty skeletons\u000a\u000aEventUtils gains a generic callEvent helper that fires an event\u000athrough the plugin manager and returns it; the nineteen hand-rolled\u000adispatch lines now go through it. HardcoreManager resolves each\u000aMcMMOPlayer once, shares a putNoChange helper for the four zero-fill\u000abranches, and the two is-enabled-for-any-skill loops collapse into one\u000apredicate-based helper.\u000a",
        "date" : "2026-07-08 21:54:45 -0700",
        "id" : "5e368956eceadc8e3319208657184cf8206b7c33",
        "msg" : "Deduplicate event firing and hardcore penalty skeletons",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/EventUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/HardcoreManager.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/skills/PerksUtils.java"
        ],
        "commitId" : "7fd07597c9ed10ac971748164216ec97f126511a",
        "timestamp" : 1783573037000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Consolidate the XP perk tiers into an ordered table\u000a\u000ahandleXpPerks resolves the fixed multiplier tiers through a\u000arecord-backed list checked strongest-first instead of an eight-branch\u000aif chain; the custom boost keeps its special handling and every\u000apermission node stays exactly as it was.\u000a",
        "date" : "2026-07-08 21:57:17 -0700",
        "id" : "7fd07597c9ed10ac971748164216ec97f126511a",
        "msg" : "Consolidate the XP perk tiers into an ordered table",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/skills/PerksUtils.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/player/NotificationManager.java",
          "src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java",
          "Changelog.txt"
        ],
        "commitId" : "85aa264ca1ea3393b488e0ddf12f75b6bac590b1",
        "timestamp" : 1783573246000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Deduplicate milestone broadcasts in NotificationManager\u000a\u000aprocessLevelUpBroadcasting and processPowerLevelUpBroadcasting shared\u000atheir audience/hover/send body almost line for line; both now collapse\u000atheir guards into a single early return and delegate to a shared\u000abroadcastMilestone helper. sendNearbyPlayersInformation is deprecated\u000asince it never messaged nearby players despite the name (its one\u000ainternal caller now calls sendPlayerInformation directly), and the\u000amisleading could-cache TODO on the per-player broadcast predicate is\u000agone.\u000a",
        "date" : "2026-07-08 22:00:46 -0700",
        "id" : "85aa264ca1ea3393b488e0ddf12f75b6bac590b1",
        "msg" : "Deduplicate milestone broadcasts in NotificationManager",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/player/NotificationManager.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java",
          "src/test/java/com/gmail/nossr50/util/scoreboards/ScoreboardManagerTest.java",
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java",
          "src/test/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapperStatsPowerLevelTest.java"
        ],
        "commitId" : "db55ce3fb863a1ec4fe84e9336fab5053888510f",
        "timestamp" : 1783574094000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Build scoreboard labels at init time instead of in a static initializer\u000a",
        "date" : "2026-07-08 22:14:54 -0700",
        "id" : "db55ce3fb863a1ec4fe84e9336fab5053888510f",
        "msg" : "Build scoreboard labels at init time instead of in a static initializer",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/util/scoreboards/ScoreboardManagerTest.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapperStatsPowerLevelTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java"
        ],
        "commitId" : "f6b43a6f8b54dac6d9f130e729376ad6e0027c6e",
        "timestamp" : 1783574170000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Stop scoreboard teardown paths from constructing backends\u000a",
        "date" : "2026-07-08 22:16:10 -0700",
        "id" : "f6b43a6f8b54dac6d9f130e729376ad6e0027c6e",
        "msg" : "Stop scoreboard teardown paths from constructing backends",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/util/scoreboards/ScoreboardManagerTest.java",
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java"
        ],
        "commitId" : "9b335606aa90595a33f71a92339c8f3ec4976d8e",
        "timestamp" : 1783574259000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Fix handleLevelUp operator precedence scheduling redraws for hidden boards\u000a",
        "date" : "2026-07-08 22:17:39 -0700",
        "id" : "9b335606aa90595a33f71a92339c8f3ec4976d8e",
        "msg" : "Fix handleLevelUp operator precedence scheduling redraws for hidden boards",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/util/scoreboards/ScoreboardManagerTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/config/GeneralConfig.java",
          "src/test/java/com/gmail/nossr50/util/scoreboards/ScoreboardManagerTest.java",
          "src/main/resources/config.yml",
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java"
        ],
        "commitId" : "9f123b485772a7f8f2c5ca5be30f96d140fd7c99",
        "timestamp" : 1783574426000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Deprecate the never-working level-up scoreboard feature and its config keys\u000a",
        "date" : "2026-07-08 22:20:26 -0700",
        "id" : "9f123b485772a7f8f2c5ca5be30f96d140fd7c99",
        "msg" : "Deprecate the never-working level-up scoreboard feature and its config keys",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/config/GeneralConfig.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/resources/config.yml"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/util/scoreboards/ScoreboardManagerTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java"
        ],
        "commitId" : "bdcdea731b351eb9ffdf12e67193bc6bb4ae48c3",
        "timestamp" : 1783574552000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Consolidate scoreboard enable/show methods behind a single helper\u000a",
        "date" : "2026-07-08 22:22:32 -0700",
        "id" : "bdcdea731b351eb9ffdf12e67193bc6bb4ae48c3",
        "msg" : "Consolidate scoreboard enable/show methods behind a single helper",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java"
        ],
        "commitId" : "c2889784a369db8a0e289b2837f53c7adc2bae33",
        "timestamp" : 1783574641000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Deduplicate scoreboard show logic and drop unreachable stats branch\u000a",
        "date" : "2026-07-08 22:24:01 -0700",
        "id" : "c2889784a369db8a0e289b2837f53c7adc2bae33",
        "msg" : "Deduplicate scoreboard show logic and drop unreachable stats branch",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java"
        ],
        "commitId" : "e459890547c754d8f9a0d19be9c55ff848ff8877",
        "timestamp" : 1783574719000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Consolidate scoreboard task cancellation and make close-out exception-safe\u000a",
        "date" : "2026-07-08 22:25:19 -0700",
        "id" : "e459890547c754d8f9a0d19be9c55ff848ff8877",
        "msg" : "Consolidate scoreboard task cancellation and make close-out exception-safe",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/scoreboards/backend/BukkitScoreboardBackend.java",
          "src/main/java/com/gmail/nossr50/util/scoreboards/backend/BukkitPlayerBoard.java",
          "Changelog.txt"
        ],
        "commitId" : "f84d0ac37a68a5a289722938e8d82373a92fcc52",
        "timestamp" : 1783574783000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Share the power level objective name across Bukkit scoreboard classes\u000a",
        "date" : "2026-07-08 22:26:23 -0700",
        "id" : "f84d0ac37a68a5a289722938e8d82373a92fcc52",
        "msg" : "Share the power level objective name across Bukkit scoreboard classes",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/scoreboards/backend/BukkitPlayerBoard.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/scoreboards/backend/BukkitScoreboardBackend.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/experience/ExperienceBarManager.java",
          "Changelog.txt"
        ],
        "commitId" : "f8b6b92a6c06e8ab49dba0fe1ff259a75c798d86",
        "timestamp" : 1783574871000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Remove cancelled XP bar hide tasks from the pending-task map\u000a",
        "date" : "2026-07-08 22:27:51 -0700",
        "id" : "f8b6b92a6c06e8ab49dba0fe1ff259a75c798d86",
        "msg" : "Remove cancelled XP bar hide tasks from the pending-task map",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/experience/ExperienceBarManager.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/experience/ExperienceBarManager.java",
          "src/test/java/com/gmail/nossr50/util/experience/ExperienceBarManagerTest.java",
          "Changelog.txt"
        ],
        "commitId" : "9f106b85230a1828fe9e127a63d5b1d2d4b82f90",
        "timestamp" : 1783575043000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Silence per-skill chat spam when disabling all XP bars at once\u000a",
        "date" : "2026-07-08 22:30:43 -0700",
        "id" : "9f106b85230a1828fe9e127a63d5b1d2d4b82f90",
        "msg" : "Silence per-skill chat spam when disabling all XP bars at once",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/experience/ExperienceBarManager.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/util/experience/ExperienceBarManagerTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/config/GeneralConfig.java",
          "src/main/resources/config.yml",
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java"
        ],
        "commitId" : "65d0f340ae4f5cbf56530bf948ce2fbd6675233f",
        "timestamp" : 1783575162000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Remove the dead LevelUp_Board and LevelUp_Time keys from config.yml\u000a",
        "date" : "2026-07-08 22:32:42 -0700",
        "id" : "65d0f340ae4f5cbf56530bf948ce2fbd6675233f",
        "msg" : "Remove the dead LevelUp_Board and LevelUp_Time keys from config.yml",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/resources/config.yml"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/config/GeneralConfig.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt",
          "src/test/java/com/gmail/nossr50/util/blockmeta/UserBlockTrackerTest.java"
        ],
        "commitId" : "10db2062d0d06085ec6c0f0b209c7471835d3a6b",
        "timestamp" : 1783575668000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Add placed-block round-trip and region segment growth tests\u000a",
        "date" : "2026-07-08 22:41:08 -0700",
        "id" : "10db2062d0d06085ec6c0f0b209c7471835d3a6b",
        "msg" : "Add placed-block round-trip and region segment growth tests",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/util/blockmeta/UserBlockTrackerTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/blockmeta/McMMOSimpleRegionFile.java",
          "src/test/java/com/gmail/nossr50/util/blockmeta/UserBlockTrackerTest.java"
        ],
        "commitId" : "e5db22e7ccbb11c3c2326f185befcbf3b9541aa0",
        "timestamp" : 1783575835000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Harden region file opening against corrupt headers and handle leaks\u000a",
        "date" : "2026-07-08 22:43:55 -0700",
        "id" : "e5db22e7ccbb11c3c2326f185befcbf3b9541aa0",
        "msg" : "Harden region file opening against corrupt headers and handle leaks",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/blockmeta/McMMOSimpleRegionFile.java"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/util/blockmeta/UserBlockTrackerTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/blockmeta/HashChunkManager.java",
          "Changelog.txt"
        ],
        "commitId" : "fadf9701c995916f315c1bd4c7d4043e6bafaeb5",
        "timestamp" : 1783575938000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Log-and-degrade placed-block save failures at the manager boundary\u000a",
        "date" : "2026-07-08 22:45:38 -0700",
        "id" : "fadf9701c995916f315c1bd4c7d4043e6bafaeb5",
        "msg" : "Log-and-degrade placed-block save failures at the manager boundary",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/blockmeta/HashChunkManager.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/blockmeta/McMMORegionBackupStore.java",
          "src/test/java/com/gmail/nossr50/util/blockmeta/McMMORegionBackupStoreStressTest.java",
          "src/test/java/com/gmail/nossr50/util/blockmeta/McMMORegionBackupStoreTest.java",
          "Changelog.txt"
        ],
        "commitId" : "332ae33d6f3c8d2ba7e1c8211e31a3285b8cc5ae",
        "timestamp" : 1783576220000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Polish backup store logging, clock threading, and merge resource handling\u000a",
        "date" : "2026-07-08 22:50:20 -0700",
        "id" : "332ae33d6f3c8d2ba7e1c8211e31a3285b8cc5ae",
        "msg" : "Polish backup store logging, clock threading, and merge resource handling",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/util/blockmeta/McMMORegionBackupStoreStressTest.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/blockmeta/McMMORegionBackupStore.java"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/util/blockmeta/McMMORegionBackupStoreTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/commands/CommandRegistrationManager.java",
          "Changelog.txt"
        ],
        "commitId" : "90f5bc55a02d56893d02cc9078ab353003a819c0",
        "timestamp" : 1783576586000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Make command registration data-driven with a single wiring path\u000a",
        "date" : "2026-07-08 22:56:26 -0700",
        "id" : "90f5bc55a02d56893d02cc9078ab353003a819c0",
        "msg" : "Make command registration data-driven with a single wiring path",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/commands/CommandRegistrationManager.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/resources/plugin.yml",
          "Changelog.txt",
          "src/test/java/com/gmail/nossr50/util/commands/CommandRegistrationManagerTest.java"
        ],
        "commitId" : "b99c27ac94fba5c1870433f86da1e25dafed20b9",
        "timestamp" : 1783576691000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Remove the dead mmocompat command and add registration coverage test\u000a",
        "date" : "2026-07-08 22:58:11 -0700",
        "id" : "b99c27ac94fba5c1870433f86da1e25dafed20b9",
        "msg" : "Remove the dead mmocompat command and add registration coverage test",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/resources/plugin.yml"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/util/commands/CommandRegistrationManagerTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/text/McMMOMessageType.java",
          "src/main/java/com/gmail/nossr50/util/text/StringUtils.java",
          "src/main/java/com/gmail/nossr50/util/text/TextComponentFactory.java",
          "src/main/java/com/gmail/nossr50/util/text/ConfigStringUtils.java",
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/Motd.java"
        ],
        "commitId" : "1f0be8d8359d4ab22bb7318182b71450ba2b92e5",
        "timestamp" : 1783577008000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Consolidate text formatting helpers and refresh MOTD strings per display\u000a",
        "date" : "2026-07-08 23:03:28 -0700",
        "id" : "1f0be8d8359d4ab22bb7318182b71450ba2b92e5",
        "msg" : "Consolidate text formatting helpers and refresh MOTD strings per display",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/text/ConfigStringUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/text/StringUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/text/TextComponentFactory.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/Motd.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/text/McMMOMessageType.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/sounds/SoundManager.java",
          "Changelog.txt"
        ],
        "commitId" : "d2a76396d71539e831fa21fada5f864fee21c82c",
        "timestamp" : 1783577111000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Funnel sound send methods through one shared core\u000a",
        "date" : "2026-07-08 23:05:11 -0700",
        "id" : "d2a76396d71539e831fa21fada5f864fee21c82c",
        "msg" : "Funnel sound send methods through one shared core",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/sounds/SoundManager.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/mcMMO.java",
          "src/main/java/com/gmail/nossr50/listeners/InteractionManager.java",
          "Changelog.txt"
        ],
        "commitId" : "e93c7ecf603bd55e84e8e30fe5fb04fd77bae496",
        "timestamp" : 1783577285000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Guard subskill registration against duplicates and drop lazy map init\u000a",
        "date" : "2026-07-08 23:08:05 -0700",
        "id" : "e93c7ecf603bd55e84e8e30fe5fb04fd77bae496",
        "msg" : "Guard subskill registration against duplicates and drop lazy map init",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/mcMMO.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/InteractionManager.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/util/MaterialMapStore.java",
          "src/main/java/com/gmail/nossr50/util/skills/SkillTools.java",
          "src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java",
          "Changelog.txt"
        ],
        "commitId" : "47219f88bca1cd6358faf605ac9008f9e2f91e2b",
        "timestamp" : 1783577516000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Dedupe subskill checks, freeze subskill sets, accept English skill names on any locale\u000a",
        "date" : "2026-07-08 23:11:56 -0700",
        "id" : "47219f88bca1cd6358faf605ac9008f9e2f91e2b",
        "msg" : "Dedupe subskill checks, freeze subskill sets, accept English skill names on any locale",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/MaterialMapStore.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/skills/SkillTools.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/mcMMO.java",
          "src/main/java/com/gmail/nossr50/util/MetadataConstants.java",
          "src/main/java/com/gmail/nossr50/listeners/EntityListener.java",
          "src/main/java/com/gmail/nossr50/util/AttributeMapper.java",
          "src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java",
          "Changelog.txt"
        ],
        "commitId" : "6db314f3216b327a656a2e26003b069748cfd2ba",
        "timestamp" : 1783577731000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Trim mob metadata cleanup keys, lazy metadata flag value, fix attribute constants\u000a",
        "date" : "2026-07-08 23:15:31 -0700",
        "id" : "6db314f3216b327a656a2e26003b069748cfd2ba",
        "msg" : "Trim mob metadata cleanup keys, lazy metadata flag value, fix attribute constants",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/MetadataConstants.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/EntityListener.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/mcMMO.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/AttributeMapper.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "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/util/adapter/BiomeAdapter.java",
          "src/main/java/com/gmail/nossr50/util/ReflectionUtils.java",
          "src/main/java/com/gmail/nossr50/util/sounds/SoundManager.java",
          "Changelog.txt"
        ],
        "commitId" : "1450f3afce4665ffe961e86b401b5d1563eba5ca",
        "timestamp" : 1783577896000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Share a graceful reflective valueOf helper across version shims\u000a",
        "date" : "2026-07-08 23:18:16 -0700",
        "id" : "1450f3afce4665ffe961e86b401b5d1563eba5ca",
        "msg" : "Share a graceful reflective valueOf helper across version shims",
        "paths" : [
          {
            "editType" : "add",
            "file" : "src/main/java/com/gmail/nossr50/util/ReflectionUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/adapter/BiomeAdapter.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/sounds/SoundManager.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/listeners/InventoryListener.java",
          "src/main/java/com/gmail/nossr50/util/ItemUtils.java",
          "Changelog.txt"
        ],
        "commitId" : "beec5a48a4c1395d0bff85b8313d6114196d2c48",
        "timestamp" : 1783578040000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Flatten furnace fuel handler, dedupe item spawn methods, trim vector copies\u000a",
        "date" : "2026-07-08 23:20:40 -0700",
        "id" : "beec5a48a4c1395d0bff85b8313d6114196d2c48",
        "msg" : "Flatten furnace fuel handler, dedupe item spawn methods, trim vector copies",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/InventoryListener.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/ItemUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/listeners/EntityListenerTest.java",
          "src/main/java/com/gmail/nossr50/listeners/EntityListener.java",
          "src/main/java/com/gmail/nossr50/listeners/FriendlyFire.java",
          "src/test/java/com/gmail/nossr50/listeners/FriendlyFireTest.java",
          "Changelog.txt"
        ],
        "commitId" : "6f6fb56b45555d05789f7222f69926f4fde4878c",
        "timestamp" : 1783578455000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Extract pure friendly-fire resolver and stop cancelling combust for unloaded data\u000a",
        "date" : "2026-07-08 23:27:35 -0700",
        "id" : "6f6fb56b45555d05789f7222f69926f4fde4878c",
        "msg" : "Extract pure friendly-fire resolver and stop cancelling combust for unloaded data",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/EntityListener.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/listeners/FriendlyFireTest.java"
          },
          {
            "editType" : "add",
            "file" : "src/main/java/com/gmail/nossr50/listeners/FriendlyFire.java"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/listeners/EntityListenerTest.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/listeners/DietFoodsTest.java",
          "src/main/java/com/gmail/nossr50/listeners/DietFoods.java",
          "src/main/java/com/gmail/nossr50/listeners/EntityListener.java",
          "Changelog.txt"
        ],
        "commitId" : "48b5e12014e2a16b3ffe55582124ad2b4fd1d1ff",
        "timestamp" : 1783578601000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Extract diet food mapping and eaten-hand resolution from the food listener\u000a",
        "date" : "2026-07-08 23:30:01 -0700",
        "id" : "48b5e12014e2a16b3ffe55582124ad2b4fd1d1ff",
        "msg" : "Extract diet food mapping and eaten-hand resolution from the food listener",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/EntityListener.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/listeners/DietFoodsTest.java"
          },
          {
            "editType" : "add",
            "file" : "src/main/java/com/gmail/nossr50/listeners/DietFoods.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/skills/mining/BlastMining.java",
          "src/test/java/com/gmail/nossr50/skills/mining/BlastMiningTest.java",
          "src/main/java/com/gmail/nossr50/listeners/EntityListener.java",
          "Changelog.txt"
        ],
        "commitId" : "861843093834e336243333eb6bcb184220e16206",
        "timestamp" : 1783578755000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Extract tracked-TNT owner resolution with tests\u000a",
        "date" : "2026-07-08 23:32:35 -0700",
        "id" : "861843093834e336243333eb6bcb184220e16206",
        "msg" : "Extract tracked-TNT owner resolution with tests",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/skills/mining/BlastMining.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/skills/mining/BlastMiningTest.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/EntityListener.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/listeners/DiminishedReturnsTest.java",
          "src/main/java/com/gmail/nossr50/listeners/DiminishedReturns.java",
          "src/main/java/com/gmail/nossr50/listeners/SelfListener.java",
          "Changelog.txt"
        ],
        "commitId" : "024ffd3654429d376ab259cb92ca714df1c85d8a",
        "timestamp" : 1783578908000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Extract diminished-returns XP math into a tested pure formula\u000a",
        "date" : "2026-07-08 23:35:08 -0700",
        "id" : "024ffd3654429d376ab259cb92ca714df1c85d8a",
        "msg" : "Extract diminished-returns XP math into a tested pure formula",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/SelfListener.java"
          },
          {
            "editType" : "add",
            "file" : "src/main/java/com/gmail/nossr50/listeners/DiminishedReturns.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/listeners/DiminishedReturnsTest.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/listeners/BlockListener.java",
          "src/test/java/com/gmail/nossr50/listeners/BonusDropsTest.java",
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/listeners/BonusDrops.java"
        ],
        "commitId" : "030dc36c812dd36027801f56a6ecf41e62f359f0",
        "timestamp" : 1783579053000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Extract bonus-drop trust analysis into a tested helper\u000a",
        "date" : "2026-07-08 23:37:33 -0700",
        "id" : "030dc36c812dd36027801f56a6ecf41e62f359f0",
        "msg" : "Extract bonus-drop trust analysis into a tested helper",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "add",
            "file" : "src/main/java/com/gmail/nossr50/listeners/BonusDrops.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/BlockListener.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/listeners/BonusDropsTest.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/listeners/AnvilInteraction.java",
          "src/main/java/com/gmail/nossr50/listeners/PlayerListener.java",
          "src/test/java/com/gmail/nossr50/listeners/AnvilInteractionTest.java",
          "Changelog.txt"
        ],
        "commitId" : "606ba580c2ecd23d3ab5764560202a2dbc627f51",
        "timestamp" : 1783579210000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Extract repair/salvage anvil decision ladder into a tested resolver\u000a",
        "date" : "2026-07-08 23:40:10 -0700",
        "id" : "606ba580c2ecd23d3ab5764560202a2dbc627f51",
        "msg" : "Extract repair/salvage anvil decision ladder into a tested resolver",
        "paths" : [
          {
            "editType" : "add",
            "file" : "src/main/java/com/gmail/nossr50/listeners/AnvilInteraction.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/PlayerListener.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/listeners/AnvilInteractionTest.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/listeners/BlockListener.java",
          "src/main/java/com/gmail/nossr50/listeners/EntityListener.java",
          "src/test/java/com/gmail/nossr50/listeners/PlayerListenerSalvageInteractTest.java",
          "src/main/java/com/gmail/nossr50/listeners/PlayerListener.java",
          "Changelog.txt"
        ],
        "commitId" : "648a2603ad20f217833e6dc0f2d6514bb7219fed",
        "timestamp" : 1783579874000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Stop mutating fishing, interact, and block damage events at MONITOR priority\u000a",
        "date" : "2026-07-08 23:51:14 -0700",
        "id" : "648a2603ad20f217833e6dc0f2d6514bb7219fed",
        "msg" : "Stop mutating fishing, interact, and block damage events at MONITOR priority",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/EntityListener.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/PlayerListener.java"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/listeners/PlayerListenerSalvageInteractTest.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/BlockListener.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/skills/swords/SwordsManager.java",
          "src/main/java/com/gmail/nossr50/util/PotionUtil.java",
          "src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java",
          "src/main/java/com/gmail/nossr50/util/MaterialMapStore.java",
          "src/main/java/com/gmail/nossr50/util/skills/ParticleEffectUtils.java",
          "src/main/java/com/gmail/nossr50/skills/maces/MacesManager.java",
          "src/main/java/com/gmail/nossr50/skills/spears/SpearsManager.java",
          "src/main/java/com/gmail/nossr50/util/skills/SkillActivationType.java",
          "src/main/java/com/gmail/nossr50/skills/unarmed/UnarmedManager.java",
          "pom.xml",
          "src/main/java/com/gmail/nossr50/util/skills/PerksUtils.java",
          "src/main/java/com/gmail/nossr50/config/GeneralConfig.java",
          "src/main/java/com/gmail/nossr50/util/random/ProbabilityUtil.java",
          "src/main/java/com/gmail/nossr50/util/FixSpellingNetheriteUtil.java",
          "src/main/java/com/gmail/nossr50/util/EventUtils.java",
          "src/main/java/com/gmail/nossr50/util/player/NotificationManager.java",
          "src/main/java/com/gmail/nossr50/config/AdvancedConfig.java",
          "src/main/java/com/gmail/nossr50/util/nms/NMSVersion.java",
          "src/main/java/com/gmail/nossr50/util/ItemUtils.java",
          "src/main/java/com/gmail/nossr50/util/Motd.java",
          "src/main/java/com/gmail/nossr50/skills/axes/AxesManager.java",
          "src/main/java/com/gmail/nossr50/util/scoreboards/ObjectiveType.java",
          "src/main/java/com/gmail/nossr50/util/Misc.java",
          "Changelog.txt",
          "src/main/java/com/gmail/nossr50/util/MetadataConstants.java",
          "src/main/java/com/gmail/nossr50/util/nms/NMSConstants.java",
          "src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java",
          "src/main/java/com/gmail/nossr50/listeners/InteractionManager.java",
          "src/main/java/com/gmail/nossr50/util/skills/SkillTools.java",
          "src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java",
          "src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java"
        ],
        "commitId" : "807cab15b74c079240fca440fe1b757edc72e8dc",
        "timestamp" : 1783581479000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Bump version to 2.3.000-SNAPSHOT\u000a",
        "date" : "2026-07-09 00:17:59 -0700",
        "id" : "807cab15b74c079240fca440fe1b757edc72e8dc",
        "msg" : "Bump version to 2.3.000-SNAPSHOT",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/ItemUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/nms/NMSConstants.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/config/AdvancedConfig.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/scoreboards/ObjectiveType.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/Misc.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/skills/ParticleEffectUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/config/GeneralConfig.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/MaterialMapStore.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/Motd.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/EventUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/skills/spears/SpearsManager.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/player/NotificationManager.java"
          },
          {
            "editType" : "edit",
            "file" : "pom.xml"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/skills/maces/MacesManager.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/FixSpellingNetheriteUtil.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/MetadataConstants.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/skills/axes/AxesManager.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/skills/swords/SwordsManager.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/PotionUtil.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/skills/PerksUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/random/ProbabilityUtil.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/skills/SkillTools.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/listeners/InteractionManager.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/skills/SkillActivationType.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/nms/NMSVersion.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java"
          },
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/skills/unarmed/UnarmedManager.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt"
        ],
        "commitId" : "9b76ac274d13f7165fb0dff410ed7144a4a4be11",
        "timestamp" : 1783582276000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Condense the 2.3.000 changelog\u000a",
        "date" : "2026-07-09 00:31:16 -0700",
        "id" : "9b76ac274d13f7165fb0dff410ed7144a4a4be11",
        "msg" : "Condense the 2.3.000 changelog",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
      "fullName" : "nossr50"
    }
  ]
}