Skip to content

Release 3.23.6

Choose a tag to compare

@tastybento tastybento released this 07 Nov 23:45
· 4 commits to master since this release
d6dd19d

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 and BentoBoxReadyEvent were 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 worldSize chart 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

  1. As always, take backups just in case. (Make a copy of everything!)
  2. Stop the server.
  3. Replace the BentoBox jar with this one.
  4. Restart the server.
  5. 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 at plugins/BentoBox/database/CoreWorldSettings/<GameMode>.json; on SQL/Mongo it is the WorldSettings table. It is created on first use and seeded with IRON_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

[PR #3109] [PR #3110]

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

[7e7ea0888] Fixes #3114

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

[1ab00f663]

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

[7f52c471d]

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_EFFECT for 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 IslandBaseEvent and PlayerBaseEvent constructors are now protected. These are abstract classes, so addon subclasses are unaffected.
  • The zh-TW locale is synced with en-US. [PR #3108]
  • A scheduled bStats snapshot workflow records the custom charts every six hours on the bstats-data branch, since bStats keeps no history for pie and bar charts. [PR #3110]

What's Changed

Thanks to @keimuji for the detailed report on #3114 and @Vinrey123 for #3111.

Full Changelog: 3.23.5...3.23.6