
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.
Список изменений
Release Highlights
- 🔡 New
FISHINGprotection flag — Admins and island owners can now stop players fishing into protected areas from outside the island. Defaults to visitor rank, so nothing changes until you raise it. - 🔺 Bed & respawn-anchor spawns are now honored — Dying on an island respawns you at your bed or charged respawn anchor when it's on an island you're a member of. Controlled by the new
BED_ANCHOR_RESPAWNworld setting (enabled by default). - 🐛 End exit portal no longer dumps you at world spawn — Jumping through the end exit portal now routes you to your safe island home on multi-gamemode servers.
- 🐛 Item frames and paintings survive blueprints — Frames keep their facing and contents, and paintings restore their artwork, instead of popping off or facing the wrong way.
- 🔡 Recover islands pending deletion — New
/admin undelete, a stand-on/admin delete, and/admin registercan now rescue soft-deleted islands before their region files are purged. - ⚙️ BlueMap island layer survives reloads — Owner pins and area boxes no longer vanish after
/bluemap reload, plus new config toggles and marker customization. - ⚡ Settings-GUI click spam no longer spikes MSPT — Spam-clicking
/is settingsdropped from ~30–40 MSPT to negligible via in-place panel refresh and a translation cache.
Compatibility
✔️ Paper Minecraft 1.21.5 – 26.2 ✔️ Java 25+
Upgrading
- As always, take backups just in case. (Make a copy of everything!)
- Stop the server.
- Replace the BentoBox jar with this one.
- Restart the server.
- Regenerate/merge any customized locale,
config.yml, and panel templates so the new keys appear (see the notes below). - You should be good to go!
🔺 Respawn behaviour change: Bed and respawn-anchor spawns are now honored on islands the player is a member of. This is on by default (
BED_ANCHOR_RESPAWNworld setting). Economy-sensitive servers that want the old "always respawn at island home" behaviour should disable this setting.
⚙️ Config note: A new
bluemapsection (island-markers,island-areas, and marker customization) is added toconfig.yml, both toggles defaulttrue. Theteam_panel.ymlandteam_invite_panel.ymltemplates gain configurable button icons and name/description keys. Existing configs keep the previous behaviour.
🔡 Locale note: New keys were added for the FISHING flag, the
BED_ANCHOR_RESPAWNsetting,/admin undelete,admin team setowner, and the team-panel member/prospect name & description. All 22 bundled locales were updated in this release.
Legend
- 🔡 locale files may need to be regenerated or updated.
- ⚙️ config options have been removed, renamed, or added.
- 🔺 special attention needed.
New Features
🔡 FISHING protection flag
[PR #3004] Fixes #1687
A new FISHING protection flag lets admins and island owners prevent fishing outside island boundaries — originally needed for Boxed. A FishingListener checks the hook's location, so casting into a protected area from outside is blocked and a blocked cast removes the bobber. Hooking entities is intentionally left to the existing hurting/PVP flags. The flag defaults to visitor rank, so existing servers are unchanged until the required rank is raised.
🔺 Bed and respawn-anchor spawns honored
[PR #3005] Fixes #1632
On death (ISLAND_RESPAWN) and on end-portal return, a vanilla-resolved bed or charged respawn anchor is now honored when it sits on an island the player is at least a member of, in the same game mode. Beds placed while visiting someone else's island, obstructed/broken beds, uncharged anchors, and reset/transferred islands all fall back to the normal island respawn by construction. A new world setting BED_ANCHOR_RESPAWN (default enabled) lets economy-sensitive servers disable the feature entirely. A new public API method IslandsManager#getSafeRespawnLocation(World, UUID) (@since 3.19.0) backs both respawn paths.
🔡 Recover islands pending deletion
[PR #3017]
Islands that are soft-deleted (marked deletable, owner cleared, awaiting the region-file purge) can now be rescued before they're gone:
/admin register <player>on an island pending deletion now shows a confirmation prompt instead of hard-refusing — confirming registers the island to the player and cancels its deletion./admin undelete(new) clears the pending-deletion status of the island you're standing on and leaves it unowned./admin deletewith no player argument (new) soft-deletes the island you're standing on after confirmation, refusing if it still has a team.
Shared restore logic lives in a new IslandsManager.undeleteIsland(Island), symmetric with deleteIsland.
⚙️ BlueMap: survive reloads, config toggles, and marker customization
[PR #3014]
Three improvements to the BlueMap integration:
- Markers now survive
/bluemap reload. BentoBox now registers with BlueMap's own lifecycle (onEnable/onDisable) instead of grabbing the API once at boot, so owner pins and protected-area rectangles are re-populated on every reload and are no longer racy at startup. - New config toggles
bluemap.island-markersandbluemap.island-areas(both defaulttrue) mirror the Dynmap toggles added in 3.17.1, letting admins who run their own markers turn BentoBox's layer off. The marker set is also client-side toggleable in BlueMap's UI. - Marker customization exposes the
POIMarker/ShapeMarkeroptions (icon, max distance, area style) for admins who want to restyle the layer.
⚙️ Configurable team panel button icons
[PR #3010] Fixes #3008
The STATUS, RANK filter, and INVITE buttons in the team management panel previously hardcoded their icons and ignored any icon: set in team_panel.yml. They now honour the template icon, falling back to the previous material when none is set, so admins can (for example) change the rank filter to a HOPPER. Shipped template values match the old icons, so existing installs look identical.
🔡 Customizable member & prospect name/description
[PR #3011] [PR #3013] Fixes #3009
The team-panel member button and invite-prospect button name and description were built entirely in code and referenced locale keys that didn't exist. New keys commands.island.team.gui.buttons.member.{name,description,last-seen} and commands.island.team.invite.gui.buttons.member.{name,description} now drive both the online and offline member names (with a [last_seen] placeholder for offline status) and the rank line, so admins can restyle them. Default values reproduce the previous output exactly.
🔡 Console-friendly admin team setowner
[PR #3003]
admin team setowner gains an optional second argument naming the island's current owner: /[gamemode] admin team setowner <newOwner> [islandOwner]. The named form is location-independent and runs from the console (skipping the confirmation prompt), making it drivable from automation such as Skript — e.g. a "capture the island by killing the owner" game mode. The one-argument in-game form is unchanged, and the concurrent-island cap still applies.
Bug Fixes
End exit portal respawn wrongly used world spawn
[PR #3005] Fixes #1632
Players jumping into the end exit portal were dumped at the server's global spawn on multi-gamemode servers. The listener now triggers on PlayerRespawnEvent's authoritative END_PORTAL reason instead of a stale in-memory tracking map, and routes to the player's safe home using the same resolution as ISLAND_RESPAWN.
Item frames and paintings broken in blueprints
[PR #3006] [PR #3007] Fixes #1752
Item frames survived a blueprint copy but not the round trip: facing direction was never stored, a self-assignment bug meant isFixed was never applied, and paintings lost both their facing and their artwork. Blueprints now store and re-apply the BlockFace facing for any hanging entity, restore the painting Art (skipping unknown keys from newer servers safely), paste paintings at their anchor block with the art pre-applied, and no longer silently drop the rest of a block's entities when one fails to attach. Both new blueprint fields are nullable additions, so existing blueprint files load unchanged.
Performance
⚡ Settings-GUI click spam no longer raises MSPT
[PR #3015] [PR #3016]
Spam-clicking /is settings was costing ~30–40 MSPT. Two rounds of fixes bring it down to negligible:
- In-place tabbed-panel refresh rebuilds the panel contents instead of re-opening the inventory on every click.
- Rejected clicks are now cheap — the cooldown check runs first (only map lookups), the plain-text panel title is cached, and the "slow down" notice is translated at most once per cooldown window.
User#getTranslationcaches the expensive MiniMessage → Component → legacy conversion, keyed purely on the input string (measured ~143× faster warm, ~37× faster on a full panel rebuild). The cache is bounded by size (10,000) and idle time (30 min), needs no reload invalidation, and can't go stale because placeholders are substituted before conversion.
Other Improvements
- Bumped the pinned
publish-platforms.ymlreusable workflow toca2dcd1/fe4b1f0[PR #3002] - Refreshed stale facts in
CLAUDE.md
What's Changed
- 🔡 Add FISHING protection flag by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/3004
- 🔺 Fix end exit portal respawn and honor bed/anchor spawns by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/3005
- 🐛 Fix #1752: Item frames and paintings in blueprints by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/3006
- 🐛 Paste paintings at their anchor block with art pre-applied by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/3007
- 🔡 Recover islands pending deletion: register, undelete, and stand-on delete by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/3017
- ⚙️ BlueMap: survive reloads + config toggles and marker customization by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/3014
- ⚙️ Make team_panel button icons configurable via the template by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/3010
- 🔡 Add customisable member/prospect name & description locale keys by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/3011
- 🔡 Style offline member name via the member.name locale key by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/3013
- 🔡 Make admin team setowner console/automation friendly by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/3003
- ⚡ Refresh tabbed panels in place to stop settings-GUI click spam raising MSPT by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/3015
- ⚡ Cut settings-GUI click-spam MSPT: translation cache + cheaper rejected clicks by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/3016
- ci: bump pinned publish-platforms.yml to ca2dcd1 by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/3002
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.18.1...3.19.0
