<freeStyleBuild _class='hudson.model.FreeStyleBuild'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>345</buildNumber><marked><SHA1>df4cdce38ca8641eb3add62c2ab973f9ad0e253a</SHA1><branch><SHA1>df4cdce38ca8641eb3add62c2ab973f9ad0e253a</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>df4cdce38ca8641eb3add62c2ab973f9ad0e253a</SHA1><branch><SHA1>df4cdce38ca8641eb3add62c2ab973f9ad0e253a</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>df4cdce38ca8641eb3add62c2ab973f9ad0e253a</SHA1><branch><SHA1>df4cdce38ca8641eb3add62c2ab973f9ad0e253a</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/mcMMO-Dev/mcMMO.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'><artifactsUrl>https://popicraft.net/jenkins/job/mcMMO/345/artifact</artifactsUrl><changesUrl>https://popicraft.net/jenkins/job/mcMMO/changes</changesUrl><displayUrl>https://popicraft.net/jenkins/job/mcMMO/345/</displayUrl><testsUrl>https://popicraft.net/jenkins/job/mcMMO/345/testReport</testsUrl></action><artifact><displayPath>mcMMO.jar</displayPath><fileName>mcMMO.jar</fileName><relativePath>target/mcMMO.jar</relativePath></artifact><artifact><displayPath>original-mcMMO.jar</displayPath><fileName>original-mcMMO.jar</fileName><relativePath>target/original-mcMMO.jar</relativePath></artifact><building>false</building><displayName>#345</displayName><duration>170624</duration><estimatedDuration>135282</estimatedDuration><fullDisplayName>mcMMO #345</fullDisplayName><id>345</id><inProgress>false</inProgress><keepLog>false</keepLog><number>345</number><queueId>219</queueId><result>SUCCESS</result><timestamp>1783754351147</timestamp><url>https://popicraft.net/jenkins/job/mcMMO/345/</url><builtOn>Builder</builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/main/java/com/gmail/nossr50/listeners/BlockListener.java</affectedPath><affectedPath>src/test/java/com/gmail/nossr50/listeners/BlockListenerBonusDropsTest.java</affectedPath><affectedPath>Changelog.txt</affectedPath><commitId>5a1a61caa94dc9aa4446a955e0e8c904efc1e76a</commitId><timestamp>1783748147000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></author><authorEmail>nossr50@gmail.com</authorEmail><comment>Fix Herbalism double drops not working on beetroots

At BlockDropItemEvent time the broken block already reads as AIR, so
deciding the beetroot drop tolerance from the live block type never
matched BEETROOTS and the two legitimate beetroot drop materials
tripped the tile-entity dupe heuristic. Read the type from the event's
captured pre-break BlockState instead.
</comment><date>2026-07-10 22:35:47 -0700</date><id>5a1a61caa94dc9aa4446a955e0e8c904efc1e76a</id><msg>Fix Herbalism double drops not working on beetroots</msg><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/listeners/BlockListener.java</file></path><path><editType>add</editType><file>src/test/java/com/gmail/nossr50/listeners/BlockListenerBonusDropsTest.java</file></path><path><editType>edit</editType><file>Changelog.txt</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/test/java/com/gmail/nossr50/listeners/EntityListenerTest.java</affectedPath><affectedPath>Changelog.txt</affectedPath><affectedPath>src/main/java/com/gmail/nossr50/listeners/EntityListener.java</affectedPath><commitId>808bc5577be1a2c70328742570c7c04c1d9e66c3</commitId><timestamp>1783748411000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></author><authorEmail>nossr50@gmail.com</authorEmail><comment>Fix error when a pet owned by a non-player deals damage

Tameable owners resolved in the damage handler are AnimalTamers and
not necessarily players; the unchecked OfflinePlayer cast crashed the
handler for plugin-provided owners. The tame handler fixed the same
bug class earlier; this brings the damage path in line.
</comment><date>2026-07-10 22:40:11 -0700</date><id>808bc5577be1a2c70328742570c7c04c1d9e66c3</id><msg>Fix error when a pet owned by a non-player deals damage</msg><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/listeners/EntityListener.java</file></path><path><editType>edit</editType><file>Changelog.txt</file></path><path><editType>edit</editType><file>src/test/java/com/gmail/nossr50/listeners/EntityListenerTest.java</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/main/java/com/gmail/nossr50/listeners/InventoryListener.java</affectedPath><affectedPath>Changelog.txt</affectedPath><affectedPath>src/test/java/com/gmail/nossr50/listeners/InventoryListenerClickTest.java</affectedPath><commitId>cc7442bbcc595472e468dbcaf2d6552609fe7302</commitId><timestamp>1783748598000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></author><authorEmail>nossr50@gmail.com</authorEmail><comment>Fix error when non-players click or drag in furnace and brewing inventories

InventoryClickEvent and InventoryDragEvent report the viewer as a
HumanEntity, and plugins can open container inventories for
human-shaped entities that are not players. The click and drag
handlers cast the viewer to Player unchecked and crashed on such
viewers; they now ignore non-player viewers.
</comment><date>2026-07-10 22:43:18 -0700</date><id>cc7442bbcc595472e468dbcaf2d6552609fe7302</id><msg>Fix error when non-players click or drag in furnace and brewing inventories</msg><path><editType>add</editType><file>src/test/java/com/gmail/nossr50/listeners/InventoryListenerClickTest.java</file></path><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/listeners/InventoryListener.java</file></path><path><editType>edit</editType><file>Changelog.txt</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/main/java/com/gmail/nossr50/listeners/PlayerListener.java</affectedPath><affectedPath>src/test/java/com/gmail/nossr50/listeners/PlayerListenerCommandAliasTest.java</affectedPath><affectedPath>Changelog.txt</affectedPath><commitId>7f3f5b41bc61ace7361929bbc338d45d725b8b60</commitId><timestamp>1783748841000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></author><authorEmail>nossr50@gmail.com</authorEmail><comment>Fix localized skill commands rewriting arguments that repeat the skill name

The alias rewrite replaced every occurrence of the alias text in the
command message, so arguments that repeated the alias (player names,
search terms) were rewritten along with the command token. Only the
leading command token is rewritten now.
</comment><date>2026-07-10 22:47:21 -0700</date><id>7f3f5b41bc61ace7361929bbc338d45d725b8b60</id><msg>Fix localized skill commands rewriting arguments that repeat the skill name</msg><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/listeners/PlayerListener.java</file></path><path><editType>edit</editType><file>src/test/java/com/gmail/nossr50/listeners/PlayerListenerCommandAliasTest.java</file></path><path><editType>edit</editType><file>Changelog.txt</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/main/java/com/gmail/nossr50/listeners/PlayerListener.java</affectedPath><affectedPath>src/test/java/com/gmail/nossr50/listeners/PlayerListenerFishingTest.java</affectedPath><affectedPath>Changelog.txt</affectedPath><commitId>4d2b088f4a4efe8316c2d7718378ede358d040e4</commitId><timestamp>1783748881000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></author><authorEmail>nossr50@gmail.com</authorEmail><comment>Fix error when a plugin-fired fish catch carries a non-item entity

CAUGHT_FISH normally carries an Item, but the event does not enforce
the caught entity's type; the HIGH-priority handler cast it unchecked
and crashed on plugin-fired events with other entity types.
</comment><date>2026-07-10 22:48:01 -0700</date><id>4d2b088f4a4efe8316c2d7718378ede358d040e4</id><msg>Fix error when a plugin-fired fish catch carries a non-item entity</msg><path><editType>edit</editType><file>Changelog.txt</file></path><path><editType>edit</editType><file>src/test/java/com/gmail/nossr50/listeners/PlayerListenerFishingTest.java</file></path><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/listeners/PlayerListener.java</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/test/java/com/gmail/nossr50/listeners/EntityListenerTest.java</affectedPath><affectedPath>Changelog.txt</affectedPath><affectedPath>src/main/java/com/gmail/nossr50/listeners/EntityListener.java</affectedPath><commitId>81f5c55ca02d8c9d3c11bcf6b0f35bd5dea58672</commitId><timestamp>1783749004000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></author><authorEmail>nossr50@gmail.com</authorEmail><comment>Fix splash saturation potions losing particle and icon visibility

The saturation splash workaround re-added the effect with the short
PotionEffect constructor, which resets particle and icon visibility to
the defaults; custom potions brewed to hide their particles started
showing them after the splash.
</comment><date>2026-07-10 22:50:04 -0700</date><id>81f5c55ca02d8c9d3c11bcf6b0f35bd5dea58672</id><msg>Fix splash saturation potions losing particle and icon visibility</msg><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/listeners/EntityListener.java</file></path><path><editType>edit</editType><file>Changelog.txt</file></path><path><editType>edit</editType><file>src/test/java/com/gmail/nossr50/listeners/EntityListenerTest.java</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/main/java/com/gmail/nossr50/listeners/BlockListener.java</affectedPath><affectedPath>src/main/java/com/gmail/nossr50/listeners/EntityListener.java</affectedPath><commitId>1cad900859c47d0f8c1522d60f642164dfcfabba</commitId><timestamp>1783749123000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></author><authorEmail>nossr50@gmail.com</authorEmail><comment>Clean up listener debug reporting and stale comments

Extract the duplicated PvP combat debug report in EntityListener into
a shared helper, correct the entity explode handler name, and fix two
comments that no longer matched the code (traveling-block cleanup
timer cadence, piston retract direction).
</comment><date>2026-07-10 22:52:03 -0700</date><id>1cad900859c47d0f8c1522d60f642164dfcfabba</id><msg>Clean up listener debug reporting and stale comments</msg><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/listeners/BlockListener.java</file></path><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/listeners/EntityListener.java</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/main/java/com/gmail/nossr50/listeners/InventoryListener.java</affectedPath><affectedPath>Changelog.txt</affectedPath><commitId>8fa27d38cc80ca3414915477dcd47e70d5416faf</commitId><timestamp>1783749192000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></author><authorEmail>nossr50@gmail.com</authorEmail><comment>Move buff-stripping inventory handlers off MONITOR priority

The inventory click and open handlers strip ability buffs from item
stacks, which mutates item state; the MONITOR contract forbids that.
They now run at HIGHEST like the other mutating handlers moved during
the listener priority cleanup.
</comment><date>2026-07-10 22:53:12 -0700</date><id>8fa27d38cc80ca3414915477dcd47e70d5416faf</id><msg>Move buff-stripping inventory handlers off MONITOR priority</msg><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/listeners/InventoryListener.java</file></path><path><editType>edit</editType><file>Changelog.txt</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/test/java/com/gmail/nossr50/listeners/WorldListenerTest.java</affectedPath><commitId>effda0dd6f8025bba8a67cb74fa74723385b090a</commitId><timestamp>1783749419000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></author><authorEmail>nossr50@gmail.com</authorEmail><comment>Add WorldListener coverage for growth eligibility and unload flushes
</comment><date>2026-07-10 22:56:59 -0700</date><id>effda0dd6f8025bba8a67cb74fa74723385b090a</id><msg>Add WorldListener coverage for growth eligibility and unload flushes</msg><path><editType>add</editType><file>src/test/java/com/gmail/nossr50/listeners/WorldListenerTest.java</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/main/java/com/gmail/nossr50/datatypes/player/PlayerProfile.java</affectedPath><affectedPath>Changelog.txt</affectedPath><affectedPath>src/test/java/com/gmail/nossr50/datatypes/player/PlayerProfileTest.java</affectedPath><commitId>7ea3d91ff368a556f0e05c85db46f3a81157ae70</commitId><timestamp>1783749968000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></author><authorEmail>nossr50@gmail.com</authorEmail><comment>Fix error when adding levels to a child skill through the API

Child skills have no level entry of their own, so the read-then-modify
in PlayerProfile#addLevels crashed on the missing entry before the
child guard in modifySkill could run. Added levels now split evenly
across the child's parent skills, matching how child skill XP and the
offline ExperienceAPI level variants already behave. The addlevels
command rejects child skills up front, so only API callers were
affected.
</comment><date>2026-07-10 23:06:08 -0700</date><id>7ea3d91ff368a556f0e05c85db46f3a81157ae70</id><msg>Fix error when adding levels to a child skill through the API</msg><path><editType>edit</editType><file>Changelog.txt</file></path><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/datatypes/player/PlayerProfile.java</file></path><path><editType>add</editType><file>src/test/java/com/gmail/nossr50/datatypes/player/PlayerProfileTest.java</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/main/java/com/gmail/nossr50/datatypes/player/PlayerProfile.java</affectedPath><affectedPath>Changelog.txt</affectedPath><affectedPath>src/test/java/com/gmail/nossr50/datatypes/player/PlayerProfileTest.java</affectedPath><commitId>e76d62cb5a8f78c7c4951f123cb936e03e561d4c</commitId><timestamp>1783750036000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></author><authorEmail>nossr50@gmail.com</authorEmail><comment>Fix error reading XP requirements for offline players with the cumulative curve

With 'Experience_Formula.Cumulative_Curve' enabled, PlayerProfile
resolved the power level through UserManager, which has no entry for
offline-loaded profiles (offline /inspect, ExperienceAPI offline
lookups) and crashed. The profile's own level sum now stands in when
no online player is found; permission-aware filtering is impossible
offline anyway. Also corrects the stale getLastLogin javadoc.
</comment><date>2026-07-10 23:07:16 -0700</date><id>e76d62cb5a8f78c7c4951f123cb936e03e561d4c</id><msg>Fix error reading XP requirements for offline players with the cumulative curve</msg><path><editType>edit</editType><file>src/test/java/com/gmail/nossr50/datatypes/player/PlayerProfileTest.java</file></path><path><editType>edit</editType><file>Changelog.txt</file></path><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/datatypes/player/PlayerProfile.java</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java</affectedPath><commitId>49ff833b9c475cbd3cd6d8ee6a77ac7cc278648c</commitId><timestamp>1783750154000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></author><authorEmail>nossr50@gmail.com</authorEmail><comment>Clean up McMMOPlayer XP gain and logout paths

Compute the modified XP once in beginUnsharedXpGain instead of running
the permission-heavy perk modifier twice per gain (which also sent the
XP perk debug report to debug-mode players twice), and reuse the local
player reference in logout instead of re-reading a field that is never
null.
</comment><date>2026-07-10 23:09:14 -0700</date><id>49ff833b9c475cbd3cd6d8ee6a77ac7cc278648c</id><msg>Clean up McMMOPlayer XP gain and logout paths</msg><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/test/java/com/gmail/nossr50/datatypes/player/PlayerProfileTest.java</affectedPath><commitId>cdc0f61d89a8338cae8bd7702a03123907a1e239</commitId><timestamp>1783750354000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></author><authorEmail>nossr50@gmail.com</authorEmail><comment>Add PlayerProfile coverage for save retries and child-skill data handling
</comment><date>2026-07-10 23:12:34 -0700</date><id>cdc0f61d89a8338cae8bd7702a03123907a1e239</id><msg>Add PlayerProfile coverage for save retries and child-skill data handling</msg><path><editType>edit</editType><file>src/test/java/com/gmail/nossr50/datatypes/player/PlayerProfileTest.java</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/main/java/com/gmail/nossr50/datatypes/player/PlayerProfile.java</affectedPath><affectedPath>Changelog.txt</affectedPath><affectedPath>src/test/java/com/gmail/nossr50/datatypes/player/PlayerProfileTest.java</affectedPath><commitId>43a5f944b494fa9f7809b7731ebdd665e53fca9b</commitId><timestamp>1783751158000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></author><authorEmail>nossr50@gmail.com</authorEmail><comment>Fix error when another plugin reads raw XP for a child skill

Child skills store no XP entry of their own, so the raw XP read
crashed on the missing entry. Zero is returned instead, matching
getSkillXpLevel. In-repo callers filter child skills first; only
plugins calling the profile API directly were affected.
</comment><date>2026-07-10 23:25:58 -0700</date><id>43a5f944b494fa9f7809b7731ebdd665e53fca9b</id><msg>Fix error when another plugin reads raw XP for a child skill</msg><path><editType>edit</editType><file>Changelog.txt</file></path><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/datatypes/player/PlayerProfile.java</file></path><path><editType>edit</editType><file>src/test/java/com/gmail/nossr50/datatypes/player/PlayerProfileTest.java</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/main/java/com/gmail/nossr50/datatypes/player/PlayerProfile.java</affectedPath><affectedPath>Changelog.txt</affectedPath><affectedPath>src/test/java/com/gmail/nossr50/datatypes/player/PlayerProfileTest.java</affectedPath><commitId>b249b4dfcb9b92074c71d06afc42042402bda0fa</commitId><timestamp>1783751213000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></author><authorEmail>nossr50@gmail.com</authorEmail><comment>Fix player data changes made during an in-flight save being lost

The dirty flag was overwritten unconditionally once the database
returned, so a change that landed while the async save was writing its
copy was marked clean and skipped by later saves until the next
unrelated change. The flag is now cleared before the copy is taken and
only restored on failure, so concurrent changes re-mark the profile
dirty and the next save picks them up. Answers the old TODO about
synchronizing the copy: value races during the copy self-heal through
the dirty flag, so no lock is needed.
</comment><date>2026-07-10 23:26:53 -0700</date><id>b249b4dfcb9b92074c71d06afc42042402bda0fa</id><msg>Fix player data changes made during an in-flight save being lost</msg><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/datatypes/player/PlayerProfile.java</file></path><path><editType>edit</editType><file>src/test/java/com/gmail/nossr50/datatypes/player/PlayerProfileTest.java</file></path><path><editType>edit</editType><file>Changelog.txt</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/main/java/com/gmail/nossr50/datatypes/player/PlayerProfile.java</affectedPath><affectedPath>src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java</affectedPath><affectedPath>Changelog.txt</affectedPath><commitId>ce2ae27ae198588b42ef5f42c5e9fd3b3d96fca4</commitId><timestamp>1783751249000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></author><authorEmail>nossr50@gmail.com</authorEmail><comment>Deprecate the misspelled PlayerProfile Chimaera Wing cooldown getter

getChimaerWingDATS is missing a letter; getChimaeraWingDATS replaces
it and the old name delegates until removal.
</comment><date>2026-07-10 23:27:29 -0700</date><id>ce2ae27ae198588b42ef5f42c5e9fd3b3d96fca4</id><msg>Deprecate the misspelled PlayerProfile Chimaera Wing cooldown getter</msg><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java</file></path><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/datatypes/player/PlayerProfile.java</file></path><path><editType>edit</editType><file>Changelog.txt</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/test/java/com/gmail/nossr50/util/skills/SkillToolsTest.java</affectedPath><affectedPath>Changelog.txt</affectedPath><affectedPath>src/main/java/com/gmail/nossr50/util/skills/SkillTools.java</affectedPath><commitId>2b85a6fc726b00f53c0814fa289cdb0707cba6ef</commitId><timestamp>1783752481000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></author><authorEmail>nossr50@gmail.com</authorEmail><comment>Stop console spam when other plugins check skill names through the API

Unmatched skill name lookups logged an 'Invalid mcMMO skill' warning on
every call, so plugins validating names through ExperienceAPI flooded the
console. The message is now debug output shown only with Verbose_Logging.
</comment><date>2026-07-10 23:48:01 -0700</date><id>2b85a6fc726b00f53c0814fa289cdb0707cba6ef</id><msg>Stop console spam when other plugins check skill names through the API</msg><path><editType>edit</editType><file>Changelog.txt</file></path><path><editType>edit</editType><file>src/test/java/com/gmail/nossr50/util/skills/SkillToolsTest.java</file></path><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/util/skills/SkillTools.java</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/main/java/com/gmail/nossr50/commands/experience/ExperienceCommand.java</affectedPath><affectedPath>Changelog.txt</affectedPath><affectedPath>src/test/java/com/gmail/nossr50/commands/experience/AddxpCommandTest.java</affectedPath><commitId>bb6a395fc67638db93cffa4b056270eaf7cbcda9</commitId><timestamp>1783753760000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></author><authorEmail>nossr50@gmail.com</authorEmail><comment>Make the -s flag on XP commands silence the sender confirmation too

/addxp, /addlevels, and /mmoedit echoed 'has been modified' back to the
sender even with -s, flooding the log for plugins that award XP by
dispatching these commands from console.
</comment><date>2026-07-11 00:09:20 -0700</date><id>bb6a395fc67638db93cffa4b056270eaf7cbcda9</id><msg>Make the -s flag on XP commands silence the sender confirmation too</msg><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/commands/experience/ExperienceCommand.java</file></path><path><editType>add</editType><file>src/test/java/com/gmail/nossr50/commands/experience/AddxpCommandTest.java</file></path><path><editType>edit</editType><file>Changelog.txt</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/test/java/com/gmail/nossr50/datatypes/player/McMMOPlayerAddXpAndLevelsTest.java</affectedPath><affectedPath>src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java</affectedPath><affectedPath>src/main/java/com/gmail/nossr50/util/EventUtils.java</affectedPath><affectedPath>Changelog.txt</affectedPath><commitId>df4cdce38ca8641eb3add62c2ab973f9ad0e253a</commitId><timestamp>1783753789000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName></author><authorEmail>nossr50@gmail.com</authorEmail><comment>Route McMMOPlayer addXp and addLevels through level up processing

Both wrote raw values into the profile, so plugins using them left
skills over their XP threshold with no level ups, events, or XP bar
updates. addXp now runs the normal XP gain path with the amount
unmodified, and addLevels fires the level change events like the
addlevels command. Internal callers that revert cancelled events or
apply vampirism gains keep raw writes via the profile.
</comment><date>2026-07-11 00:09:49 -0700</date><id>df4cdce38ca8641eb3add62c2ab973f9ad0e253a</id><msg>Route McMMOPlayer addXp and addLevels through level up processing</msg><path><editType>edit</editType><file>Changelog.txt</file></path><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java</file></path><path><editType>add</editType><file>src/test/java/com/gmail/nossr50/datatypes/player/McMMOPlayerAddXpAndLevelsTest.java</file></path><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/util/EventUtils.java</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://popicraft.net/jenkins/user/nossr50</absoluteUrl><fullName>nossr50</fullName><id>nossr50</id></culprit></freeStyleBuild>