Release 3.23.0 - #3084
Merged
Merged
Release 3.23.0#3084
Conversation
Server staff asked to promote and demote team members without logging in. /admin setrank <player> <rank> [island owner] already existed and ran from the console, but it was rough enough to be unreliable for that: - Only the rank's translated display name matched, so the rank had to be typed as it appears in the caller's locale. Now the keyword (member, sub-owner, trusted, coop, or any addon rank without the ranks. prefix), the translated name, or the numeric value all work, and the error lists the valid choices. - Owner, mod and admin ranks were accepted. Setting owner rank in the member map without moving the owner field left the island inconsistent. These are now refused and the admin is pointed at setowner. - With no island named, the target's primary island was used even when they owned it, so the command could demote an owner into a member. Now the island the target is a member of (but does not own) is used, and if they are on several team islands the centres are listed so one can be chosen. - The island can now be named by x,y,z centre as well as by owner, which is needed when an owner has concurrent islands. - Tab completion was off by one (players offered for the rank slot, ranks for the owner slot) and now completes the correct argument. - The affected player is told their rank changed, and a no-op change is reported instead of silently succeeding. Locale keys added under commands.admin.setrank in every bundled locale: cannot-set-owner, already-rank, admin-changed-rank; unknown-rank gained [rank] and [ranks] placeholders. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0146MpZW6KGnu5E4qkcR5NXV
…sole Make admin setrank a full console team-rank tool
Players.getMetaData() tested whether the backing map was immutable by writing to it on every read. The map was a plain HashMap, so any concurrent access from another thread could corrupt it, after which keySet().iterator().next() threw NoSuchElementException on every read. Addons like Border read player metadata on every PlayerMoveEvent, so a corrupted map spams the console until restart. Players and Island now copy metadata into a ConcurrentHashMap once, on first access or on setMetaData, and never mutate on read. Immutable maps from deserialization are handled by the same copy. The Island copy constructor uses the same helper. putMetaData(key, null) now removes the key because a concurrent map cannot hold null values. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
maven.devs.beer, repo.oraxen.com and repo.nexomc.com were declared as unscoped repositories, so Gradle queried them for every artifact in order. When maven.devs.beer returned HTTP 522, resolution aborted for Level, Nexo and Oraxen before their real repositories were reached, failing CI on PR #3082 for artifacts that host does not serve. Move the three repos into exclusiveContent blocks, matching the existing pattern for Dynmap, MomiRealms, FancyInnovations, Pyr and Clojars. Nexo's repo also hosts its team.unnamed transitives, so that group is included in the Nexo filter. With the host still down, a --refresh-dependencies resolution now fails only for dev.lone:api-itemsadder. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
ItemsAdder now publishes its API to Maven Central as beer.devs:itemsadder-api, per the author's dependency snippet page (https://maven-snippets.lonedev.workers.dev/?pkg=beer.devs%3Aitemsadder-api). The API package is unchanged (dev.lone.itemsadder.api), so only the coordinates change. Move to the latest stable release, 4.0.17, and drop the maven.devs.beer repository, which has been returning HTTP 522 and was the last thing blocking CI. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Resolve ItemsAdder from Maven Central and scope Oraxen and Nexo repos
Make player and island metadata maps thread-safe
SonarCloud flagged the toConcurrentMap helper and getMetaData body added in #3082 as a duplicated block across Players and Island. Move the helper to a static method on MetaDataAble so there is one copy, and have both implementations call it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Share the metadata map-copy helper between Players and Island
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Release 3.23.0
/[admin] setrankis now a reliable console tool: rank by keyword, translated name or number; correct island selection for team members; island byx,y,z; fixed tab completion. New locale keys undercommands.admin.setrankin all 24 locales. (Make admin setrank a full console team-rank tool #3079)NoSuchElementExceptionspam on everyPlayerMoveEventafter a corrupted map. (Make player and island metadata maps thread-safe #3082)maven.devs.beerremoved; Oraxen and Nexo repos scoped. (Resolve ItemsAdder from Maven Central and scope Oraxen and Nexo repos #3083)Draft release notes: see the 3.23.0 draft release.
🤖 Generated with Claude Code