promotional bannermobile promotional banner

BentoBox

SkyBlock, OneBlock, AcidIsland, and more — all in one plugin
Back to Files

BentoBox-3.22.4.jar

File nameBentoBox-3.22.4.jar
Uploader
tastybentotastybento
Uploaded
Sep 6, 2026
Downloads
4
Size
2.5 MB
File ID
8826341
Type
R
Release
Supported game versions
  • 26.2
  • 26.1.2
  • 26.1.1
  • 26.1
  • 1.21.11
  • 1.21.10
  • 1.21.9
  • 1.21.8
  • 1.21.7
  • 1.21.6
  • 1.21.5

What's new

This is a bug fix and performance release. It fixes a crash in the region purge, a tab-completion bug introduced by Brigadier registration, and makes player heads resolve through the server instead of the web. /[admin] info can now show every island a player has.

Release Highlights

  • 🐛 Purge crash fixed/[admin] purge <days> confirm no longer fails with IslandEvent may only be triggered synchronously. Island events are now fired on the main thread after the async file deletion.
  • 🐛 Sub-command labels no longer change — typing /ob h no longer renamed the shared go command to h for every player in tab completion and help.
  • 🔡 /[admin] info <player> shows every island — all of a player's islands in the world are listed, and a new optional [island name] argument picks one. The info block now prints the island name.
  • ⚙️ Performance improvements — fewer allocations in bounds checks, map sweeps and blueprint copies, a shared GSON instance, and a new optional cap on per-island history entries.
  • 🐛 Player heads use server profiles — heads are resolved from the server's own profile cache first, so panels such as TopBlock show real heads instead of falling back to Steve after Mojang rate limits.

Compatibility

✔️ Paper Minecraft 1.21.x – 1.21.11 (26.2) ✔️ 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!

⚙️ New config option: island.history.max-entries has been added to config.yml. The default is 0, meaning unlimited, so existing servers keep their current behaviour. Set a positive number to cap how many history entries each island keeps; the oldest entries are dropped first. Note that capping can undercount the historical-members placeholder once old JOINED entries are dropped.

🔡 Locale note: commands.admin.info.parameters now reads <player> [island name] and a new key commands.admin.info.island-name was added. All 24 bundled locales are updated. If you maintain a custom locale file, add the new key or the admin info block will show the raw key for the island name line.

Legend

  • 🔡 locale files may need to be regenerated or updated.
  • ⚙️ config options have been removed, renamed, or added.

New Features

🔡 Show Every Island in /[admin] info <player>

[PR #3074]

/[admin] info <player> used to report only the player's primary island. It now prints the admin info block for every island the player has in the world, owned and team islands alike. A new optional [island name] argument shows a single island, using the same forgiving name matching as /[player] go (exact, then case- and space-insensitive, then unique prefix), and multi-word names work without quotes. An unknown name lists the valid ones. Tab completion offers the target player's island and home names, and each info block now prints the island name so multiple blocks can be told apart. IslandGoCommand.resolveName is now public so addons can reuse it.

⚙️ Island History Cap

[PR #3073]

Long-lived islands accumulate history (log) entries without bound in memory and in the database. The new island.history.max-entries setting caps the number of entries kept per island, dropping the oldest first. It defaults to unlimited.


Bug Fixes

Purge Crashed With "IslandEvent may only be triggered synchronously"

[PR #3077]

The age-based purge deleted region files on an async task and then fired the DELETED and PURGED island events from that same thread. Paper rejects synchronous events fired off the main thread, so the first fully reaped island threw, the command reported failure, and the island's database row was left behind after its region files were already gone. The service now performs the disk work asynchronously and hops the event firing and cache/database removal onto the main thread, waiting for it to finish so the result and summary log are accurate. The daily housekeeping deleted sweep was never affected because it defers its database work to shutdown.

Sub-Commands Renamed to the Alias a Player Typed

[PR #3076] Fixes #3075

When a player typed an alias such as /ob h, the shared sub-command object had its label changed to h, so tab completion and help showed /ob h for everyone until someone typed a different alias. Brigadier registration in 3.22.0 made this far more visible because suggestions call tab completion on every keystroke. The redundant label mutation is removed; the typed alias is still passed to the command as before, and the home / h aliases are unchanged.

Player Heads Fall Back to Steve After Rate Limits

[PR #3070]

Heads requested by player name were always resolved through mc-heads or the Mojang API, even for players the server already knew, and those lookups get rate limited. Online players now get their head synchronously from their live profile, and everyone else is resolved through Paper's own profile cache first. The mc-heads and Mojang paths remain as fallbacks. No API changes; addons do not need to recompile.


Other Improvements

  • Performance: bounds checks no longer allocate a Vector (7x faster), map sweeps use iterators instead of streams (3x faster, zero allocation), and a shared GSON instance replaces per-call construction. [PR #3073]
  • Resolved open SonarCloud and deeper-SAST reliability findings across the codebase.

What's Changed

Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.22.3...3.22.4

This mod has no additional files