Repository navigation
Release 3.23.6
Release Highlights
- π‘ Always-allowed entity types β a new world setting,
ALLOW_MOBS, lists entity types that spawn even when animal or monster spawning is turned off. Iron Golems are on the list by default, so village iron farms keep working on islands that have "Animal natural spawn" switched off. The list is stored by BentoBox itself, so it works on every game mode release today. - πΊ "All blueprints loaded" could fail to fire β with several game modes loading blueprints at once, the loading tracker could lose a completion and BentoBox never reached its ready state: addon
allLoaded()hooks, ready-gated commands andBentoBoxReadyEventwere never triggered. Fixed, along with four related main-thread/async races. - π Better command-failure telemetry β bStats now reports why commands fail (the locale key the player saw) and counts servers rather than raw failures, so one busy server no longer dominates the chart. A new
worldSizechart reports island world size on disk as a bracket. - π§Ή SonarCloud at zero β about 670 code-quality findings fixed and the remaining 186 formally accepted with reasons, so new issues now stand out on their own.
Compatibility
βοΈ Paper Minecraft 1.21.5 β 26.3
βοΈ 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: new keys under
protection.flags.ALLOW_MOBS(name,description,always,flags) were added to every bundled locale. If you maintain custom locale files, add them or the panel falls back to the key names.
πΊ New data store: the allow list is saved per game mode by BentoBox, not in the game mode's
config.yml. On the flat-file database it lives atplugins/BentoBox/database/CoreWorldSettings/<GameMode>.json; on SQL/Mongo it is theWorldSettingstable. It is created on first use and seeded withIRON_GOLEM.
πΊ Behaviour change on iron farms: on servers where admins or players had turned off animal spawning to stop golems, golems will now spawn again. Remove Iron Golem from the allow list in the admin settings panel ("Always-allowed entity types") to restore the old behaviour.
There are no config.yml changes in this release.
Legend
- π‘ locale files may need to be regenerated or updated.
- βοΈ config options have been removed, renamed, or added.
- πΊ special attention needed.
New Features
π‘ Always-Allowed Entity Types (ALLOW_MOBS)
[PR #3112] [PR #3113] Fixes #3111, part of #1133
Village iron farms spawn golems with the VILLAGE_DEFENSE reason, which BentoBox treats as a natural animal spawn. Turning off "Animal natural spawn" on an island, or server-wide, therefore silently stopped iron farms while player-built golems kept working. The new ALLOW_MOBS world setting is an allow list that mirrors the existing block-mobs list: entity types on it spawn regardless of the animal and monster spawning flags, at world and island level. The block list still wins if a type is on both.
The setting appears in each game mode's admin settings panel as "Always-allowed entity types" (iron ingot icon) and opens the same entity grid as the mob limit setting. Permission: <gamemode>.admin.settings.ALLOW_MOBS. Game modes may override the default seed through GameModeAddon#getDefaultAllowedMobs(), but no game mode update is required. Raids still key off MONSTER_NATURAL_SPAWN, so allow-listing pillagers lets patrols spawn without starting raids.
π bStats: Command Failure Reasons and World Size
The command-failure telemetry introduced in 3.22.0 lumped most failures under cannot_execute, double-counted the bare /island command, and let one server's spam define the chart. User now remembers the locale key of the last message it sent, and a failed command reports that key as the reason, for example general.errors.insufficient-rank. Only values shaped like a locale key are accepted, so free text never leaves the server. The failing-command charts now send one count per key per server.
A new worldSize pie reports the total on-disk size of all island worlds as a bracket (0-1 GB up to 1 TB+). Folders are measured on an async task every six hours; only the bracket is sent, never a path. This is the measurement behind the island storage discussion in #2346.
Bug Fixes
πΊ Blueprint Loading Completion Intermittently Never Fired
Each game mode loads its blueprints on its own async thread and removes itself from a shared set when done, while the main thread polls that set every tick. The set was a plain HashSet, so concurrent removals could be lost and the "All blueprints loaded." phase never ran. On a server with seven game modes this happened about one start in several. The tracker is now a concurrent set, and a game mode whose loader throws no longer stalls the phase for every other addon.
Main-Thread / Async Collection Races
A sweep of every async entry point after #3114 found four more shared collections with the same shape: island member maps edited during clearRank, the addon and game mode catalogs refilled on the GitHub download thread while panels iterated them, the head-requester sets in HeadGetter, and the isLoaded / shutdown flags polled from async threads. All now use thread-safe collections or atomic snapshots. WebManager.getAddonsCatalog() and getGamemodesCatalog() return immutable snapshots.
First-Run "File not found" From Core World Settings
The first load of the new allow list logged a spurious Could not load file ... File not found on flat-file databases. The record is now checked for existence before loading.
Other Improvements
- SonarCloud issue count reduced from 848 to 0. Five cleanup commits fixed around 670 findings, including the move to the non-deprecated Paper 26.3 event constructors in tests,
TeleportCause.CONSUMABLE_EFFECTfor chorus fruit teleports, and removal of unused code. The remaining 186 findings were accepted with a per-rule justification where the rule conflicts with Bukkit conventions or API compatibility. [4676a08b1 β¦ faffce289] - The
IslandBaseEventandPlayerBaseEventconstructors are nowprotected. These are abstract classes, so addon subclasses are unaffected. - The zh-TW locale is synced with en-US. [PR #3108]
- A scheduled
bStats snapshotworkflow records the custom charts every six hours on thebstats-databranch, since bStats keeps no history for pie and bar charts. [PR #3110]
What's Changed
- π‘ Sync zh-TW locale with en-US by @tastybento in #3108
- Add worldSize bStats chart (island world size on disk) by @tastybento in #3109
- bStats: report why commands fail, and count servers rather than failures by @tastybento in #3110
- π‘ Add ALLOW_MOBS: world-level list of mobs that always spawn by @tastybento in #3112
- πΊ Store the allow-mobs list in BentoBox, not in game mode configs by @tastybento in #3113
- πΊ Make the blueprint loading tracker thread-safe (#3114) by @tastybento in 7e7ea0888
- Fix remaining main-thread/async collection races by @tastybento in 1ab00f663
- Sonar cleanup 1β5: drive the open SonarCloud issue count to zero by @tastybento in 91c1c6e...faffce2
Thanks to @keimuji for the detailed report on #3114 and @Vinrey123 for #3111.
Full Changelog: 3.23.5...3.23.6