
BentoBox
SkyBlock, OneBlock, Boxed, SkyGrid, AcidIsland, CaveBlock, Poseidon, StrangerRealms - and more! These are just some of the island-based game modes that BentoBox powers. From the author of the original ASkyBlock.
New in this release
A small follow-up patch with one defensive hardening, one inventory-loss fix, and CraftEngine API compatibility.
- 🔺
Island.setRangeno longer silently corrupts island data. A misbehaving third-party addon was callingsetRangewith a value that disagreed with the game mode's configureddistance-between-islands. On the next restart, BentoBox refused to load the affected islands and panic-disabled withIsland distance mismatch, taking the whole island system offline.setRangenow refuses any value that disagrees with the configured distance (and logs the calling stack frame), unless the game mode opts out viaGameModeAddon.isEnforceEqualRanges() == false— the supported path for claim-resizing game modes like StrangerRealms. - 🐛 Team-accept no longer eats inventories under InvSwitcher. Players who accepted a team invite while standing in a non-BentoBox world (with
island.reset.on-join.inventory: true— Boxed and AOneBlock ship with this) could return to that world to find their items gone. The on-join inventory/XP/health/hunger/money resets now run after the teleport into the island world completes, so InvSwitcher (and similar plugins) save the player's real inventory under the old world before the reset fires. Fixes the case reported against AOneBlock 1.25.0 / Boxed 3.3.0 / InvSwitcher 1.17.1. - 🐛 CraftEngine 26.5+ compatibility.
CraftEngineHook.getItemStack(id)was using the pre-rewriteCustomItem<ItemStack>API and broke on recent CraftEngine releases. The hook now usesBukkitItemDefinition#buildBukkitItem()and works against CraftEngine 26.5.
Compatibility
✔️ Paper Minecraft 1.21.5 – 1.21.12 ✔️ Java 21+
Upgrading
- As always, take backups just in case.
- Stop the server.
- Replace the BentoBox jar with this one.
- Restart the server.
- You should be good to go!
🔺
Island.setRangecontract change.setRangewas previously a plain setter. It now refuses values that would put the stored range out of sync with the game mode's configured distance (which would causeIsland distance mismatchon the next load) and logs a warning naming the caller. Game modes that legitimately resize claims continue to work — they already overrideGameModeAddon.isEnforceEqualRanges()to returnfalse. If you're maintaining an addon and you see warnings likeRefusing Island.setRange(...)in the log, the warning identifies the exact caller — that's the call you need to look at.Legend
- 🔺 special attention needed.
What's Changed
- 🐛 Compatible with the latest version of CraftEngine by @jhqwqmc in https://github.com/BentoBoxWorld/BentoBox/pull/2978
- 🐛 Defer on-join player resets until after team-accept teleport by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2979
- 🔺 Harden
Island.setRangeagainst distance-mismatch corruption by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2980 - Pin MockBukkit to v4.110.0 (fix flaky SNAPSHOT resolution) by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2981
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.16.1...3.16.2
- 🔺
New in this release
A targeted patch for
/bbox admin delete.- 🔺 Admin delete actually deletes the island now. Not instantly, but when the plugin runs its housekeeping or pure runs. Note that if there are live islands in the same region file, then it will remain in the deleted state until the region is clear. If you really need to delete the blocks, then use WorldEdit or manually remove them. In the next full release we'll add a cut to the Blueprint command to remove blocks.
- 🔺 Seed worlds (
<world>/bentobox) are no longer created. The seed-world infrastructure (createSeedWorlds,removeSeedWorlds, the in-memory copies, the on-disk folders) is gone. Any stale<world>/bentoboxfolders left over from earlier versions are safe to delete manually. These were not doing anything recently except taking up space. - 🔺 API:
GameModeAddon#isUsesNewChunkGeneration()is deprecated for removal. Existing addons that override it keep working (the value is simply ignored) but will see a deprecation warning. Remove the override at your convenience.
Internal cleanup that ships with the fix:
- Removed
DeleteIslandChunks,IslandChunkDeletionManager,CopyWorldRegenerator, thebentobox-deleteIslandMultiLib subscriber, and theIslandDeletionDB recovery loader. WorldRegeneratorslimmed to justregenerateChunk(Chunk);WorldRegeneratorImplis now a small Bukkit-only delegate toWorld#regenerateChunk(int, int)used byCleanSuperFlatListener.IslandDeletionManager#inDeletion(Location)now queries live island state (Island#isDeletable()) instead of a side-channelHashSet, so it can never drift out of sync.
Compatibility
✔️ Paper Minecraft 1.21.5 – 26.1.2 ✔️ Java 21+
Upgrading
- As always, take backups just in case.
- Stop the server.
- Replace the BentoBox jar with this one.
- Restart the server.
- (Optional) Delete any stale
<world>/bentoboxfolders in your world container — they are no longer used. - You should be good to go!
🔺 Reap timing. When
/bbox admin deletefinishes, the player's blocks are still on disk; the island is just marked deletad. The actual region files come out on the next housekeeping sweep (default: 24 h). If you need immediate cleanup, run/bbox admin purge deletedafter the delete. But again, it will only be removed if the region files are clear.Legend
- 🔺 special attention needed.
What's Changed
- 🔺 fix: route admin delete through soft-delete; drop seed-world plumbing by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2977
- fix: address PR #2977 review on IslandDeletionManager by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2977
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.16.0...3.16.1
Release Highlights
- ⚙️🔡🔺 Per-world team disable +
admin team disbandall— Game modes can now opt out of the team subsystem entirely. Trust and coop remain available as the supported alternative, and a new admin command strips pre-existing members from every island in one pass. - 🔺 Setowner cap enforcement — Transferring island ownership now respects the recipient's
concurrent-islandscap andisland.number.<n>permission, closing a clean bypass that previously allowed admins (and team setowner) to push players over their limit. - 🐛 Safe respawn fallback —
ISLAND_RESPAWNno longer drops players at world spawn (0,0) when their home block has been removed; it now walks a fallback chain ending inSafeSpotTeleportto find a real safe spot on the island. - 🐛 Offline growth: vines & trees —
OFFLINE_GROWTHnow correctly blocks every spreading plant (vines, weeping vines, etc.) and every tree growing from a sapling — not just kelp and bamboo. - 🐛 Dynmap marker Y range — Area/polygon markers now use the world's full min/max height instead of always rendering at y=64.
- CraftEngine hook helpers —
getItemStack(id)andgetItemId(item)let addons render and recognise CraftEngine custom items without depending on CraftEngine directly.
Compatibility
✔️ Paper Minecraft 1.21.5 – 1.21.12 ✔️ Java 21+
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.
- If you intend to enable
isTeamsDisabledin a game mode, run/[admin] team disbandallonce after the upgrade to clean up pre-existing teams (see the callout below). - You should be good to go!
⚙️🔺 Teams-disabled is opt-in per game mode. A new
WorldSettings#isTeamsDisabled()method (defaultfalse) lets a game mode disable team commands in its world. Existing servers see no behaviour change unless a game mode adopts the setting. Trust and coop relationships are intentionally unaffected — they're the supported alternative when teams are off.🔺 Setowner cap is now enforced. Both
/island team setownerand/[admin] team setownerrefuse the transfer if the recipient is already at their concurrent-islands cap. Previously, admin setowner only emitted a warning after the bypass and/island team setownerhad no check at all. Adjust the recipient's permission first if you really intend to allow more islands.🔡 Locale changes: New keys for
commands.admin.team.disbandall.{description,confirmation,success},commands.island.team.errors.teams-disabled,commands.admin.team.setowner.errors.at-max, and an updatedcommands.admin.team.kick.cannot-kick-ownermessage that points admins tosetowner/disband. The deadcommands.admin.team.kick.success-allkey has been removed. All 22 bundled translations are in sync.Legend
- 🔡 locale files may need to be regenerated or updated.
- ⚙️ config options have been removed, renamed, or added.
- 🔺 special attention needed.
New Features
⚙️🔡🔺 Per-world Team Disable +
admin team disbandallA new
WorldSettings#isTeamsDisabled()(defaultfalse) lets a game mode opt out of the team subsystem on a per-world basis. When enabled, the action commands that add, remove or reorganise team members refuse to run withcommands.island.team.errors.teams-disabled:/island team inviteandinvite accept(TEAM invitations only — COOP and TRUST invitations remain accepted)/island team kick,leave,promote,demote,setowner/[admin] team add
Read-only commands (
/island teampanel,info,invites,invite reject), trust/coop relationships (trust,coop,untrust,uncoop), and admin commands that operate on existing teams (kick,disband,disbandall,setowner,fix,maxsize) all remain available.A new admin command
/[admin] team disbandallstrips every member and sub-owner from every island in the current world in one confirmable pass. Trusted and coop players are intentionally untouched. Use it once after flippingisTeamsDisabledon to clean up pre-existing teams.🔌 CraftEngine Hook Helpers
Two new helpers on
CraftEngineHook, mirroring the equivalents onOraxenHookandItemsAdderHook:getItemStack(String id)returns anOptional<ItemStack>for the registered CraftEngine custom item — useful for rendering the correct icon and display name in panels and GUIs.getItemId(ItemStack item)returns the namespaced ID of a CraftEngine custom item (ornull) — useful for command handlers (e.g. Level addon's/is value hand) that need to recognise a held custom item.
Both helpers let addons interoperate with CraftEngine without compiling against it directly.
Bug Fixes
🔺 Setowner Bypassed
concurrent-islandsCapAdminTeamSetownerCommandpreviously allowed transfers to a player who already owned their maximum allowed concurrent islands and only emitted a warning afterwards;IslandTeamSetownerCommandhad no check at all. Both now compute the recipient's current concurrent-islands count and permission-aware cap incanExecuteand refuse the transfer when at or above the limit. The user path uses the existingcommands.island.team.setowner.errors.at-maxlocale entry; the admin path uses a newcommands.admin.team.setowner.errors.at-maxthat includes the count and limit.ISLAND_RESPAWNSent Players to 0,0 When Home Was Unsafe[PR #2962]
When
ISLAND_RESPAWNwas enabled and the player's home block had been removed,isSafeLocation()returned false and the respawn fell through to world spawn.IslandRespawnListenernow walks a fallback chain — try one block above the home (covers slabs/stairs), then a quick sync check around the island protection center, then anchor the respawn at the protection center and scheduleSafeSpotTeleporton the next tick to find a real safe spot.cancelIfFail(true)ensures the player isn't yanked elsewhere if the comprehensive scan also fails.OFFLINE_GROWTH: Vines and Trees from Saplings Were Ignored[PR #2968]
OFFLINE_GROWTHpreviously only blocked kelp, bamboo and bamboo saplings onBlockSpreadEvent— vines, cave vines, twisting/weeping vines and any other spreading plant slipped through. Trees and mushrooms growing from a sapling didn't fireBlockGrowEventat all, so they were never blocked. The listener now uses the source block location forBlockSpreadEvent(so plants growing outward from an island are correctly attributed) and adds aStructureGrowEventhandler for trees/mushrooms.Admin
team kickon Multi-island Players[PR #2967]
AdminTeamKickCommandpreviously iterated every team island the target was on and silently kicked them from each. With concurrent islands enabled, that's a footgun. The command now defaults to the single team island the target is on and, when there are several, requires an explicitx,y,zcoordinate (with tab completion suggesting the candidates). Owner-islands are also excluded from kick targets — if the target only owns the matched island(s), the command refuses withcommands.admin.team.kick.cannot-kick-ownerand points the admin tosetownerordisbandinstead.Dynmap Area Markers Always Rendered at y=64
[PR #2972]
DynmapHookwas creating area markers without a configured Y range, so Dynmap rendered them at the default y=64 regardless of the actual world height. BothsetMarkerand the publicaddPolygonMarkernow callarea.setRangeY(world.getMaxHeight(), world.getMinHeight())so markers cover the full vertical extent of the world.
Other Improvements
- Regression test for the island home location bug fix from 3.15.0 [PR #2969]
WorldSettings#isTeamsDisabled()Javadoc rewritten with explicit lists of which commands are blocked vs. unaffected- Locale sync across all 22 bundled translations for new keys + the updated
cannot-kick-ownermessage; removed the deadsuccess-allkey
What's Changed
- 🐛 fix: ISLAND_RESPAWN sends players to 0,0 when home block is removed by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2962
- 🔺 Refuse setowner when recipient is at the concurrent-islands cap by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2966
- 🐛 AdminTeamKick: require x,y,z coordinates when player is on multiple islands by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2967
- 🐛 Fix OFFLINE_GROWTH: block vine spread and tree growth from saplings by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2968
- Add regression test confirming island home location is set on the correct island during concurrent creation by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2969
- 🔌 Add CraftEngineHook.getItemStack(id) lookup by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2970
- 🐛 Fix Dynmap area markers always rendering at y=64 by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2972
- 🔌 feat(hooks): add CraftEngineHook.getItemId(item) lookup by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2973
- ⚙️🔡🔺 feat: per-world team disable + admin team disbandall (#2965) by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2975
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.15.0...3.16.0
- ⚙️🔡🔺 Per-world team disable +
Release Highlights
- ⚙️🔺 Island Delete & Purge Overhaul — The system has been completely redesigned: for game modes that are not void worlds, island reset/delete now soft-deletes islands instead of immediately removing blocks, region file cleanup is deferred and batched, and a new
HousekeepingManagerhandles automated cleanup on a configurable schedule. - 🔺 Simplified Purge Commands —
/purge <days>now handles everything in one step (region file deletion included). The old subcommands/purge regions,/purge status, and/purge stophave been removed. - Custom Blueprint Bundle Icons — Blueprint bundles now support custom item model keys (e.g.
myserver:island_tropical) and vanilla namespaced materials (e.g.minecraft:diamond) as icons, enabling resource-pack-driven island selection GUIs. - InvincibleVisitors XP Fix — XP orbs were incorrectly blocked from tracking visitors by the mob-targeting protection; they now properly home in on visitors while the
EXPERIENCE_PICKUPflag still controls whether pickup is allowed.
Compatibility
✔️ Paper Minecraft 1.21.5 – 1.21.12 ✔️ Paper Minecraft 26.1.1 – 26.1.2 ✔️ Java 21+
Upgrading
- Take backups. (Make a copy of everything!)
- Stop the server.
- Replace the BentoBox jar with this one.
- Restart the server.
- The
keep-previous-island-on-resetconfig setting has been removed — all resets now soft-delete. Remove it from your game mode configs to avoid warnings. - You should be good to go!
🔺 Purge command changes:
/purge regions,/purge status, and/purge stopno longer exist. The top-level/purge <days>command now identifies stale islands and deletes their region files in one pass. Update any scripts or documentation that reference the old subcommands.⚙️ Config removal:
keep-previous-island-on-resethas been removed. All island resets now soft-delete (equivalent to the oldfalsebehaviour, but with deferred disk cleanup). If you previously relied onkeep-previous-island-on-reset: trueto preserve old islands, use/purge protecton islands you want to keep.🔡 Locale changes: Several purge-related locale keys have been removed, renamed, or updated. New keys for the
deletedsubcommand have been added. Regenerate or update your locale files.Legend
- 🔡 locale files may need to be regenerated or updated.
- ⚙️ config options have been removed, renamed, or added.
- 🔺 special attention needed.
New Features
⚙️🔺 Island Delete System Overhaul
The system has been fundamentally redesigned for reliability and safety. Island resets in non-void worlds now always soft-delete (setting a
deletableflag) rather than immediately destroying chunks. A newHousekeepingManagerruns on a configurable schedule to sweep region files for soft-deleted islands and free disk space asynchronously.IMPORTANT: The server can store a lot of the world chunks in RAM and so the Housekeeping or Purging will not appear to do anything until you restart the server. Please do not report that an island is not deleting until you have restarted the server.
The new
/purge <days>command now identifies and deletes region files in one step — the previous behaviour only set thedeletableflag in the database, leaving region files on disk until a separate/purge regionsrun. The new/purge deletedsubcommand reaps region files for any island already flagged asdeletable, regardless of age./purge unownednow flags orphaned islands and prompts the admin to run/purge deletedafterwards. Again, the changes will not be seen in-game until server restart.For game modes that use non-void world generation (Boxed, AcidIsland, CaveBlock, etc.),
AdminDeleteCommandnow soft-deletes and defers physical cleanup; simple void/overworld game modes (AOneBlock, BSkyBlock, etc.) keep the existingDeleteIslandChunkspath. Island database rows are removed at server shutdown after region files are confirmed gone, ensuring crash-safe recovery.The
keep-previous-island-on-resetconfig setting has been removed — all resets now soft-delete by default.💎 Custom Blueprint Bundle Icons
The
"icon"field in blueprint bundle JSON files now accepts three formats:- Plain material name (existing):
"icon": "DIAMOND" - Vanilla namespaced material (new):
"icon": "minecraft:diamond" - Custom item model key (new):
"icon": "myserver:island_tropical"
Custom model keys are applied to a
PAPERbase item usingItemMeta.setItemModel(), allowing resource-pack-defined icons to appear on island selection panels. A newgetIconItemStack()API method returns the fullItemStackwith model data applied; the existinggetIcon()method returningMaterialremains unchanged for addon compatibility.
Bug Fixes
InvincibleVisitors: XP Orbs Blocked from Tracking Visitors
[PR #2948]
InvincibleVisitorsListenercancelledEntityTargetLivingEntityEventfor any entity targeting a visitor — including XP orbs. Since XP orbs use this event to home in on players, visitors could never pick up XP even when theEXPERIENCE_PICKUPflag allowed it. The fix skips cancellation when the entity is anExperienceOrb; the flag listener remains responsible for controlling whether pickup is actually granted.BungeeCord Hex Colour Not Recognised in Legacy Conversion
BungeeCords
&#RRGGBBhex colour format was not being recognised inlegacyToMiniMessage, causing hex colours from BungeeCord-formatted strings to fall through as literal text. The parser now handles this format correctly.Spurious
defaultRankWarnings for PVP Setting FlagsPVP-related setting flags were triggering incorrect
defaultRankwarning log messages on startup. These warnings were harmless but noisy; the condition is now correctly filtered.
Other Improvements
- 🔡 Accept underscore locale filenames by auto-renaming to BCP-47 hyphen form on startup (e.g.
pt_BR.yml→pt-BR.yml) — carries forward from 3.14.2 [PR note] - 🔡 Fix typo in Japanese locale file for block count message
- Add
PURGEDevent reason; fireIslandDeleteEventimmediately on soft-delete so addons receive timely notification - Add warning logs when island grid is null to aid debugging of rare world-unload edge cases
- Extract
AbstractPurgeCommandbase class to remove duplication across purge subcommands - Remove accidentally committed
.paper-nms/build artifact and add to.gitignore[PR #2942]
FAQ: Island Delete & Purge for Admins
Island Delete
Q: I ran
/bbox admin delete <player>but the island is still visible. Why?It depends on your game mode. For game modes that use custom chunk generation — Boxed, AcidIsland, CaveBlock, and similar — the island is soft-deleted: it is marked as
deletablein the database but its chunks remain on disk. The actual.mcaregion files are cleaned up later by theHousekeepingManager(if enabled) or when you run/purge deleted. Even after the files are deleted, Papers in-memory chunk cache means the island may still appear in-game until the next server restart. This is normal — do not report the island as not deleting until you have restarted.Q: Why soft-delete instead of immediately removing chunks?
For worlds with non-trivial terrain (AcidIslands ocean, Boxeds generated box, CaveBlocks cave world), chunk regeneration is slow and expensive. Soft-delete defers the work safely: the island is immediately invisible to the gameplay systems (it can no longer be claimed or teleported to), and disk cleanup happens when the server has breathing room. It also means a crash before cleanup leaves data intact — the island stays
deletableand is picked up by the next purge cycle.Q: My game mode (BSkyBlock, AOneBlock) deletes island chunks immediately. Why is it different?
Void-world game modes use the
DeleteIslandChunks/WorldRegeneratorpath, which regenerates the island area back to void immediately. Since there is no complex terrain to preserve, this is fast and safe. Soft-delete was not needed.Q: Can I recover a soft-deleted island before the region files are reaped?
Yes — if the region files have not yet been deleted, you can clear the
deletableflag via the database or an admin command and the island will be restored. Once the region files are gone, however, only a backup can save it. Take backups before mass deletes.
Purge
Q: What does
/purge <days>do exactly?It scans every
.mcaregion file in the current game modes world (overworld, and nether/end if island-nether/end is enabled) that is older than<days>days. It then filters out:- regions containing the spawn island
- regions containing purge-protected islands (
/purge protect) - regions containing islands whose owner logged in within
<days>days - regions containing islands above the configured Level addon threshold (if installed)
The remaining regions are shown in the server log with a summary, and you are asked to type
confirmbefore anything is deleted.Q: What is the difference between
/purge <days>and/purge deleted?Command Filter What it deletes /purge <days>Region files older than N days, minus active/protected islands .mcafiles (plus player data for absent players)/purge deletedIslands flagged deletablein the DB (from resets, soft-deletes).mcafiles for those islands regionsUse
/purge <days>for periodic housekeeping of abandoned islands. Use/purge deletedto immediately reap region files for islands that have already been marked for deletion (e.g. after a batch of/is resetor/admin deleteoperations).Q: How do I delete orphaned (unowned) islands?
Run
/purge unowned. This flags every unowned, non-protected, non-spawn island in the world asdeletable(with confirmation). Then run/purge deletedto reap their region files. Restart the server to see the changes.Q: I ran the purge but the island chunks are still visible in-game. What happened?
Paper caches chunk data in RAM. The
.mcafiles have been deleted from disk, but the cache still has them until the server shuts down cleanly. Restart the server — on the next start, Paper will find no region file and treat those chunks as empty/void. This is expected behaviour, not a bug.Q: What is the HousekeepingManager and how do I configure it?
HousekeepingManageris an automated background task that runs the purge on a schedule without admin intervention. It has two independent cycles:- Age sweep — runs every
interval-daysdays and behaves like/purge <days>using the configuredregion-age-daysvalue. - Deleted sweep — runs every
deleted-interval-hourshours and behaves like/purge deleted, reaping region files for any island already flaggeddeletable.
Both cycles are disabled by default (
housekeeping.enabled: false). Enable and configure them in your BentoBoxconfig.ymlunder thehousekeepingsection.Q: What does
/purge protectdo, and when should I use it?It marks an island as purge-protected, permanently exempting it from all purge operations regardless of owner activity or region file age. Use it for community builds, showcase islands, or any island you never want auto-cleaned.
Q: What is
/purge age-regions?This is a developer/testing utility that artificially ages the per-chunk timestamps inside
.mcafiles so they become candidates for/purge <days>without waiting real time. It is not intended for production use — it exists to make testing the purge pipeline practical.
Whats Changed
- feat: support item model keys and namespaced materials for blueprint bundle icon by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2941
- chore: remove accidentally committed
.paper-nms/directory and add to.gitignoreby @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2942 - ⚙️🔺 Purge region files for soft-deleted islands by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2933
- 🔺 Merge /purge regions into /purge; drop status/stop; simplify /purge unowned by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2949
- 💎 feat: support item model keys and namespaced materials for blueprint bundle icon by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2941
- Fix: InvincibleVisitors mob-targeting protection incorrectly blocks XP orbs from tracking visitors by @app/copilot-swe-agent in https://github.com/BentoBoxWorld/BentoBox/pull/2948
- chore: remove accidentally committed
.paper-nms/directory and add to.gitignoreby @app/copilot-swe-agent in https://github.com/BentoBoxWorld/BentoBox/pull/2942
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.14.2...3.15.0
- ⚙️🔺 Island Delete & Purge Overhaul — The system has been completely redesigned: for game modes that are not void worlds, island reset/delete now soft-deletes islands instead of immediately removing blocks, region file cleanup is deferred and batched, and a new
A small bug-fix release for 3.14.0. If you're upgrading from 3.13.x or earlier, see the 3.14.0 changes below — they all apply to this release.
Compatibility
✔️ Paper Minecraft 1.21.5 – 1.21.12 ✔️ Paper Minecraft 26.1.1 – 26.1.2 ✔️ Java 21+
Upgrading
- Take backups. (Make a copy of everything!)
- Stop the server.
- Replace the BentoBox jar with this one.
- Restart the server.
🔡 Locale file rename: If your server has locale files named with underscores (e.g.
pt_BR.yml), BentoBox will automatically rename them to the BCP-47 hyphen form (pt-BR.yml) on first startup. No manual action needed — check your logs for the rename notice.
3.14.2 Bug Fixes
Fix hex colour codes broken by BungeeCord round-trip
The
&#RRGGBBhex colour format stopped working in 3.14.1. The root cause was a double-conversion:translateColorCodesserialises hex colours to the BungeeCord§x§R§R§G§G§B§Brepeated-character format, butlegacyToMiniMessage(called when rendering the message) didn't recognise that format — so&xwas silently dropped and each following&Rdigit was misread as a named colour code (&2→ dark green,&3→ dark aqua, …), producing completely wrong colours. Fixed by normalising the BungeeCord format back to&#RRGGBBbefore processing.🔡 Accept underscore locale filenames instead of ignoring them
[d2dd28e2]
Locale files named with underscores (e.g.
pt_BR.yml,en_US.yml) are not valid BCP-47 language tags and were silently ignored since 3.14.0, causing those translations to go missing. BentoBox now automatically renames them to the correct hyphen form (pt-BR.yml) on startup and logs a warning. If a correctly-named file already exists, the underscore copy is reported as a duplicate and skipped.Fix spurious "defaultRank below minimumRank" warnings
[bdc20675]
SETTING and WORLD_SETTING flags (such as the PVP flag) were incorrectly triggering a startup warning about
defaultRankbeing belowminimumRank. These flag types legitimately use-1as a disabled state (Island.isAllowedtreats>= 0as enabled), so the rank-clamping check now only applies to PROTECTION flags.3.14.2 Other Changes
- Add Paper Minecraft 26.1.2 (1.21.12) to the compatibility list.
Legend
- 🔡 locale files may need to be regenerated or updated.
What's Changed
- Fix hex colour codes broken by BungeeCord round-trip by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2944
- 🔡 Accept underscore locale filenames instead of ignoring them by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2944
- Fix spurious "defaultRank below minimumRank" warnings by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2944
- Add Minecraft 26.1.2 / 1.21.12 compatibility by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2944
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.14.1...3.14.2
A small bug-fix release for 3.14.0. If you're upgrading from 3.13.x or earlier, see the 3.14.0 changes below — they all apply to this release.
Compatibility
✔️ Paper Minecraft 1.21.5 – 1.21.11 ✔️ Paper Minecraft 26.1.1 ✔️ Java 21+
Upgrading
- Take backups. (Make a copy of everything!)
- Stop the server.
- Replace the BentoBox jar with this one.
- Restart the server.
📄 Coming from 3.13.x? Existing
.blublueprint files will continue to load alongside the new.blueprintJSON format introduced in 3.14.0 — no migration step required.🔡 Coming from 3.13.x? All 22 non-English locale files were corrected in 3.14.0. If you use customised locale files, regenerating them is recommended.
3.14.1 Bug Fixes
Fix
</green>leaking as literal text in flag setting tooltips[594aaf04]
User.convertToLegacywas splitting mixed MiniMessage/legacy strings on\nbefore parsing, so a multi-line tag span like<green>foo\nbar</green>was processed as two independent lines — the second line had a closing tag with no opening, and MiniMessage rendered</green>as literal text in the lore. The whole string is now parsed as a single unit so the tag span stays balanced. The now-unnecessary<green>...</green>wrapper around[description]in the flag description/menu/setting layouts has also been dropped from every bundled locale file.Fix lava-tip hologram showing raw
<orange>MiniMessage tags[2bba02bb]
The 3.14.0 obsidian-scooping lava-tip locale entry used
<orange>, which is not a valid MiniMessage named colour — Minecraft's named-colour set tops out at<gold>. MiniMessage left the unknown tag as literal text, so the hologram rendered<orange>Scoop this up with a bucket</orange>verbatim. Switched to<gold>to match the Minecraft colour palette and the rest of the locale conventions.3.14.1 Other Changes
Flag.Builder
minimumRankAPI[PR #2936]
New
Flag.Builder.minimumRank(int)lets addons declare the lowest rank that may be selected for aPROTECTIONflag (defaults toVISITOR_RANK, fully backwards-compatible). The auto-assignedCycleClicklistener is constructed with the configured minimum so the settings-panel click-cycle won't let players select ranks below it.build()clampsdefaultRankup tominimumRank(with a logged warning) so a misconfigured flag still has a selectable default. AddsFlag.getMinimumRank()andFlag.getClickHandler()getters. Binary-compatible — additive only.Internal: expanded test coverage
Several internal subsystems received substantial test-coverage improvements (no behaviour change):
IslandsManager(51% → 64.6%)LocalesManager(40% → 49.2%)YamlDatabaseHandler(13% → 72%)AddonsManager(26% → 46%)BlueprintsManager,BlueprintClipboard,SafeSpotTeleport,WebManager,Util,ItemParser
Documentation: CLAUDE.md now documents the MiniMessage ↔ legacy round-trip pitfalls that produced the two bugs above.
3.14.0 changes
The full 3.14.0 changelog is reproduced below for anyone upgrading from 3.13.x or earlier.
Release Highlights
- ⚙️ Island Defaults tab in Admin Settings — A new GUI tab lets admins view and edit default island protection flags directly from the settings panel — no config editing required.
- 🔡 Message delivery type tags — Locale strings now support
[actionbar],[title],[subtitle], and[sound:name:volume:pitch]tags, letting you control exactly how messages are displayed to players. - ⚡ Chunk pre-generation — A new background chunk pre-generation system warms island chunks ahead of time, eliminating lag spikes on first visit. Disabled by default.
- 💡 Obsidian scooping lava tip — A floating hologram appears above newly formed scoopable obsidian, teaching players they can scoop it. Disappears when scooped or after a configurable timeout.
- 🔡 Flag state placeholders — New placeholders expose every flag's enabled/disabled state for use with PlaceholderAPI (e.g.,
%bskyblock_flag_PVP_OVERWORLD%). - 📄 Plain JSON blueprints — Blueprints are now stored as human-readable
.blueprintJSON files instead of zipped.blubinaries. Existing.blufiles are loaded automatically with full backward compatibility. - 🔺 Minecraft 26.1.1 region purge support — Island deletion now handles Minecraft 26.1.1's updated world file structure.
Legend
- 🔡 locale files may need to be regenerated or updated.
- ⚙️ config options have been removed, renamed, or added.
- 🔺 special attention needed.
New Features (3.14.0)
📄 Plain JSON Blueprint Format — PR #2911
Blueprints have been switched from a zipped binary
.bluformat to plain JSON.blueprintfiles. This makes blueprints human-readable, diffable, and easy to edit in any text editor. Existing.blufiles are detected and loaded automatically — no migration step required.⚙️ Island Defaults Tab in Admin Settings GUI — PR #2912
A new "Island Defaults" tab has been added to the Admin Settings panel, letting admins view and modify default protection flags for new islands directly through the GUI.
🔡 Message Delivery Type Tags — PR #2910
Locale strings now support
[actionbar],[title],[subtitle], and[sound:name:volume:pitch]tags placed at the start of locale values to control how messages are shown to players.⚡ Chunk Pre-Generation Manager — PR #2916
A new chunk pre-generation system can warm island area chunks in the background, eliminating lag when players first visit. Disabled by default in
config.yml.💡 Obsidian Scooping Lava Tip Hologram — PR #2915
When scoopable obsidian forms (lava + water on an island), a small floating hologram now appears above the block to teach players they can pick it up. Removed when scooped or after a configurable duration. (See 3.14.1 fix above for the
<orange>tag bug.)🔡 Flag State Placeholders — PR #2913
New PlaceholderAPI placeholders expose the enabled/disabled state of every protection, setting, and world setting flag.
⚙️ MythicMobs Hook: Configurable Delay & Callback — PR #2929
The MythicMobs integration now supports a configurable delay for mob spawning and a callback that fires once the mob has been spawned.
🔺 Minecraft 26.1.1 Region Purge Support — PR #2902
Island deletion's region file purge now handles Minecraft 26.1.1's updated world file structure.
Bug Fixes (3.14.0)
- Fix MiniMessage formatting on panel items — PR #2903 — default italic and cross-nested tag handling in the legacy-to-MiniMessage converter.
- Fix bold and decoration leaking across legacy round-trip — PR #2918 (fixes #2917) — bold/italic/underlined/strikethrough/obfuscated leaking into subsequent text segments.
- Fix bold formatting leaking past prefix substitution — PR #2907
- Fix extra blank line in confirmation prompts — PR #2927 (fixes #2919)
- Preserve addon placeholders across
/bbox reload— PR #2931, PR #2932 (fixes #2930) - Skip locale files with invalid BCP-47 tags — PR #2928
- Hide tooltip clutter in all panels — PR #2924 — banner patterns, potion effects, etc. hidden via the modern
TooltipDisplaydata component API. - Fix locale corrections across 22 languages — PR #2905
- Preserve mid-text spaces in legacy/MiniMessage round-trip
- Support MiniMessage in welcome sign locale entries
- Defer island saves while settings panel is open — PR #2926
Other Improvements (3.14.0)
- Improved warning messages for incompatible addons in AddonsManager
- Updated Russian locale translations — PR #2925
- Added test coverage for
visited_island_rankplaceholder — PR #2909 - Extended decoration leak tests to cover all five decoration types — PR #2920
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.14.0...3.14.1
BentoBox Changelog
[3.14.0] — 2026-04-10
Release Highlights
- ⚙️ Island Defaults tab in Admin Settings — A new GUI tab lets admins view and edit default island protection flags directly from the settings panel — no config editing required.
- 🔡 Message delivery type tags — Locale strings now support
[actionbar],[title],[subtitle], and[sound:name:volume:pitch]tags, letting you control exactly how messages are displayed to players. - ⚡ Chunk pre-generation — A new background chunk pre-generation system warms island chunks ahead of time, eliminating lag spikes on first visit. Disabled by default.
- 💡 Obsidian scooping lava tip — A floating hologram appears above newly formed scoopable obsidian, teaching players they can scoop it. Disappears when scooped or after a configurable timeout.
- 🔡 Flag state placeholders — New placeholders expose every flag's enabled/disabled state for use with PlaceholderAPI (e.g.,
%bskyblock_flag_PVP_OVERWORLD%). - 📄 Plain JSON blueprints — Blueprints are now stored as human-readable
.blueprintJSON files instead of zipped.blubinaries. Existing.blufiles are loaded automatically with full backward compatibility. - 🔺 Minecraft 26.1.1 region purge support — Island deletion now handles Minecraft 26.1.1's updated world file structure.
Compatibility
✔️ Paper Minecraft 1.21.5 – 1.21.11
✔️ Paper Minecraft 26.1.1
✔️ Java 21+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.
- Existing
.blublueprint files will continue to work — they are loaded transparently alongside the new.blueprintformat. - You should be good to go!
📄 Blueprint migration note: Blueprints are now saved in plain JSON
.blueprintformat. Your existing.blufiles will continue to load, but new saves will use the new format. This makes blueprints easy to inspect, version-control, and share.🔡 Locale note: All 22 non-English locale files received corrections for mistranslations, broken tags, and untranslated strings. If you use customised locale files, regenerating them is recommended.
Legend
- 🔡 locale files may need to be regenerated or updated.
- ⚙️ config options have been removed, renamed, or added.
- 🔺 special attention needed.
New Features
📄 Plain JSON Blueprint Format
[PR #2911]
Blueprints have been switched from a zipped binary
.bluformat to plain JSON.blueprintfiles. This makes blueprints human-readable, diffable, and easy to edit in any text editor. Existing.blufiles are detected and loaded automatically — no migration step required. New blueprint saves use the.blueprintextension.Includes filename length validation to guard against excessively long blueprint names on disk.
⚙️ Island Defaults Tab in Admin Settings GUI
[PR #2912]
A new "Island Defaults" tab has been added to the Admin Settings panel. This lets admins view and modify the default protection flag settings for new islands directly through the GUI, without needing to edit configuration files manually.
🔡 Message Delivery Type Tags
[PR #2910]
Locale strings now support delivery type tags that control how messages are shown to players:
[actionbar]— display as an action bar message[title]— display as a title[subtitle]— display as a subtitle[sound:name:volume:pitch]— play a sound alongside the message
Tags are placed at the start of locale values and are stripped before rendering the text content.
⚡ Chunk Pre-Generation Manager
[Commits]
A new chunk pre-generation system can warm island area chunks in the background, eliminating lag when players first visit. The system defers work until after server load and runs asynchronously to avoid main-thread stalls. Disabled by default in
config.yml— enable it if your server has the resources.💡 Obsidian Scooping Lava Tip Hologram
[PR #2915]
When scoopable obsidian forms (lava + water on an island), a small floating hologram now appears above the block to teach players they can pick it up. The hologram is removed immediately when the obsidian is scooped, or after a configurable duration.
🔡 Flag State Placeholders
[PR #2913]
New PlaceholderAPI placeholders expose the enabled/disabled state of every protection, setting, and world setting flag. Useful for scoreboards, tab lists, and addon integrations.
⚙️ MythicMobs Hook: Configurable Delay & Callback
[PR #2929]
The MythicMobs integration now supports a configurable delay for mob spawning and a callback that fires once the mob has been spawned, enabling addons to interact with spawned MythicMobs entities.
🔺 Minecraft 26.1.1 Region Purge Support
[PR #2902]
Island deletion's region file purge now handles Minecraft 26.1.1's updated world file structure, ensuring island chunks are properly cleaned up on the newer Paper builds.
Bug Fixes
Fix MiniMessage formatting on panel items
[PR #2903]
Fixed default italic being applied to panel items and corrected cross-nested tag handling in the legacy-to-MiniMessage converter.
Fix bold and decoration leaking across legacy round-trip
Fixed bold, italic, underlined, strikethrough, and obfuscated decorations leaking into subsequent text segments when MiniMessage content is round-tripped through legacy colour codes. A custom component walker now emits
§rresets where Adventure's built-in serializer does not.Fix bold formatting leaking past prefix substitution
[PR #2907]
Fixed bold text from
[prefix]substitutions continuing into the message body by appending a§rreset after the prefix.Fix extra blank line in confirmation prompts
Fixed an unwanted blank line appearing in conversation-style confirmation prompts.
Preserve addon placeholders across /bbox reload
[PR #2931] [PR #2932] Fixes #2930
Addon-owned and game-mode placeholders are no longer lost when running
/bbox reload.Skip locale files with invalid BCP-47 tags
[PR #2928]
Locale files with names that aren't valid BCP-47 language tags are now silently skipped instead of causing errors or blank entries in the locale selection panel.
Hide tooltip clutter in all panels
[PR #2924]
Banner patterns, potion effects, and other item-specific tooltip data are now hidden in all BentoBox GUI panels using the modern
TooltipDisplaydata component API.Fix locale corrections across 22 languages
[PR #2905]
Mistranslations, broken colour/formatting tags, untranslated strings, and typos corrected across all 22 non-English locale files.
Preserve mid-text spaces in legacy/MiniMessage round-trip
Fixed spaces being collapsed when converting between legacy and MiniMessage formatting, preserving intended whitespace in translated strings.
Support MiniMessage in welcome sign locale entries
Welcome signs on island creation now correctly render MiniMessage-formatted locale strings.
Defer island saves while settings panel is open
[PR #2926]
Island data is no longer saved on every settings click. Saves are deferred until the settings panel is closed, and a click cooldown prevents accidental rapid toggling.
Other Improvements
- Improved warning messages for incompatible addons in AddonsManager
- Updated Russian locale translations [PR #2925]
- Added test coverage for
visited_island_rankplaceholder [PR #2909] - Extended decoration leak tests to cover all five decoration types [PR #2920]
What's Changed
- Support Minecraft 26.1.1 world file structure in region purge by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2902
- Fix MiniMessage formatting: default italic on panel items and tag nesting by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2903
- 🔡 Fix all 22 locale files: mistranslations, broken tags, untranslated strings by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2905
- Fix bold formatting leaking past prefix substitution by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2907
- Add test coverage for
visited_island_rankplaceholder by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2909 - 🔡 Add message delivery type tags (actionbar, title, subtitle, sound) by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2910
- 📄 Switch blueprints from zipped .blu to plain JSON .blueprint format by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2911
- ⚙️ Add Island Defaults tab to Admin Settings GUI by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2912
- 🔡 Add flag state placeholders for game mode addons by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2913
- 💡 Add lava tip hologram when scoopable obsidian forms by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2915
- Fix bold (and other decorations) leaking across legacy round-trip by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2918
- Extend decoration leak tests by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2920
- Hide additional item tooltips in panels via TooltipDisplay API by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2924
- Update Russian text by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2925
- Defer island saves while settings panel is open; click cooldown by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2926
- Fix #2919: extra blank line in confirmation prompts by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2927
- Skip locale files with invalid BCP-47 tags by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2928
- ⚙️ Make MythicMobs spawn delay configurable by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2929
- Preserve addon placeholders across /bbox reload by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2931
- Don't clear gamemode addon placeholders on reload by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2932
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.13.0...3.14.0
BentoBox Changelog
[3.13.0] — 2026-04-04
New Release Highlights
- 🔺 Paper 26.1.1 (Minecraft 26.1.1) support — BentoBox now recognises Paper's new year-based versioning scheme (
26.x.x) and no longer shows a compatibility warning. The version parser has been updated to handle the newgetBukkitVersion()format. BentoBox remains fully compatible with Paper 1.21.5 – 1.21.11 servers. - ⚙️ 🔡 PAUSE_MOB_GROWTH protection flag — Minecraft 26.1.1 introduces golden dandelions that can pause or unpause baby mob growth. A new island protection flag lets island owners control who can use this feature. Defaults to members only. Supports both main-hand and off-hand interactions.
- 🔡 MiniMessage locale migration — All locale files have been migrated from legacy
§/&colour codes to Paper's MiniMessage format (<green>,<bold>, etc.), with full backward compatibility for existing custom translations. The format of MiniMessage messages can be found here.
Compatibility
✔️ Paper Minecraft 1.21.5 – 1.21.11
✔️ Paper Minecraft 26.1.1
✔️ Java 21+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 migration note: All 23 locale files have been migrated to MiniMessage formatting. If you have customised locale files, BentoBox will still handle legacy
§/&codes, but regenerating your locale files is recommended to take advantage of MiniMessage features.Legend
- 🔡 locale files may need to be regenerated or updated.
- ⚙️ config options have been removed, renamed, or added.
- 🔺 special attention needed.
New Features
🔺 Paper 26.1.1 Support
[PR #2897]
Paper has adopted a new year-based versioning scheme starting in 2026 (e.g.,
26.1.1instead of1.21.12). BentoBox'sServerCompatibilityversion parser has been updated to handle the newgetBukkitVersion()format (26.1.1.build.14-alpha), which includes a.build.Nsuffix that the old parser couldn't strip.V26_1_1has been added to the supported versions enum asCOMPATIBLE.BentoBox continues to compile against the Paper 1.21.11 API and remains compatible with all currently supported 1.21.x versions.
⚙️ 🔡 PAUSE_MOB_GROWTH Protection Flag
Minecraft 26.1.1 added the ability to use a golden dandelion on a baby mob to pause or resume its growth. A new
PAUSE_MOB_GROWTHisland protection flag controls who can do this. The flag defaults to members and above; visitors are blocked.The listener checks
PlayerInteractEntityEventfor a player holdingGOLDEN_DANDELIONin either hand targeting a babyAgeablemob. UsesEnums.getIfPresentfor the flag icon material so BentoBox remains backward compatible with 1.21.x servers where the item doesn't exist.Translations added to all 23 locale files.
🔡 MiniMessage Locale Migration
[PR #2894] See: https://docs.papermc.io/adventure/minimessage/format/
All locale files have been migrated from legacy
§/&colour codes andChatColorAPI usage to Paper's native MiniMessage format. This enables richer formatting (gradients, hover text, click events) and aligns with Paper's direction of deprecating legacy formatting.Backward compatibility is maintained: existing custom locale files using legacy codes will continue to work. Multiple follow-up fixes ensured edge cases were handled correctly:
- Mixed MiniMessage/legacy content no longer shows raw tags
- Multi-line translations preserve newlines correctly in panel lore
- Flag panel rank colours render correctly
- Conversation prompts display properly
- Rank display maintains backward compatibility with legacy locale files
Bug Fixes
Fix ItemStack quantity > 99 crash during serialization
[PR #2895]
Fixed a crash when serialising an
ItemStackwith a quantity greater than 99. The quantity is now clamped to a valid range before serialization.Deduplicate lock/ban notification messages
[PR #2892]
Fixed an issue where players would receive repeated lock/ban notification messages when standing at an island boundary, causing chat spam.
Fix hex color codes breaking subsequent legacy color codes
[PR #2893]
Fixed a bug where hex colour codes (e.g.,
&#FF0000) would corrupt subsequent legacy&colour codes in the same string.
What's Changed
- Fix spam messages on blocked island by deduplicating notifications in LockAndBanListener by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2892
- Fix hex color codes breaking subsequent legacy color codes by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2893
- 🔡 Migrate locale formatting from legacy & codes to MiniMessage by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2894
- Fix ItemStack quantity > 99 crash during serialization by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2895
- 🔺 Add Paper 26.1.1 support by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2897
- ⚙️ 🔡 Add PAUSE_MOB_GROWTH protection flag by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2898
- Enhance PauseMobGrowthListener to support off-hand interactions by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2900
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.12.0...3.13.0
- 🔺 Paper 26.1.1 (Minecraft 26.1.1) support — BentoBox now recognises Paper's new year-based versioning scheme (
BentoBox Changelog
[3.12.0] — 2026-03-28
New Release Highlights
- 🗺️ ⚙️ Web-map integrations — BentoBox now ships with built-in BlueMap and Dynmap hooks that display island markers and area overlays on your web map automatically. A public Map API lets addon authors target any web-map plugin.
- ⚙️ 🔡 SPAWN_PROTECTION world flag — Prevents players from dying to the void at spawn. Configurable per game-mode via the world settings panel.
- ⚙️ 🔡 WIND_CHARGE protection flag — Controls whether visitors can fire wind charges on islands. Defaults to blocked for visitors.
- ⚙️ 🔡 Expel fallback command — A new
expelCommandconfig key (default:spawn) specifies the command run when an expelled player has no island or spawn point to fall back to. - ⚙️ 🔡 Blueprint paste commands — Blueprint bundles can define a list of commands that run when the blueprint is pasted, enabling automation on island creation.
- 🔡 Blueprint GUI pagination — The blueprint management panel now paginates so large blueprint libraries are no longer cramped onto a single screen.
- ⚙️ 🔡 Admin max team-size command — A new
/bbox admin setmaxteamsize <player> <size>command lets you override the maximum team size on a per-island basis without editing config files. - 🔡 Clickable home list — The
/is homeslist is now clickable; selecting a home name in chat runs the go-home command automatically. - ⚙️ 🔡 Force-field fling — Players are now flung away from island force-fields when they walk into them, rather than just being teleported (improves feel on flying game modes).
- ⚙️ Obsidian-scooping abuse fix — Two new config knobs (
obsidianScoopingCooldownandobsidianScoopingRadius) prevent rapid lava/obsidian duplication exploits.
Compatibility
✔️ Paper Minecraft 1.21.5 – 1.21.1
✔️ Java 21Upgrading
- 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!
⚙️ Config migration note: Three new keys are added to
config.yml(expelCommand,obsidianScoopingRadius,obsidianScoopingCooldown). BentoBox will add them automatically on first start.Legend
- 🔡 locale files may need to be regenerated or updated.
- ⚙️ config options have been removed, renamed, or added.
- 🔺 special attention needed.
New Features
⚙️ BlueMap & Dynmap Web-Map Integration
[PR #2861] [PR #2883] [PR #2884] [PR #2885]
BentoBox now ships with hooks for BlueMap and Dynmap. When either plugin is installed, island markers and (for BlueMap) coloured area overlays are added to the live web map automatically, without any configuration required.
A new generic Map API (
world.bentobox.bentobox.api.map) lets addon authors register their own web-map implementations, so any mapping plugin can be supported in the future.Additional Map API polish after initial merge:
- Map hooks now register before addons enable, so addons can create markers during
onEnable(). Island population is deferred toBentoBoxReadyEventwhen islands are fully loaded. addPointMarker()now accepts aniconNameparameter; Dynmap maps this to its icon registry (with fallback to"default") and all 85 built-in Dynmap icon names are documented inMapManagerJavadoc.- Dynmap point marker labels support HTML markup (e.g. coloured owner names) via
isMarkupLabel=true.
⚙️ 🔡 SPAWN_PROTECTION World Setting Flag
[PR #2865]
A new
SPAWN_PROTECTIONworld setting flag prevents players at spawn from falling into the void. When enabled, the spawn area is treated as protected ground and void-death is suppressed. Useful for game modes where the spawn platform is exposed.⚙️ 🔡 WIND_CHARGE Protection Flag
[PR #2855]
A new
WIND_CHARGEisland protection flag controls who can use wind charge items on an island. By default visitors are blocked, preventing griefing through knockback.⚙️ 🔡 Expel Fallback Command
[PR #2846]
A new
expelCommandsetting inconfig.yml(default:spawn) specifies the console command run when an expelled player has no home island and no known spawn point. Previously such players would be stuck.⚙️ Blueprint Paste Commands
[PR #2852]
Blueprint bundles now support an optional
commandslist. Each command is run (as the server console) when the bundle's blueprint is pasted, making it easy to trigger automation or economy actions on island creation.🔡 Blueprint GUI Pagination
[PR #2867]
The blueprint management GUI now paginates. Servers with large numbers of blueprints will see next/previous page navigation buttons instead of a single overflowing panel.
⚙️ 🔡 Admin Max Team-Size Command
A new
/bbox admin setmaxteamsize <player> <size>command lets server admins override the maximum team size for a specific island at runtime, without touching config files.🔡 Clickable Home List in Chat
[PR #2879]
The
/is homeslisting in chat is now clickable. Clicking a home name runs the go-home command for that home automatically, saving players from typing.🔡 Force-Field Fling
Players who walk into an island force-field (locked island boundary) are now physically flung back rather than teleported, giving a more natural feel, especially on flying game modes.
🔡 Bypass Lock Notification
[PR #2869]
Admins and players with the bypass permission now receive a notification message when they enter a locked island, so it is clear that the lock has been overridden.
Geo-Limit Projectiles
[PR #2863]
Projectiles (arrows, tridents, etc.) are now included in the geo-limit settings panel, giving island owners granular control over which projectile types visitors are allowed to fire.
Paginated Help Command
[PR #2859]
/is helpnow supports a page number argument (/is help 2) so large command lists do not flood chat./island lock Command
[PR #2858]
A new
/island lockshortcut command lets island owners toggle the island lock without opening the settings panel.
Bug Fixes
Lava Bucket / Obsidian Duplication
[PR #2842] [PR #2856] [PR #2860]
Fixed an exploit where players could rapidly scoop buckets of lava from obsidian to duplicate it. A per-player cooldown (
obsidianScoopingCooldown, default: 1 minute) and a proximity radius check (obsidianScoopingRadius, default: 5 blocks) now prevent abuse. Both values are configurable inconfig.yml.Player XP Not Resetting
[PR #2866]
Fixed a bug where player XP was not being reset when joining a team or creating a new island via the no-teleport code path.
Sugar Cane, Cocoa Beans & Nether Wart Protection Flags
[PR #2870]
Sugar cane was not registered under the
HARVESTflag and was not protected against premature breaking. Sugar cane, cocoa beans, and nether wart were also missing fromCROP_PLANTINGprotection. They now all respect the correct flag settings.Purge Unowned Islands NPE
[PR #2843]
Fixed a
NullPointerExceptionin the purge-unowned-islands command that occurred when an island's world wasnull.End/Nether Explosion Crash
[PR #2844]
Fixed a
NullPointerExceptioninStandardSpawnProtectionListenerthat occurred when an explosion happened in a standard End or Nether world that was not managed by BentoBox.Island Settings Comparator
[PR #2864]
Fixed an inconsistent comparator in the island settings panel that could throw a
IllegalArgumentExceptionunder certain flag ordering conditions.Color Codes in Multi-Line Translated Strings
[PR #2877]
Fixed color/formatting codes being stripped from the second and subsequent lines of multi-line locale strings.
Players Falling into the Void on New Island Creation
[PR #2890]
Fixed a bug where players could fall into the void immediately after a new island was created if the teleport destination hadn't solidified yet.
homeTeleportAsyncnow performs a safe-spot check before teleporting and retries with exception handling if the location lookup fails, preventing void deaths on fresh islands.
Configuration Changes
Three new settings in
config.yml:Key Default Description expelCommandspawnConsole command run when an expelled player has no destination obsidianScoopingRadius5Block radius (0–15) checked for nearby obsidian during bucket use obsidianScoopingCooldown1Minutes before a player can scoop obsidian again (minimum: 1)
Internal / Developer Changes
- Added a generic Map API (
api/map) so addon authors can integrate with any web-map plugin. - Extensive SonarCloud quality pass: sealed classes,
ChatColorremoval, lambda/@Overridestyle, variable-shadowing fixes, cognitive-complexity reductions (see PR #2875). - Removed unnecessary
publicmodifiers from JUnit 5 test classes and methods (PR #2849). - Added
CLAUDE.mdproject guidance file for AI-assisted development (PR #2848). - Resolved all previously failing and skipped tests; test suite is now fully green (PR #2872).
- Added public API method for reading Why-debug flag messages from
FlagListener(PR #2857).
What's Changed
- Fix lava bucket duplication exploit with obsidian scooping cooldown by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2842
- Fix NPE in purge unowned command when island world is null by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2843
- Fix NPE in StandardSpawnProtectionListener for end/nether explosions by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2844
- Fix error message when setting home by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2845
- ⚙️ 🔡 Add expelCommand config for expelled player fallback by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2846
- Add Copilot instructions setup by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2848
- chore: remove public modifiers from JUnit 5 test methods by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2849
- ⚙️ Run commands when blueprint bundle is pasted by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2852
- Fix black glass description by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2853
- ⚙️ 🔡 Add AdminTeamSetMaxSizeCommand by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2851
- ⚙️ 🔡 Show team size in admin info and add coop/trust placeholders by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2854
- ⚙️ 🔡 Add WIND_CHARGE island protection flag by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2855
- ⚙️ Add configurable obsidian scooping radius by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2856
- Add public API for Why debug reporting in FlagListener by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2857
- 🔡 Add /island lock command by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2858
- 🔡 Add pagination to DefaultHelpCommand by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2859
- ⚙️ Add configurable obsidian scooping cooldown duration by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2860
- ⚙️ Add BlueMap hook for island markers by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2861
- Add projectile support to geo-limit-settings by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2863
- Fix island settings comparator by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2864
- ⚙️ 🔡 Add SPAWN_PROTECTION world setting flag by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2865
- Fix player XP not resetting on team join or island creation by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2866
- 🔡 Add pagination to blueprint management GUI by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2867
- Fix BSkyBlock end world protection by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2868
- 🔡 Add bypass lock notification message by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2869
- Fix sugar cane / cocoa beans / nether wart protection flags by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2870
- Fix all failing and skipped tests by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2872
- Fix BlueMap hook registration error by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2874
- Fix SonarCloud issues (low / medium / high) by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2875
- Fix color codes in multi-line translated strings by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2877
- 🔡 Make home list clickable in chat by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2879
- Merge force-field fling feature by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2880
- Fix translation hover text by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2882
- ⚙️ Add Dynmap hook for island border display by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2883
- Add area markers and public API to BlueMapHook by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2884
- ⚙️ Add generic Map API for web-map addon integration by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2885
- Fix players falling into void on new island creation by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2890
- Release 3.12.0 by @tastybento
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.11.2...3.12.0
New Release Highlights
- Visitors cannot steal items from copper golems by hitting them
- ⚙️ 🔡 🔺 New
RAID_TRIGGERisland protection flag replaces the oldVISITOR_TRIGGER_RAIDworld setting, giving island owners granular control over who can trigger raids - ⚙️ 🔡 Economy/Vault integration for blueprint bundle costs — admins can now charge players to choose a blueprint when creating or resetting islands
- New
/bbox placeholders(aliasph) GUI and/bbox dump-placeholderscommand for browsing and documenting all registered placeholders - Automatic update notification banner on startup when a newer BentoBox version is available
- 🔺 Performance: island loading is now dramatically faster on servers with many islands (spatial hash replaces nested TreeMap — addresses servers that hung at "Loading islands from database...")
- Fixed NETHER_PORTAL / END_PORTAL protection flags being bypassed when Paper had
misc.enable-nether: false - Fixed
/bbox purge regionsnot deleting nether/end region files, and corrected login-check logic and scan reporting - BentoBox teleports now use
TeleportCause.PLUGINinstead ofUNKNOWN, fixing compatibility with Essentials/back
Compatibility
✔️ Paper Minecraft 1.21.5 - 1.21.1 ✔️ Java 21
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!
🔺 Config migration note: The
VISITOR_TRIGGER_RAIDworld setting has been removed. It is replaced by the new per-islandRAID_TRIGGERprotection flag. Review your game mode configs after upgrading.Legend
- 🔡 locale files may need to be regenerated or updated.
- ⚙️ config options have been removed, renamed or added.
- 🔺 special attention needed.
New Features
⚙️ 🔡 🔺 RAID_TRIGGER Protection Flag (replaces VISITOR_TRIGGER_RAID)
[PR #2801](https://github.com/BentoBoxWorld/BentoBox/pull/2801)
The
VISITOR_TRIGGER_RAIDworld setting has been converted into a proper island protection flag calledRAID_TRIGGER. Island owners can now configure the minimum rank required to trigger a raid on their island (visitor, member, trusted, owner, etc.) via the island settings panel. Players attempting to trigger a raid below the configured rank will have their action blocked without consuming their Bad Omen effect. By default, only members and above can trigger raids — matching previous behaviour.⚙️ 🔡 Economy Integration for Blueprint Bundle Costs
[PR #2806](https://github.com/BentoBoxWorld/BentoBox/pull/2806)
Admins can now assign a Vault economy cost to blueprint bundles. A cost editor is available in the admin GUI. When economy is enabled and multiple bundles are available, players will see costs displayed and must be able to afford a bundle before selecting it. A new config option
charge-for-blueprint-on-reset(default:false) controls whether the cost also applies when resetting an island. Costs are silently skipped when Vault/economy is not installed.Placeholder Browser GUI and Dump Command
[PR #2803](https://github.com/BentoBoxWorld/BentoBox/pull/2803)
Two new admin tools for managing placeholders:
/bbox placeholders(aliasph) — opens an interactive GUI showing all registered placeholders organised by addon, with resolved values./bbox dump-placeholders— generates a Markdown file documenting every registered placeholder, useful for documentation and the BentoBoxWorld docs site.
Panel appearance can be customised via
BentoBox/panels/placeholder_panel.ymlandplaceholder_list_panel.yml.Automatic Update Notifications
[PR #2834](https://github.com/BentoBoxWorld/BentoBox/pull/2834)
BentoBox now checks for newer releases on startup and prints a coloured banner to the console if an update is available. The check runs asynchronously and fails silently on network errors. Development builds skip the check entirely.
Performance
🔺 Faster Island Loading — Spatial Hash for IslandGrid
[PR #2840](https://github.com/BentoBoxWorld/BentoBox/pull/2840)
The internal island grid has been rewritten to use a spatial hash map instead of nested TreeMaps. This reduces island loading from O(n²) to O(n) average-case, directly fixing the issue where servers with large numbers of islands would hang at "Loading islands from database...". Also corrects a bug that could cause large islands to be missed by coordinate lookups (relevant to plugins like Stranger Realms).
Bug Fixes
🔺 Addon Binary Compatibility and Class Loading Fix
[PR #2836](https://github.com/BentoBoxWorld/BentoBox/pull/2836)
Restores the
ImmutableSet<UUID>return type onIsland.getMemberSet(), which had been changed toSet<UUID>and was causingNoSuchMethodErrorat runtime for addons compiled against earlier BentoBox versions. Also fixes anIllegalStateException: Recursive updateinAddonClassLoaderthat caused startup failures for addons with cross-addon dependencies (e.g. DimensionalTrees).Fix NETHER_PORTAL / END_PORTAL Flag Bypass
[PR #2802](https://github.com/BentoBoxWorld/BentoBox/pull/2802)
When Paper's
misc.enable-nether(orenable-end) was set tofalse, BentoBox's portal handling bypassed the Bukkit event bus entirely, allowing visitors to use portals regardless of the protection flag. Events are now properly routed throughBukkit.getPluginManager().callEvent()so flag checks fire correctly.Fix Purge Regions
[PR #2841](https://github.com/BentoBoxWorld/BentoBox/pull/2841) [PR #2804](https://github.com/BentoBoxWorld/BentoBox/pull/2804) [PR #2805](https://github.com/BentoBoxWorld/BentoBox/pull/2805)
Several fixes to the
/bbox purge regionscommand:- Nether/end worlds were not being detected correctly due to early evaluation before addon worlds loaded
- The recent-login protection check had inverted logic and only checked the island owner rather than all team members
- Region files in nether and end worlds were not being deleted
- Scan reports now show how many islands are blocked by level thresholds vs. protection flags
Fix Copper Golem Item Theft by Visitors
[PR #2799](https://github.com/BentoBoxWorld/BentoBox/pull/2799)
Visitors could steal items held by Copper Golems by hitting them. This has been fixed.
Fix TeleportCause for Plugin-Initiated Teleports
[PR #2800](https://github.com/BentoBoxWorld/BentoBox/pull/2800)
BentoBox teleports (home, safe-spot etc.) now correctly use
TeleportCause.PLUGINinstead ofTeleportCause.UNKNOWN. This fixes compatibility with plugins like Essentials where/backwould not work after a BentoBox teleport.Fix force-shown Integer in Panel Configuration
[PR #2832](https://github.com/BentoBoxWorld/BentoBox/pull/2832)
Setting
force-shown: Nin a panel YAML now correctly forces all rows 1 through N to be visible, rather than only the last row. The list formforce-shown: [2, 4]is unaffected.
Internal / Developer Changes
A large batch of code quality improvements driven by SonarCloud analysis: sealed classes, removal of deprecated
ChatColorAPI, lambda and@Overridestyle fixes, variable shadowing, cognitive complexity reduction inTemplateReader, production code quality improvements, and replacement of deprecatedEntityDamageByEntityEventandLingeringPotiontest APIs. Extensive new JUnit 5 test suites added forClosestSafeSpotTeleport,SQLDatabaseHandler,BlueprintPaster,IslandTeamInviteGUI,DefaultPasteUtil, and others. Placeholder panel pagination deduplicated intoAbstractPanel.
What's Changed
- Fix Javadoc @link syntax in getPrimaryIsland method by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2792
- Fix Copper Golem item theft via player interaction by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2799
- Add unit tests for homeTeleportAsync(Island, User, boolean) overload by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2794
- ⚙️ 🔡 🔺 Convert VISITOR_TRIGGER_RAID world setting to RAID_TRIGGER protection flag by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2801
- Use TeleportCause.PLUGIN instead of TeleportCause.UNKNOWN for plugin-initiated teleports by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2800
- ⚙️ Add placeholder browser GUI and dump command (#1332) by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2803
- Fix NETHER_PORTAL flag bypass when paper misc.enable-nether is false by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2802
- Refactor AdminPurgeRegionsCommand to dynamically handle nether and end world regions by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2804
- Fix purge regions not deleting nether/end region files by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2805
- ⚙️ 🔡 Add economy integration for blueprint bundle costs by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2806
- Refactor command argument checks and enhance null safety in various commands by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2807
- Deduplicate PlaceholderPanel pagination into AbstractPanel by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2808
- Fix SonarCloud HIGH severity code smells by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2810
- Fix SonarCloud: Disabled tests, parameterized tests by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2814
- Fix SonarCloud: Remove redundant Mockito eq() and commented-out code by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2811
- [WIP] Update code style based on SonarCloud feedback by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2824
- [WIP] Fix code style improvements based on SonarCloud feedback by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2823
- Fix scheduler thread leak in ExpiringMapTest when assertions fail by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2822
- Fix scheduler thread leaks in ExpiringMapTest by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2821
- Ensure ExpiringMap.shutdown() always runs in tests via try/finally by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2819
- Fix leaked MockedStatic handle for IslandsManager in TestBentoBox by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2818
- Ensure ExpiringMap.shutdown() always runs in tests via try/finally by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2820
- Fix SonarCloud: Code style — lambdas, @Override, collapsible ifs by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2812
- Fix SonarCloud: Variable shadowing in tests and assertion improvements by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2813
- Fix SonarCloud: Production code quality improvements by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2815
- Fix SonarCloud: Sealed classes, deprecated API, ChatColor removal by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2816
- Fix SonarCloud: Replace deprecated EntityDamageByEntityEvent and LingeringPotion in tests by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2817
- fix: reduce BentoBox monster-class coupling from 24 to 20 (S1200) by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2826
- Fix Sonar code quality issues: S5361, S3776 complexity by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2825
- Reduce cognitive complexity in TemplateReader by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2827
- Add JUnit5 tests for ClosestSafeSpotTeleport by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2828
- Add JUnit 5 tests for SQLDatabaseHandler by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2830
- Implement comprehensive BlueprintPasterTest suite by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2829
- Add JUnit 5 tests for IslandTeamInviteGUI by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2831
- Add JUnit5 tests for DefaultPasteUtil by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2833
- Add automatic update notifications on startup by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2834
- Fix force-shown integer value not showing correct number of rows by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2832
- 🔺 Fix binary-incompatible getMemberSet() return type and AddonClassLoader recursive update by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2836
- 🔺 Replace IslandGrid nested TreeMap with spatial hash by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2840
- Fix purge regions: nether detection, login check inversion, and scan report by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2841
- Version 3.11.2 by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2791
New Contributors
- @Copilot made their first contribution in https://github.com/BentoBoxWorld/BentoBox/pull/2792
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.11.1...3.11.2
This is a bug fix release.
Compatibility
- ✔️ Paper Minecraft 1.21.5 - 1.21.11
- ✔️ Java 21
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!
Legend
- 🔡 locale files may need to be regenerated or updated.
- ⚙️ config options have been removed, renamed or added.
- 🔺 special attention needed.
What's Changed
- 🔡 Update PODZOL translation in zh-CN.yml by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2786
- Changes to improve code per IntelliJ by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2787
- Release 3.11.1 by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2788
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.11.0...3.11.1
This release adds support for Paper 1.21.11 and fixes some bugs. There are no feature differences from the previous version.
Compatibility
✔️ Paper Minecraft 1.21.5 - 1.21.11 ✔️ Java 21
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!
Legend
- 🔡 locale files may need to be regenerated or updated.
- ⚙️ config options have been removed, renamed or added.
- 🔺 special attention needed.
What's Changed
- Mokito 5 redo by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2772
- Avoid blank nms blocks by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2778
- Fix bug with shift to using Bukkit API if distance isn't greater than by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2779
- Implements ability for Player Heads to use CMD by @BONNe in https://github.com/BentoBoxWorld/BentoBox/pull/2777
- Adds a bukkit to adventure conversion. Could be useful. by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2782
- Mojang mapped by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2783
- Gradle conversion - compiles and tests by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2784
- Version 3.11.0 by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2785
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.10.1...3.11.0
Compatibility
✔️ Minecraft 1.21.5 - 1.21.10 ✔️ Java 21
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!
Legend
- 🔡 locale files may need to be regenerated or updated.
- ⚙️ config options have been removed, renamed or added.
- 🔺 special attention needed.
What's Changed
- Fix for #2769 portal memory leak by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2770
- Release 3.10.1 by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2771
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.10.0...3.10.1
New In This Release
- Support for new Stranger Realms game mode - A scary new survival experience where the overworld is shadowed by a terrifying, inverted dimension called the Upside Down. Inspired by the TV Show.
- Updated Ukrainian locale
- Bug fixes
Compatibility
✔️ Minecraft 1.21.5 - 1.21.10 ✔️ Java 21
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!
Legend
- 🔡 locale files may need to be regenerated or updated.
- ⚙️ config options have been removed, renamed or added.
- 🔺 special attention needed.
What's Changed
- Add shelf block protection #545 by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2757
- API: Set addon on login. by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2759
- 🔡 The Ukrainian localization has been improved and updated by @GIGABAIT93 in https://github.com/BentoBoxWorld/BentoBox/pull/2758
- Better grid storage for arbitrary island positions. by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2760
- Record islands becoming unowned by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2761
- More api by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2762
- Avoid trying to load files starting with ._ by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2763
- Check if the currently open panel is equal to the inventory that was … by @Rossterd in https://github.com/BentoBoxWorld/BentoBox/pull/2767
- Release 3.10.0 by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2765
New Contributors
- @GIGABAIT93 made their first contribution in https://github.com/BentoBoxWorld/BentoBox/pull/2758
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.9.2...3.10.0
New In This Release
- Adds more backward compatibility for servers before 1.21.10
Compatibility
✔️ Minecraft 1.21.5 - 1.21.10 ✔️ Java 21
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!
Legend
- 🔡 locale files may need to be regenerated or updated.
- ⚙️ config options have been removed, renamed or added.
- 🔺 special attention needed.
What's Changed
- #2750 copper golem check by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2754
- Version 3.7.2 by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2755
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.9.1...3.9.2
New In This Release
- Adds backward compatibility to 1.21.5+
- Fixes protection flag for Trial Spawners
Compatibility
✔️ Minecraft 1.21.5 - 1.21.10 ✔️ Java 21
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!
Legend
- 🔡 locale files may need to be regenerated or updated.
- ⚙️ config options have been removed, renamed or added.
- 🔺 special attention needed.
What's Changed
- Add backward compatibility to 3.9.0. #2750 by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2751
- Fixes trial spawners working even with spawner flag disabled. by @BONNe in https://github.com/BentoBoxWorld/BentoBox/pull/2749
- Release 3.9.1 by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2752
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.9.0...3.9.1
New In This Release
- Adds protections for copper chests and golems
- API added for ExpiringSets
- API added to allow islands to be off grid coordinates
Compatibility
✔️ Minecraft 1.21.10 ✔️ Java 21
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!
Legend
- 🔡 locale files may need to be regenerated or updated.
- ⚙️ config options have been removed, renamed or added.
- 🔺 special attention needed.
What's Changed
- API auto center fix option by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2745
- Add API to allow a Game Mode to bypass range checks by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2746
- Copper golem and copper chest protection by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2747
- Version 3.9.0 by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2748
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.8.1...3.9.0
New In This Release
- Bug fix - admin command to copy blocks for blueprint was throwing an error and not copying.
- Bug fix - added color codes to some of the setting flags where they were missing
Compatibility
✔️ Minecraft 1.21.4 to 1.21.10 ✔️ Java 21
Upgrading
- As always, take backups just in case. (Make a copy of everything!)
- Stop the server
- Replace the BentoBox jar with this one
- (Optional) Move or delete the English locale files so they are updated
- Restart the server
- You should be good to go!
Legend
- 🔡 locale files may need to be regenerated or updated.
- ⚙️ config options have been removed, renamed or added.
- 🔺 special attention needed.
What's Changed
- Fix for blueprint copying #2741 by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2742
- 🔡 Minor changes for color codes in English locale.
- Release 3.8.1 by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2743
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.8.0...3.8.1
New In This Release
- Added support from 1.21.10
Compatibility
✔️ Minecraft 1.21.4 to 1.21.10 ✔️ Java 21
Upgrading
- As always, take backups just in case. (Make a copy of everything!)
- Stop the server
- Replace the BentoBox jar with this one
- Move or delete locale files
- Restart the server
- You should be good to go!
Legend
- 🔡 locale files may need to be regenerated or updated.
- ⚙️ config options have been removed, renamed or added.
- 🔺 special attention needed.
What's Changed
- 1.21.10 compatibility by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2738
- Release 3.8.0 by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2739
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.7.4...3.8.0
New In This Release
- Oraxen support (supports Level addon, which will also be updated)
- Bug fixes
Compatibility
✔️ Minecraft 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8 ✔️ Java 21
Upgrading
- As always, take backups just in case. (Make a copy of everything!)
- Stop the server
- Replace the BentoBox jar with this one
- Move or delete locale files
- Restart the server
- You should be good to go!
Legend
- 🔡 locale files may need to be regenerated or updated.
- ⚙️ config options have been removed, renamed or added.
- 🔺 special attention needed.
What's Changed
- Reworked deletion for purge by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2729
- Oraxen hook by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2731
- Add explicit get ID method by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2732
- Added block deletion of oraxen blocks by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2733
- Don't generate flags before addons loaded. by @stuffyerface in https://github.com/BentoBoxWorld/BentoBox/pull/2735
- Code improvements by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2734
- Java doc enhancements by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2736
- Version 3.7.4 by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2730
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.7.3...3.7.4

