Skip to content

Changes

Started 4 days 8 hr ago
Took 53 sec on Builder

Summary

  1. Fix Salvage yielding nothing for damaged items with low max quantity (commit: fc4fcdd) (details)
  2. Fix wrong unlock levels in Leaf Blower and Catalysis guide text (commit: ea30967) (details)
  3. Fix skill scoreboards not updating for child skills (commit: b14183f) (details)
  4. Fix power level tags dropping updates and leftover objectives (commit: df1570d) (details)
  5. Fix localized skill commands being blocked by command whitelist plugins (commit: 5a6692a) (details)
  6. Fix salvage and repair confirmations acting on the wrong item (commit: a6079cf) (details)
  7. Fix stats scoreboard power level counting permission-hidden skills (commit: 29a65b9) (details)
  8. Fix database purge never removing inactive users (commit: d0ad3ad) (details)
  9. Add regression tests for previously fixed defects (commit: d171e20) (details)
  10. Update changelog (commit: 9044066) (details)
  11. Add config option to limit Blast Mining remote detonation distance (commit: 9e29417) (details)
  12. Make /inspect on offline players respect inspect permissions (commit: 13e1dcb) (details)
  13. Fix ActionBarNotifications.SubSkillUnlocked settings being ignored (commit: 8dc2c7e) (details)
  14. Add /mclevelupsound to toggle the level-up sound per player (commit: c3018f1) (details)
  15. Allow decimal values in /xprate (commit: 31902cc) (details)
  16. Show the current XP rate with /xprate (commit: 35adf11) (details)
  17. Update changelog (commit: 93b0055) (details)
  18. Fix /xprate rate display using a shared DecimalFormat across threads (commit: bc023b1) (details)
  19. Mention viewing the current rate in the /xprate command descriptions (commit: 3c6ab95) (details)
  20. Correct 2.2.055 changelog entries (commit: 9aa347b) (details)
  21. Fix power level tag re-marks being lost during a heartbeat write (commit: 295647a) (details)
  22. Fix inspect stats boards never refreshing on the watched player's level up (commit: 1f28520) (details)
  23. Fix stats scoreboard power level line vanishing for full-permission players (commit: c41387b) (details)
  24. Fix anvil confirmation item-use denial never applying to right-click air (commit: 95babed) (details)
  25. Fix repair confirmations re-prompting after every partial repair (commit: 53b16a5) (details)
  26. Fix database purge deleting flatfile users with unreadable last login (commit: 3885c1c) (details)
  27. Fix powerless user purge deleting comments from the flatfile database (commit: 8e2a45d) (details)
  28. Update changelog (commit: 9fe5731) (details)
Commit fc4fcddd3cd0d6961a5a80ca852b4827a184a1a1 by nossr50
Fix Salvage yielding nothing for damaged items with low max quantity

Salvage.calculateSalvageableAmount floored the salvageable amount to
zero for any damaged item when the configured maximum quantity was 1,
so such items could only be salvaged at full durability. Damaged items
now salvage at least one material unless fully broken.

Fixes #4760
(commit: fc4fcdd)
The file was modifiedsrc/main/java/com/gmail/nossr50/skills/salvage/Salvage.java (diff)
The file was addedsrc/test/java/com/gmail/nossr50/skills/salvage/SalvageTest.java
Commit ea309678096dbee0c83c0aa3539dd65743544a95 by nossr50
Fix wrong unlock levels in Leaf Blower and Catalysis guide text

Also removes the unused Leaf Blower Rank_2 and Rank_3 entries from
skillranks.yml; the subskill only defines a single rank.

Fixes #4847
(commit: ea30967)
The file was modifiedsrc/main/resources/skillranks.yml (diff)
The file was modifiedsrc/main/resources/locale/locale_en_US.properties (diff)
Commit b14183fea45e2ad3c2fec0a770a1dc586c662855 by nossr50
Fix skill scoreboards not updating for child skills

XP and level events only fire for parent skills, so a kept Salvage or
Smelting sidebar never matched the event skill and never refreshed
until the command was run again. Boards displaying a child skill now
refresh when one of its parent skills changes.

Fixes #5184
(commit: b14183f)
The file was addedsrc/test/java/com/gmail/nossr50/util/scoreboards/ScoreboardManagerTest.java
The file was modifiedsrc/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java (diff)
Commit df1570de49b72e7b700f717f608e4190f2867b86 by nossr50
Fix power level tags dropping updates and leftover objectives

The power level heartbeat cleared all pending refreshes even when a
player's profile had not loaded yet, leaving their below-name tag at 0
until the next level-up. Pending names now stay queued until they can
be resolved. Also removes a persisted mcmmo_pwrlvl objective left in
world scoreboard data by older versions when the packet or noop
backend is active, which otherwise kept rendering stale tags.

Fixes #5003
(commit: df1570d)
The file was modifiedsrc/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java (diff)
The file was modifiedsrc/main/java/com/gmail/nossr50/util/scoreboards/backend/BukkitScoreboardBackend.java (diff)
The file was addedsrc/test/java/com/gmail/nossr50/util/scoreboards/backend/BukkitScoreboardBackendTest.java
The file was addedsrc/test/java/com/gmail/nossr50/util/scoreboards/PowerLevelTagUpdaterTest.java
The file was addedsrc/main/java/com/gmail/nossr50/util/scoreboards/PowerLevelTagUpdater.java
Commit 5a6692a026fa3e3b8e4dd1152ed95dda6ad1d5a1 by nossr50
Fix localized skill commands being blocked by command whitelist plugins

The locale alias rewrite ran at LOWEST priority, tying with command
whitelist plugins listening on the same event, so which name they saw
depended on plugin load order. The rewrite now runs at LOW priority and
ignores cancelled events, letting whitelist plugins deterministically
see the command exactly as the player typed it.

Fixes #5250
(commit: 5a6692a)
The file was addedsrc/test/java/com/gmail/nossr50/listeners/PlayerListenerCommandAliasTest.java
The file was modifiedsrc/main/java/com/gmail/nossr50/listeners/PlayerListener.java (diff)
Commit a6079cf951b37081a91326c47442e9365211b0b6 by nossr50
Fix salvage and repair confirmations acting on the wrong item

The confirmation window was time based only, so armor swapped into the
hand by a mis-click could be salvaged with no new prompt, including
worn armor via the vanilla quick-swap. Confirmations are now bound to
the prompted item and re-prompt when the held item changes. Also denies
item use while a confirmation is pending, closing the path where the
follow-up use-item interact event equipped the armor instead when the
server's re-raytrace missed the anvil.

Fixes #5268
Fixes #4896
(commit: a6079cf)
The file was modifiedsrc/main/java/com/gmail/nossr50/skills/repair/RepairManager.java (diff)
The file was modifiedsrc/test/java/com/gmail/nossr50/skills/repair/RepairManagerTest.java (diff)
The file was modifiedsrc/main/java/com/gmail/nossr50/listeners/PlayerListener.java (diff)
The file was addedsrc/test/java/com/gmail/nossr50/listeners/PlayerListenerSalvageInteractTest.java
The file was modifiedsrc/test/java/com/gmail/nossr50/skills/salvage/SalvageManagerTest.java (diff)
The file was modifiedsrc/main/java/com/gmail/nossr50/skills/salvage/SalvageManager.java (diff)
Commit 29a65b9fb7b201d0caa112dd3846e5e8ea545d6e by nossr50
Fix stats scoreboard power level counting permission-hidden skills

The stats sidebar summed every skill into its power level line while
hiding rows for skills the player lacked permission for, disagreeing
with chat stats and the power level cap, which both use the
permission-aware total.

Fixes #3790
(commit: 29a65b9)
The file was addedsrc/test/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapperStatsPowerLevelTest.java
The file was modifiedsrc/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java (diff)
Commit d0ad3ad67515426da787c1fdc4bde3114e859813 by nossr50
Fix database purge never removing inactive users

The SQL purge compared a seconds-based last login delta against a
milliseconds cutoff, requiring roughly 83 years of inactivity per
configured month. The flatfile purge had an inverted check that only
removed users with an unknown last login while keeping genuinely
inactive ones.

Fixes #4251
(commit: d0ad3ad)
The file was modifiedsrc/main/java/com/gmail/nossr50/database/SQLDatabaseManager.java (diff)
The file was modifiedsrc/test/java/com/gmail/nossr50/database/SQLDatabaseManagerTest.java (diff)
The file was modifiedsrc/test/java/com/gmail/nossr50/database/FlatFileDatabaseManagerTest.java (diff)
The file was modifiedsrc/main/java/com/gmail/nossr50/database/FlatFileDatabaseManager.java (diff)
Commit d171e20b7c0af2689aea34e3e164d532dd9f790c by nossr50
Add regression tests for previously fixed defects

Covers the UserManager shutdown null guard (#4131), legacy color codes
leaking into level-up notification components (#5125), the Green Thumb
probability guarantee at max bonus level (#4365), and dynamic subskill
chance caps for the levels reported against Dodge (#5210).
(commit: d171e20)
The file was modifiedsrc/test/java/com/gmail/nossr50/util/random/ProbabilityUtilTest.java (diff)
The file was addedsrc/test/java/com/gmail/nossr50/util/player/UserManagerTest.java
The file was modifiedsrc/test/java/com/gmail/nossr50/util/text/TextComponentFactoryTest.java (diff)
The file was modifiedChangelog.txt (diff)
Commit 9e29417042a8d8bf9798134830342bcaaaf3ded8 by nossr50
Add config option to limit Blast Mining remote detonation distance

Server admins can now set Skills.Mining.BlastMining.RemoteDetonationDistance
in advanced.yml to control how far away players can remotely detonate TNT.
Defaults to 100, matching the previous hardcoded limit, and is added to
existing advanced.yml files automatically on startup. Values below 1 fail
config validation.

Fixes #4330
(commit: 9e29417)
The file was modifiedsrc/main/java/com/gmail/nossr50/skills/mining/MiningManager.java (diff)
The file was modifiedsrc/main/resources/advanced.yml (diff)
The file was addedsrc/test/java/com/gmail/nossr50/skills/mining/MiningManagerTest.java
The file was modifiedsrc/main/java/com/gmail/nossr50/config/AdvancedConfig.java (diff)
Commit 13e1dcb9d6eca7b97f4c64f4a436740473a19d11 by nossr50
Make /inspect on offline players respect inspect permissions

Inspecting an offline player previously skipped the permission checks
that gate inspecting distant online players. /inspect now requires
mcmmo.commands.inspect.far (default: op) to view players who are
offline, and vanished players hidden from the sender are gated the same
way so they stay indistinguishable from offline players. Grant
mcmmo.commands.inspect.far to any ranks that should keep inspecting
offline players.

Fixes #4399
(commit: 13e1dcb)
The file was addedsrc/test/java/com/gmail/nossr50/commands/player/InspectCommandTest.java
The file was modifiedsrc/test/java/com/gmail/nossr50/MMOTestEnvironment.java (diff)
The file was modifiedsrc/main/java/com/gmail/nossr50/commands/player/InspectCommand.java (diff)
The file was modifiedsrc/main/resources/plugin.yml (diff)
Commit 8dc2c7e4a87710cbbbc307d03d54062a3a17e27b by nossr50
Fix ActionBarNotifications.SubSkillUnlocked settings being ignored

Skill rank unlock messages were always sent to chat, ignoring the
Feedback.ActionBarNotifications.SubSkillUnlocked settings in
advanced.yml. Unlock notifications now use the same routing as other
notification types: setting
Feedback.ActionBarNotifications.SubSkillUnlocked.Enabled to true sends
them to the action bar, and
Feedback.ActionBarNotifications.SubSkillUnlocked.SendCopyOfMessageToChat
controls whether the chat still receives a copy. The shipped default for
Enabled is now false so unlock messages stay in chat out of the box.
These notifications also fire McMMOPlayerNotificationEvent, matching the
other notification types.

Fixes #4091
(commit: 8dc2c7e)
The file was addedsrc/test/java/com/gmail/nossr50/util/player/NotificationManagerTest.java
The file was modifiedsrc/main/java/com/gmail/nossr50/util/player/NotificationManager.java (diff)
The file was modifiedsrc/main/resources/advanced.yml (diff)
Commit c3018f1be5b8caa23c3d693685b3854433b05d1b by nossr50
Add /mclevelupsound to toggle the level-up sound per player

Players can now silence the mcMMO level-up sound for themselves with
/mclevelupsound (alias /levelupsound) without touching notifications
or the server-wide General.LevelUp_Sounds config setting. The toggle
also mutes the party level-up sound for that player.

Permission node: mcmmo.commands.mclevelupsound (granted by
mcmmo.commands.defaults). Like /mcnotify, the preference is
per-session and resets to on at login.

Fixes #5307
(commit: c3018f1)
The file was modifiedsrc/main/java/com/gmail/nossr50/util/commands/CommandRegistrationManager.java (diff)
The file was modifiedsrc/main/java/com/gmail/nossr50/datatypes/party/Party.java (diff)
The file was modifiedsrc/main/resources/locale/locale_en_US.properties (diff)
The file was modifiedsrc/main/java/com/gmail/nossr50/party/PartyManager.java (diff)
The file was addedsrc/main/java/com/gmail/nossr50/commands/McLevelUpSoundCommand.java
The file was modifiedsrc/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java (diff)
The file was addedsrc/test/java/com/gmail/nossr50/datatypes/player/McMMOPlayerLevelUpSoundTest.java
The file was modifiedsrc/main/resources/plugin.yml (diff)
Commit 31902ccd1e5be8bbe00cefb3e6b8654fcbb9601a by nossr50
Allow decimal values in /xprate

The XP rate argument now accepts positive decimal numbers such as 1.5
instead of integers only. Zero, negative, and non-finite rates are
rejected, and an invalid rate no longer toggles the XP event state.
Whole-number rates still display without a trailing .0 in broadcasts
and admin notifications.

Fixes #3390
(commit: 31902cc)
The file was addedsrc/test/java/com/gmail/nossr50/commands/XprateCommandTest.java
The file was modifiedsrc/main/java/com/gmail/nossr50/commands/XprateCommand.java (diff)
The file was modifiedsrc/main/resources/locale/locale_en_US.properties (diff)
The file was modifiedsrc/main/java/com/gmail/nossr50/util/commands/CommandUtils.java (diff)
Commit 35adf1110a8f818f6ab8626128decb20864d6c80 by nossr50
Show the current XP rate with /xprate

Running /xprate with no arguments now tells the sender the current
global XP rate. Access is controlled by the new permission node
mcmmo.commands.xprate.show, granted to players by default through
mcmmo.commands.defaults since the rate is already broadcast publicly
when events start and shown on login.

Fixes #4602
(commit: 35adf11)
The file was modifiedsrc/main/java/com/gmail/nossr50/util/commands/CommandRegistrationManager.java (diff)
The file was modifiedsrc/main/java/com/gmail/nossr50/commands/XprateCommand.java (diff)
The file was modifiedsrc/main/java/com/gmail/nossr50/util/Permissions.java (diff)
The file was modifiedsrc/main/resources/locale/locale_en_US.properties (diff)
The file was modifiedsrc/main/resources/plugin.yml (diff)
The file was modifiedsrc/test/java/com/gmail/nossr50/commands/XprateCommandTest.java (diff)
The file was modifiedChangelog.txt (diff)
Commit bc023b15ef65ba7651943d2d0f0f2a1a98d2f098 by nossr50
Fix /xprate rate display using a shared DecimalFormat across threads

The formatted XP rate came from a single static DecimalFormat, which is
not thread safe. Regionized servers like Folia execute player commands
on multiple region threads, and every player can run /xprate to view
the rate, so simultaneous use could garble the broadcast or displayed
rate. The format is now created per call, matching how locale strings
already build a fresh MessageFormat per message.
(commit: bc023b1)
The file was modifiedsrc/test/java/com/gmail/nossr50/commands/XprateCommandTest.java (diff)
The file was modifiedsrc/main/java/com/gmail/nossr50/commands/XprateCommand.java (diff)
Commit 3c6ab95d01e9a0e9a1059b6a5d11c37770b953fc by nossr50
Mention viewing the current rate in the /xprate command descriptions

The /xprate description in plugin.yml and the
Commands.Description.xprate locale entry only mentioned modifying the
rate, but the command now also shows the current XP rate when run with
no arguments.
(commit: 3c6ab95)
The file was modifiedsrc/main/resources/plugin.yml (diff)
The file was modifiedsrc/main/resources/locale/locale_en_US.properties (diff)
Commit 9aa347b58d56652798be2f5c28cc429f3ff4442c by nossr50
Correct 2.2.055 changelog entries

The Salvage note used wooden tools as an example of items that salvage
into a single material, but most wooden tools return more than one
material in the default salvage.vanilla.yml; wooden shovels are the
accurate example. Also moves the skillranks.yml removal line ahead of
the locale entries to match the usual entry ordering, and documents the
updated /xprate locale entries, the rank unlock notifications now
firing McMMOPlayerNotificationEvent, and the new regression tests.
(commit: 9aa347b)
The file was modifiedChangelog.txt (diff)
Commit 295647a85e5f9252d93c04ef2833074bd9cf08a3 by nossr50
Fix power level tag re-marks being lost during a heartbeat write

The heartbeat removed a pending name after resolving and writing it, so
a level-up that re-marked the same player mid-write was erased along
with the processed entry, leaving the below-name tag stale until the
player's next level-up. Names are now removed before resolving so a
concurrent re-mark always survives to the next pass.
(commit: 295647a)
The file was modifiedsrc/main/java/com/gmail/nossr50/util/scoreboards/PowerLevelTagUpdater.java (diff)
The file was modifiedsrc/test/java/com/gmail/nossr50/util/scoreboards/PowerLevelTagUpdaterTest.java (diff)
Commit 1f28520b892cdc7273d8887ae46299094d415209 by nossr50
Fix inspect stats boards never refreshing on the watched player's level up

The otherboard scan in handleLevelUp found stats boards inspecting the
leveling player but then checked and refreshed the leveling player's
own board instead of the matching one, so an inspect board kept showing
stale levels until re-run while the watched player's board could be
redrawn spuriously. The scan now refreshes the board it matched.
(commit: 1f28520)
The file was modifiedsrc/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java (diff)
The file was modifiedsrc/test/java/com/gmail/nossr50/util/scoreboards/ScoreboardManagerTest.java (diff)
Commit c41387bb8fdd55c4804962e2d120b05df32978e8 by nossr50
Fix stats scoreboard power level line vanishing for full-permission players

The stats sidebar appended the power level line after sorting the skill
rows, so once 15 or more skill rows were shown (a player permitted all
17 skills) the line cap truncated it away entirely. The line now takes
part in the sort; the sum is never smaller than any single row, so it
ranks first and always survives truncation, matching the old
score-sorted Bukkit board where the highest score displayed on top.
(commit: c41387b)
The file was modifiedsrc/test/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapperStatsPowerLevelTest.java (diff)
The file was modifiedsrc/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java (diff)
Commit 95babed7bb3140658a4bddf813cb7ad567ef3c88 by nossr50
Fix anvil confirmation item-use denial never applying to right-click air

The deny guard ran inside onPlayerInteractLowest, which is registered
with ignoreCancelled. A PlayerInteractEvent with no clicked block
reports itself as cancelled from the moment it is constructed, so the
follow-up use-item interaction that equips armor mid-confirmation never
reached the guard. Clicking the anvil could also override the denial,
because the use-item allowance for anvil blocks is applied after it.

The guard now runs in its own handler at LOW priority without ignoring
cancelled events, so it sees right-click-air interactions and takes
precedence over the anvil use-item allowance. The listener tests now
dispatch through the interact handlers honoring their real EventHandler
settings, which is what exposed the dead path.
(commit: 95babed)
The file was modifiedsrc/test/java/com/gmail/nossr50/listeners/PlayerListenerSalvageInteractTest.java (diff)
The file was modifiedsrc/main/java/com/gmail/nossr50/listeners/PlayerListener.java (diff)
Commit 53b16a5a0e67c5cfe274df04d28a565407e4891f by nossr50
Fix repair confirmations re-prompting after every partial repair

Repair confirmations are bound to the prompted item, but a repair
changes the item's damage, so the pending confirmation stopped matching
as soon as the repair completed. Partial repairs are the norm, so
continuing to repair the same item re-prompted after every repair
instead of only when the held item actually changed.

A matching confirmation is now rebound to the item's repaired state, so
repairing the same item within the confirmation window keeps going
without new prompts. This also keeps the use-item denial covering the
just-repaired item, which unlike salvage stays in the player's hand.
(commit: 53b16a5)
The file was modifiedsrc/test/java/com/gmail/nossr50/skills/repair/RepairManagerTest.java (diff)
The file was modifiedsrc/main/java/com/gmail/nossr50/skills/repair/RepairManager.java (diff)
Commit 3885c1c07f2177a58c1c35cd2d4924ced4a93867 by nossr50
Fix database purge deleting flatfile users with unreadable last login

An unparseable last-login value was treated as a real timestamp of 0,
so the user looked ancient and was removed even though their last login
could not be determined. Unreadable values are now treated like an
unknown last login: the purge tries to recover a real timestamp from
the server's offline player data and keeps the user otherwise.
(commit: 3885c1c)
The file was modifiedsrc/test/java/com/gmail/nossr50/database/FlatFileDatabaseManagerTest.java (diff)
The file was modifiedsrc/main/java/com/gmail/nossr50/database/FlatFileDatabaseManager.java (diff)
Commit 8e2a45dced709f7f110076528ec0e92f488ce04a by nossr50
Fix powerless user purge deleting comments from the flatfile database

Purging powerless users treated every line in mcmmo.users as a user,
so the generated comment header had no skill data, counted as a
powerless user, and was removed while inflating the purged total.
Comments and empty lines are now preserved like the other file
rewrites.
(commit: 8e2a45d)
The file was modifiedsrc/test/java/com/gmail/nossr50/database/FlatFileDatabaseManagerTest.java (diff)
The file was modifiedsrc/main/java/com/gmail/nossr50/database/FlatFileDatabaseManager.java (diff)
The file was modifiedChangelog.txt (diff)