{
  "_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" : 363,
          "buildResult" : null,
          "marked" : {
            "SHA1" : "6fcbefe87d7d7cd52c1b8c8d7cd0b72371148828",
            "branch" : [
              {
                "SHA1" : "6fcbefe87d7d7cd52c1b8c8d7cd0b72371148828",
                "name" : "refs/remotes/origin/master"
              }
            ]
          },
          "revision" : {
            "SHA1" : "6fcbefe87d7d7cd52c1b8c8d7cd0b72371148828",
            "branch" : [
              {
                "SHA1" : "6fcbefe87d7d7cd52c1b8c8d7cd0b72371148828",
                "name" : "refs/remotes/origin/master"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "6fcbefe87d7d7cd52c1b8c8d7cd0b72371148828",
        "branch" : [
          {
            "SHA1" : "6fcbefe87d7d7cd52c1b8c8d7cd0b72371148828",
            "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" : null,
  "displayName" : "#363",
  "duration" : 63091,
  "estimatedDuration" : 66807,
  "executor" : null,
  "fullDisplayName" : "mcMMO #363",
  "id" : "363",
  "inProgress" : false,
  "keepLog" : false,
  "number" : 363,
  "queueId" : 310,
  "result" : "SUCCESS",
  "timestamp" : 1790129954437,
  "url" : "https://popicraft.net/jenkins/job/mcMMO/363/",
  "builtOn" : "Builder",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt",
          "src/main/resources/experience.yml"
        ],
        "commitId" : "bd8ace31cc40fa38d11f838d4af0f402c5897a39",
        "timestamp" : 1790125468000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Lower the default Herbalism XP for Pale_Hanging_Moss to 1\u000a\u000aPale hanging moss paid 150 Herbalism XP per block. A dispenser of bone\u000ameal on a clock grows it back without limit, so breaking it was a very\u000afast way to level Herbalism. It now pays 1, the same as glow lichen,\u000awhich is farmed the same way.\u000a\u000aexperience.yml only gains missing keys on startup, so existing servers\u000akeep 150 until they change the value or regenerate the file.\u000a\u000aFixes #5325\u000a",
        "date" : "2026-09-22 18:04:28 -0700",
        "id" : "bd8ace31cc40fa38d11f838d4af0f402c5897a39",
        "msg" : "Lower the default Herbalism XP for Pale_Hanging_Moss to 1",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/resources/experience.yml"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changelog.txt"
        ],
        "commitId" : "584fa0889fbb4e8b8df844e52482a3a8ceda03d8",
        "timestamp" : 1790125590000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "simplified changelog\u000a",
        "date" : "2026-09-22 18:06:30 -0700",
        "id" : "584fa0889fbb4e8b8df844e52482a3a8ceda03d8",
        "msg" : "simplified changelog",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/test/java/com/gmail/nossr50/database/FlatFileDatabaseManagerTest.java",
          "src/main/java/com/gmail/nossr50/database/FlatFileDatabaseManager.java",
          "src/test/java/com/gmail/nossr50/runnables/player/PlayerProfileLoadingTaskTest.java",
          "Changelog.txt"
        ],
        "commitId" : "6fcbefe87d7d7cd52c1b8c8d7cd0b72371148828",
        "timestamp" : 1790129552000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
          "fullName" : "nossr50"
        },
        "authorEmail" : "nossr50@gmail.com",
        "comment" : "Keep FlatFile players unloaded when their data cannot be read at login\u000a\u000aWhen a player's profile did not load at login, the loading task asked the\u000adatabase for a new user. On FlatFile, newUser(Player) always returned a loaded\u000aprofile at starting levels, and saveUser writes over any row with that\u000aplayer's UUID. A users file that could not be read at that moment, or a row\u000awhose cooldowns could not be parsed, therefore wiped the player's stored\u000aprogress on the first save.\u000a\u000anewUser(Player) now reads mcmmo.users and only returns a loaded profile when\u000athe file was read and has no row with the player's UUID. Otherwise the profile\u000astays unloaded and the login keeps retrying the load, the same way the SQL\u000adatabase behaves when its insert fails.\u000a\u000anewUser(String, UUID) no longer appends a second row for a UUID that is\u000aalready stored. The load queries skip a row that fails to parse and use the\u000anext row with the same UUID, so a fresh duplicate would be loaded in place of\u000aa damaged original and then saved over both.\u000a\u000aA row that fails to parse is now logged once per player, naming them, instead\u000aof the exception being swallowed. Rows that end before the newer XP columns\u000aload with those columns at zero, as the startup health check pads them,\u000ainstead of failing to load.\u000a",
        "date" : "2026-09-22 19:12:32 -0700",
        "id" : "6fcbefe87d7d7cd52c1b8c8d7cd0b72371148828",
        "msg" : "Keep FlatFile players unloaded when their data cannot be read at login",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/database/FlatFileDatabaseManager.java"
          },
          {
            "editType" : "add",
            "file" : "src/test/java/com/gmail/nossr50/runnables/player/PlayerProfileLoadingTaskTest.java"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/database/FlatFileDatabaseManagerTest.java"
          },
          {
            "editType" : "edit",
            "file" : "Changelog.txt"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://popicraft.net/jenkins/user/nossr50",
      "fullName" : "nossr50"
    }
  ]
}