Tags
Creators
Details
3.23.0
Compatibility
Changes
This release makes /[admin] setrank a reliable console tool for promoting and demoting team members, fixes a metadata bug that could flood the console with NoSuchElementException on every player move, and moves the build off a Maven host that had gone offline.
Release Highlights
- š”
/[admin] setrankworks from the console ā ranks can be given by keyword (member,sub-owner,trusted,coop), translated name, or number; the right island is picked when the target owns one island and is a member of another; and an island can be named by itsx,y,zcentre. - š Metadata console spam fixed ā player and island metadata maps are now thread-safe. Previously a corrupted map threw
NoSuchElementExceptionon everyPlayerMoveEvent(seen via Border's move listener) until the server was restarted. - š§ Build no longer depends on
maven.devs.beerā the ItemsAdder API now comes from Maven Central, and the Oraxen and Nexo repositories are scoped so an outage at one vendor host cannot block unrelated artifacts.
Compatibility
āļø Paper Minecraft 1.21.x ā 1.21.11 (26.2) āļø Java 25+
Upgrading
- As always, take backups just in case. (Make a copy of everything!)
- Stop the server.
- Replace the BentoBox jar with this one.
- Restart the server.
- You should be good to go!
š” Locale note:
commands.admin.setrankgained three new keys (cannot-set-owner,already-rank,admin-changed-rank),unknown-ranknow takes[rank]and[ranks]placeholders, andparametersanddescriptionwere reworded. All 24 bundled locales are updated. If you maintain a custom locale file, add the new keys or those messages will show the raw key.
š”
setrankbehaviour change: with no island argument, the command now acts on the island the target is a member of rather than their primary island, so it can no longer accidentally demote an owner. Setting theownerrank is refused with a pointer tosetowner. If the target is on several team islands, the island centres are listed so one can be chosen withx,y,z.
Legend
- š” locale files may need to be regenerated or updated.
New Features
š” Console-Ready /[admin] setrank
[PR #3079]
The syntax is now /[admin] setrank <player> <rank> [island owner | x,y,z] and stays backwards compatible. The rank argument previously matched only the translated display name; it now accepts the rank keyword (any addon rank reference without the ranks. prefix), the translated name, or the numeric value, case-insensitively, and an unknown rank lists the valid choices. Setting owner, mod or admin ranks through the member map is refused because it left the island inconsistent. Island selection without an argument uses the island the target is a member of but does not own, and an island can be named by its centre coordinates when an owner has several islands. Tab completion was off by one 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.
Bug Fixes
Metadata Maps Are Thread-Safe
[PR #3082]
Players.getMetaData() probed whether its map was immutable by writing to it on every read. The backing map was a plain HashMap, so any concurrent touch could corrupt it, after which every read threw NoSuchElementException. Addons such as Border read player metadata on every PlayerMoveEvent, so a corrupted map spammed the console until restart. Player and island metadata are now copied once into a ConcurrentHashMap and never mutated on read. setMetaData copies the caller's map, so immutable maps are accepted and the caller's map is never changed. putMetaData(key, null) now removes the key.
Other Improvements
- ItemsAdder API is resolved from Maven Central as
beer.devs:itemsadder-api(4.0.17); themaven.devs.beerrepository is removed. Oraxen and Nexo repositories are scoped withexclusiveContentto the groups they host. [PR #3083]
What's Changed
- š” Make admin setrank a full console team-rank tool by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/3079
- Make player and island metadata maps thread-safe by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/3082
- Resolve ItemsAdder from Maven Central and scope Oraxen and Nexo repos by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/3083
- Share the metadata map-copy helper between Players and Island by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/3085
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.22.4...3.23.0
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:aBVLHiAW:KVjeblUE"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:aBVLHiAW:KVjeblUE"
}

