Перейти к содержимому
Mineforgian

Данные могли устареть: источник временно недоступен, показан кэш.

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.

Загрузки
27K
Подписчики
36
Обновлён
1 июля 2026 г.
Лицензия
EPL-2.0

Опубликован 13 мая 2023 г.

SkyBlock, OneBlock, AcidIsland, and more — all in one plugin

BentoBox powers island-style game modes for Paper servers. Pick the game modes you want, drop them in, and you're running. No forks, no outdated code — one actively maintained platform that stays current with every Minecraft release.

Game modes available:

  • BSkyBlock — classic SkyBlock, successor to the original ASkyBlock
  • AOneBlock — the popular OneBlock experience
  • AcidIsland — survive in a sea of acid
  • Boxed — expand your world by completing advancements
  • CaveBlock — underground survival
  • SkyGrid — scattered blocks, maximum adventure
  • Poseidon — underwater island challenge
  • And more community-created game modes

Why server admins choose BentoBox:

  • Run multiple game modes on one server with shared features (challenges, warps, levels, leaderboards)
  • 20+ addons let you customize exactly the experience you want
  • Actively maintained and always up to date with the latest Minecraft version
  • Free and open source — used on 1,100+ servers worldwide
  • Rich API for developers who want to build custom addons

Browse all BentoBox Addons | Full Documentation

Installation

  1. Place the BentoBox jar in your plugins folder
  2. Start the server
  3. Download the game mode and feature addons you want from this site or download.bentobox.world and place them in the plugins/BentoBox/addons folder
  4. Restart the server — you're good to go

NOTE: Older versions supported Spigot, but now we can only support Paper.

Ченджлог

3.19.0Релиз26.1.1, 26.1.2, 26.2 · 8 июля 2026 г.

Release Highlights

  • 🔡 New FISHING protection 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_RESPAWN world 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 register can 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 settings dropped 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

  1. As always, take backups just in case. (Make a copy of everything!)
  2. Stop the server.
  3. Replace the BentoBox jar with this one.
  4. Restart the server.
  5. Regenerate/merge any customized locale, config.yml, and panel templates so the new keys appear (see the notes below).
  6. 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_RESPAWN world setting). Economy-sensitive servers that want the old "always respawn at island home" behaviour should disable this setting.

⚙️ Config note: A new bluemap section (island-markers, island-areas, and marker customization) is added to config.yml, both toggles default true. The team_panel.yml and team_invite_panel.yml templates 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_RESPAWN setting, /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 delete with 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-markers and bluemap.island-areas (both default true) 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 / ShapeMarker options (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#getTranslation caches 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.yml reusable workflow to ca2dcd1 / fe4b1f0 [PR #3002]
  • Refreshed stale facts in CLAUDE.md

What's Changed

Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.18.1...3.19.0

3.18.1Релиз26.1.1, 26.1.2, 26.2 · 1 июля 2026 г.

Release Highlights

BentoBox 3.18.1 is a maintenance release. The headline fix restores multi-line colour in GUIs; the rest hardens the build and release pipeline.

  • 🐛 Multi-line lore & names keep their colour — text after the first line of a tooltip no longer falls back to the default purple. Fixes GUI tooltips across all addons (reported on Challenges).

Compatibility

✔️ Paper Minecraft 1.21.5 – 26.2 ✔️ Java 25+

Upgrading

  1. As always, take backups just in case. (Make a copy of everything!)
  2. Ensure your server is running on a Java 25-capable Paper build for the Minecraft 26.x line.
  3. Stop the server.
  4. Replace the BentoBox jar with this one.
  5. Restart the server.
  6. You should be good to go!

Bug Fixes

Multi-line lore and text lose colour after the first line

[PR #2999]

Multi-line names and lore lost their formatting after the first line — the second and subsequent lines rendered in the default (purple) colour even when each source line specified one, affecting GUI tooltips across all addons. Util.componentToLegacy emitted a colour/format code only before the first line of a multi-line text node; after lore was split on newlines, every line after the first had no colour code left. The serializer now re-emits the active colour (and any decorations, in the correct order) after each newline, so each tooltip line keeps its colour.


Other Improvements

Build: scope vendor repositories to fix flaky dependency resolution

[PR #3000]

CI intermittently failed to resolve us.dynmap, net.momirealms, de.oliver (FancyNpcs/FancyHolograms) and MultiLib: Gradle queries repositories in declaration order, and a flaky host returning HTTP 520 aborted resolution before the authoritative repo was reached. Each vendor group is now scoped to its authoritative repository with exclusiveContent, the FancyPlugins repo was updated to its new repo.fancyinnovations.com home, and MultiLib now resolves from Clojars — so one host's outage can no longer cascade into unrelated groups.

Release publishing pipeline

Modrinth and CurseForge publishing now reuse the built release asset instead of rebuilding, CurseForge game versions include MC 1.21.5 and 26.2, and Hangar publishing is enabled. Internal CI only — no effect on the plugin itself.


What's Changed

Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.18.0...3.18.1

3.16.2Релиз1.21.11, 26.1, 26.1.1 · 19 мая 2026 г.

New in this release

A small follow-up patch with one defensive hardening, one inventory-loss fix, and CraftEngine API compatibility.

  • 🔺 Island.setRange no longer silently corrupts island data. A misbehaving third-party addon was calling setRange with a value that disagreed with the game mode's configured distance-between-islands. On the next restart, BentoBox refused to load the affected islands and panic-disabled with Island distance mismatch, taking the whole island system offline. setRange now refuses any value that disagrees with the configured distance (and logs the calling stack frame), unless the game mode opts out via GameModeAddon.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-rewrite CustomItem<ItemStack> API and broke on recent CraftEngine releases. The hook now uses BukkitItemDefinition#buildBukkitItem() and works against CraftEngine 26.5.

Compatibility

✔️ Paper Minecraft 1.21.5 – 1.21.12 ✔️ Java 21+

Upgrading

  1. As always, take backups just in case.
  2. Stop the server.
  3. Replace the BentoBox jar with this one.
  4. Restart the server.
  5. You should be good to go!

🔺 Island.setRange contract change. setRange was 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 cause Island distance mismatch on the next load) and logs a warning naming the caller. Game modes that legitimately resize claims continue to work — they already override GameModeAddon.isEnforceEqualRanges() to return false. If you're maintaining an addon and you see warnings like Refusing 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

Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.16.1...3.16.2

3.16.1Релиз1.21.11, 26.1, 26.1.1 · 17 мая 2026 г.

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>/bentobox folders 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, the bentobox-deleteIsland MultiLib subscriber, and the IslandDeletion DB recovery loader.
  • WorldRegenerator slimmed to just regenerateChunk(Chunk); WorldRegeneratorImpl is now a small Bukkit-only delegate to World#regenerateChunk(int, int) used by CleanSuperFlatListener.
  • IslandDeletionManager#inDeletion(Location) now queries live island state (Island#isDeletable()) instead of a side-channel HashSet, so it can never drift out of sync.

Compatibility

✔️ Paper Minecraft 1.21.5 – 26.1.2 ✔️ Java 21+

Upgrading

  1. As always, take backups just in case.
  2. Stop the server.
  3. Replace the BentoBox jar with this one.
  4. Restart the server.
  5. (Optional) Delete any stale <world>/bentobox folders in your world container — they are no longer used.
  6. You should be good to go!

🔺 Reap timing. When /bbox admin delete finishes, 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 deleted after the delete. But again, it will only be removed if the region files are clear.

Legend

  • 🔺 special attention needed.

What's Changed

Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.16.0...3.16.1

3.16.0Релиз1.21.11, 26.1, 26.1.1 · 10 мая 2026 г.

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-islands cap and island.number.<n> permission, closing a clean bypass that previously allowed admins (and team setowner) to push players over their limit.
  • 🐛 Safe respawn fallbackISLAND_RESPAWN no longer drops players at world spawn (0,0) when their home block has been removed; it now walks a fallback chain ending in SafeSpotTeleport to find a real safe spot on the island.
  • 🐛 Offline growth: vines & treesOFFLINE_GROWTH now 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 helpersgetItemStack(id) and getItemId(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

  1. As always, take backups just in case. (Make a copy of everything!)
  2. Stop the server.
  3. Replace the BentoBox jar with this one.
  4. Restart the server.
  5. If you intend to enable isTeamsDisabled in a game mode, run /[admin] team disbandall once after the upgrade to clean up pre-existing teams (see the callout below).
  6. You should be good to go!

⚙️🔺 Teams-disabled is opt-in per game mode. A new WorldSettings#isTeamsDisabled() method (default false) 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 setowner and /[admin] team setowner refuse 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 setowner had 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 updated commands.admin.team.kick.cannot-kick-owner message that points admins to setowner/disband. The dead commands.admin.team.kick.success-all key 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 disbandall

[PR #2975] Closes #2965

A new WorldSettings#isTeamsDisabled() (default false) 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 with commands.island.team.errors.teams-disabled:

  • /island team invite and invite accept (TEAM invitations only — COOP and TRUST invitations remain accepted)
  • /island team kick, leave, promote, demote, setowner
  • /[admin] team add

Read-only commands (/island team panel, 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 disbandall strips 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 flipping isTeamsDisabled on to clean up pre-existing teams.

🔌 CraftEngine Hook Helpers

[PR #2970] [PR #2973]

Two new helpers on CraftEngineHook, mirroring the equivalents on OraxenHook and ItemsAdderHook:

  • getItemStack(String id) returns an Optional<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 (or null) — 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-islands Cap

[PR #2966] Fixes #2908

AdminTeamSetownerCommand previously allowed transfers to a player who already owned their maximum allowed concurrent islands and only emitted a warning afterwards; IslandTeamSetownerCommand had no check at all. Both now compute the recipient's current concurrent-islands count and permission-aware cap in canExecute and refuse the transfer when at or above the limit. The user path uses the existing commands.island.team.setowner.errors.at-max locale entry; the admin path uses a new commands.admin.team.setowner.errors.at-max that includes the count and limit.

ISLAND_RESPAWN Sent Players to 0,0 When Home Was Unsafe

[PR #2962]

When ISLAND_RESPAWN was enabled and the player's home block had been removed, isSafeLocation() returned false and the respawn fell through to world spawn. IslandRespawnListener now 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 schedule SafeSpotTeleport on 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_GROWTH previously only blocked kelp, bamboo and bamboo saplings on BlockSpreadEvent — vines, cave vines, twisting/weeping vines and any other spreading plant slipped through. Trees and mushrooms growing from a sapling didn't fire BlockGrowEvent at all, so they were never blocked. The listener now uses the source block location for BlockSpreadEvent (so plants growing outward from an island are correctly attributed) and adds a StructureGrowEvent handler for trees/mushrooms.

Admin team kick on Multi-island Players

[PR #2967]

AdminTeamKickCommand previously 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 explicit x,y,z coordinate (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 with commands.admin.team.kick.cannot-kick-owner and points the admin to setowner or disband instead.

Dynmap Area Markers Always Rendered at y=64

[PR #2972]

DynmapHook was creating area markers without a configured Y range, so Dynmap rendered them at the default y=64 regardless of the actual world height. Both setMarker and the public addPolygonMarker now call area.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-owner message; removed the dead success-all key

What's Changed

Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.15.0...3.16.0

3.15.0Релиз1.21.11, 26.1, 26.1.1 · 26 апреля 2026 г.

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 HousekeepingManager handles 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 stop have 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_PICKUP flag 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

  1. Take backups. (Make a copy of everything!)
  2. Stop the server.
  3. Replace the BentoBox jar with this one.
  4. Restart the server.
  5. The keep-previous-island-on-reset config setting has been removed — all resets now soft-delete. Remove it from your game mode configs to avoid warnings.
  6. You should be good to go!

🔺 Purge command changes: /purge regions, /purge status, and /purge stop no 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-reset has been removed. All island resets now soft-delete (equivalent to the old false behaviour, but with deferred disk cleanup). If you previously relied on keep-previous-island-on-reset: true to preserve old islands, use /purge protect on islands you want to keep.

🔡 Locale changes: Several purge-related locale keys have been removed, renamed, or updated. New keys for the deleted subcommand 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

[PR #2933] [PR #2949]

The system has been fundamentally redesigned for reliability and safety. Island resets in non-void worlds now always soft-delete (setting a deletable flag) rather than immediately destroying chunks. A new HousekeepingManager runs 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 the deletable flag in the database, leaving region files on disk until a separate /purge regions run. The new /purge deleted subcommand reaps region files for any island already flagged as deletable, regardless of age. /purge unowned now flags orphaned islands and prompts the admin to run /purge deleted afterwards. 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.), AdminDeleteCommand now soft-deletes and defers physical cleanup; simple void/overworld game modes (AOneBlock, BSkyBlock, etc.) keep the existing DeleteIslandChunks path. Island database rows are removed at server shutdown after region files are confirmed gone, ensuring crash-safe recovery.

The keep-previous-island-on-reset config setting has been removed — all resets now soft-delete by default.

💎 Custom Blueprint Bundle Icons

[PR #2941] Closes #2940

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 PAPER base item using ItemMeta.setItemModel(), allowing resource-pack-defined icons to appear on island selection panels. A new getIconItemStack() API method returns the full ItemStack with model data applied; the existing getIcon() method returning Material remains unchanged for addon compatibility.


Bug Fixes

InvincibleVisitors: XP Orbs Blocked from Tracking Visitors

[PR #2948]

InvincibleVisitorsListener cancelled EntityTargetLivingEntityEvent for 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 the EXPERIENCE_PICKUP flag allowed it. The fix skips cancellation when the entity is an ExperienceOrb; the flag listener remains responsible for controlling whether pickup is actually granted.

BungeeCord Hex Colour Not Recognised in Legacy Conversion

BungeeCords &#RRGGBB hex colour format was not being recognised in legacyToMiniMessage, causing hex colours from BungeeCord-formatted strings to fall through as literal text. The parser now handles this format correctly.

Spurious defaultRank Warnings for PVP Setting Flags

PVP-related setting flags were triggering incorrect defaultRank warning 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.ymlpt-BR.yml) — carries forward from 3.14.2 [PR note]
  • 🔡 Fix typo in Japanese locale file for block count message
  • Add PURGED event reason; fire IslandDeleteEvent immediately 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 AbstractPurgeCommand base 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 deletable in the database but its chunks remain on disk. The actual .mca region files are cleaned up later by the HousekeepingManager (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 deletable and 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 / WorldRegenerator path, 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 deletable flag 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 .mca region 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 confirm before 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 .mca files (plus player data for absent players)
/purge deleted Islands flagged deletable in the DB (from resets, soft-deletes) .mca files for those islands regions

Use /purge <days> for periodic housekeeping of abandoned islands. Use /purge deleted to immediately reap region files for islands that have already been marked for deletion (e.g. after a batch of /is reset or /admin delete operations).

Q: How do I delete orphaned (unowned) islands?

Run /purge unowned. This flags every unowned, non-protected, non-spawn island in the world as deletable (with confirmation). Then run /purge deleted to 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 .mca files 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?

HousekeepingManager is an automated background task that runs the purge on a schedule without admin intervention. It has two independent cycles:

  • Age sweep — runs every interval-days days and behaves like /purge <days> using the configured region-age-days value.
  • Deleted sweep — runs every deleted-interval-hours hours and behaves like /purge deleted, reaping region files for any island already flagged deletable.

Both cycles are disabled by default (housekeeping.enabled: false). Enable and configure them in your BentoBox config.yml under the housekeeping section.

Q: What does /purge protect do, 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 .mca files 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

Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.14.2...3.15.0

3.14.2Релиз26.1, 26.1.1, 26.1.2 · 15 апреля 2026 г.

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

  1. Take backups. (Make a copy of everything!)
  2. Stop the server.
  3. Replace the BentoBox jar with this one.
  4. 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

[d3a04e25] Fixes #2943

The &#RRGGBB hex colour format stopped working in 3.14.1. The root cause was a double-conversion: translateColorCodes serialises hex colours to the BungeeCord §x§R§R§G§G§B§B repeated-character format, but legacyToMiniMessage (called when rendering the message) didn't recognise that format — so &x was silently dropped and each following &R digit 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 &#RRGGBB before 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 defaultRank being below minimumRank. These flag types legitimately use -1 as a disabled state (Island.isAllowed treats >= 0 as 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

Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.14.1...3.14.2

3.14.1Релиз1.21.11, 26.1, 26.1.1 · 11 апреля 2026 г.

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

  1. Take backups. (Make a copy of everything!)
  2. Stop the server.
  3. Replace the BentoBox jar with this one.
  4. Restart the server.

📄 Coming from 3.13.x? Existing .blu blueprint files will continue to load alongside the new .blueprint JSON 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.convertToLegacy was splitting mixed MiniMessage/legacy strings on \n before 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 minimumRank API

[PR #2936]

New Flag.Builder.minimumRank(int) lets addons declare the lowest rank that may be selected for a PROTECTION flag (defaults to VISITOR_RANK, fully backwards-compatible). The auto-assigned CycleClick listener is constructed with the configured minimum so the settings-panel click-cycle won't let players select ranks below it. build() clamps defaultRank up to minimumRank (with a logged warning) so a misconfigured flag still has a selectable default. Adds Flag.getMinimumRank() and Flag.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 .blueprint JSON files instead of zipped .blu binaries. Existing .blu files 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 .blu format to plain JSON .blueprint files. This makes blueprints human-readable, diffable, and easy to edit in any text editor. Existing .blu files 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 itemsPR #2903 — default italic and cross-nested tag handling in the legacy-to-MiniMessage converter.
  • Fix bold and decoration leaking across legacy round-tripPR #2918 (fixes #2917) — bold/italic/underlined/strikethrough/obfuscated leaking into subsequent text segments.
  • Fix bold formatting leaking past prefix substitutionPR #2907
  • Fix extra blank line in confirmation promptsPR #2927 (fixes #2919)
  • Preserve addon placeholders across /bbox reloadPR #2931, PR #2932 (fixes #2930)
  • Skip locale files with invalid BCP-47 tagsPR #2928
  • Hide tooltip clutter in all panelsPR #2924 — banner patterns, potion effects, etc. hidden via the modern TooltipDisplay data component API.
  • Fix locale corrections across 22 languagesPR #2905
  • Preserve mid-text spaces in legacy/MiniMessage round-trip
  • Support MiniMessage in welcome sign locale entries
  • Defer island saves while settings panel is openPR #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_rank placeholder — 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

Комментарии

Загружаем…