版本发布 8
## 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 fallback** — `ISLAND_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 & trees** — `OFFLINE_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 helpers** — `getItemStack(id)` and `getItemId(item)` let addons render and recognise CraftEngine custom items without depending on CraftEngine directly. ### Compatibility ✔️ Paper Minecraft 1.21.5 – 26.1.2 ✔️ 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](https://github.com/BentoBoxWorld/BentoBox/pull/2975)] Closes [#2965](https://github.com/BentoBoxWorld/BentoBox/issues/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](https://github.com/BentoBoxWorld/BentoBox/pull/2970)] [[PR #2973](https://github.com/BentoBoxWorld/BentoBox/pull/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](https://github.com/BentoBoxWorld/BentoBox/pull/2966)] Fixes [#2908](https://github.com/BentoBoxWorld/BentoBox/issues/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](https://github.com/BentoBoxWorld/BentoBox/pull/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](https://github.com/BentoBoxWorld/BentoBox/pull/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](https://github.com/BentoBoxWorld/BentoBox/pull/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](https://github.com/BentoBoxWorld/BentoBox/pull/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](https://github.com/BentoBoxWorld/BentoBox/pull/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 * 🐛 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
## 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](https://github.com/BentoBoxWorld/BentoBox/pull/2933)] [[PR #2949](https://github.com/BentoBoxWorld/BentoBox/pull/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](https://github.com/BentoBoxWorld/BentoBox/pull/2941)] Closes [#2940](https://github.com/BentoBoxWorld/BentoBox/issues/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](https://github.com/BentoBoxWorld/BentoBox/pull/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.yml` → `pt-BR.yml`) — carries forward from 3.14.2 [[PR note](https://github.com/BentoBoxWorld/BentoBox/pull/2933)] * 🔡 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](https://github.com/BentoBoxWorld/BentoBox/pull/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 * 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 `.gitignore` by @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 `.gitignore` by @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
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](#3140-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](https://github.com/BentoBoxWorld/BentoBox/commit/d3a04e251)] Fixes [#2943](https://github.com/BentoBoxWorld/BentoBox/issues/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](https://github.com/BentoBoxWorld/BentoBox/commit/d2dd28e21)] 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](https://github.com/BentoBoxWorld/BentoBox/commit/bdc20675b)] 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 * 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
This is a bug fix release. ## Compatibility ✔️ Paper Minecraft 1.21.5 - 1.21.11 ✔️ Java 21 ## Upgrading 1. **As always, take backups just in case.** (Make a copy of everything!) 2. Stop the server 4. Replace the BentoBox jar with this one 7. Restart the server 8. 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
## 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 1. **As always, take backups just in case.** (Make a copy of everything!) 2. Stop the server 4. Replace the BentoBox jar with this one 5. Move or delete locale files 7. Restart the server 8. 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
## New In This Release This is a bug fix release: * Some databases had "junk" deleted island data in them and the recent change related to the purge regions beta feature loaded them. These legacy island "stomped" on some real islands, which results in some player's "losing" their islands. The islands are still there but the old junk island was overwriting the island. This release reverts that change. As such, the purge regions beta feature may not work optimally. We plan to optimize it in a future release. ## Compatibility ✔️ Minecraft 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8 ✔️ Java 21 ## Upgrading 1. **As always, take backups just in case.** (Make a copy of everything!) 2. Stop the server 4. Replace the BentoBox jar with this one 5. Move or delete locale files 7. Restart the server 8. 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 * Minor changes to portal linking by @Rossterd in https://github.com/BentoBoxWorld/BentoBox/pull/2721 * Try to address issue with deleted status by @BONNe in https://github.com/BentoBoxWorld/BentoBox/pull/2724 * Fix: use the correct error message if the player is not the owner of the island by @Lazerstricks in https://github.com/BentoBoxWorld/BentoBox/pull/2723 * Fix: do not load deleted island to database. Some databases have junk islands. * Release 3.7.3 by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2725 ## New Contributors * @Rossterd made their first contribution in https://github.com/BentoBoxWorld/BentoBox/pull/2721 * @Lazerstricks made their first contribution in https://github.com/BentoBoxWorld/BentoBox/pull/2723 **Full Changelog**: https://github.com/BentoBoxWorld/BentoBox/compare/3.7.2...3.7.3
## New In This Release This is a bug fix release: * Reduces GUI click spamming protection - this was triggering far too much and preventing settings from being made * If the BentoBox config.yml setting `keep-previous-island-on-reset: true` was set, deleted island spaces were used for new islands/boxes/realms. ## Compatibility ✔️ Minecraft 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8 ✔️ Java 21 ## Upgrading 1. **As always, take backups just in case.** (Make a copy of everything!) 2. Stop the server 4. Replace the BentoBox jar with this one 5. Move or delete locale files 7. Restart the server 8. 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 * Release 3.7.2 by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2718 **Full Changelog**: https://github.com/BentoBoxWorld/BentoBox/compare/3.7.1...3.7.2
## New In This Release This adds compatibility for Paper 1.21.8. Adds a new beta admin command `purge regions` that deletes old islands by removing regions. This can also be used instead of having islands deleted. Set the BentoBox config.yml setting `keep-previous-island-on-reset: true` and then run purge every so often. The advantage of having the region file delete is that they will be regenerated completely when revisited. **This is a beta feature so only use if you have backups.** It has been tested. Region purging is very fast. ## Purge Logic Here’s the logic used to determine **whether an island can be purged** : ### High-Level Flow 1. **User runs the purge command with a number of days.** 2. The plugin scans region files and finds those not modified in the last N days. 3. For each region, it finds all islands overlapping that region. 4. For each island, it checks if the island can be deleted (purged). 5. Only islands passing the deletion check are considered for purging. ### Detailed Purge Eligibility Logic An island **cannot be deleted** (i.e., is protected from purge) if **any** of the following are true: 1. **Island is marked as purge protected** 2. **Island is a spawn island** 3. **Island is not owned** 4. **Island level is too high** * If the "Level" addon is present, and the level is higher than BentoBox's level in config.yml is then the island is protected. default is is 10. 5. **Owner or any team member has logged in recently** Islands That **Can** Be Deleted * If **none** of the above protections apply, the island **can** be deleted. * Exception: If the island is already marked as deleted it **can always be deleted** regardless of other checks. **In short:** An island is eligible for purge if it is not protected, not spawn, is owned, is below the level threshold, and no member has logged in recently - unless it is already marked as deleted, in which case it can always be purged. ### What is deleted * Region files (.mca) * World player files in the world - this will mean that if they log in they will spawn in the main world * Entity or POI files related to the region * Island records in the BentoBox database ## Compatibility ✔️ Minecraft 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8 ✔️ Java 21 ## Upgrading 1. **As always, take backups just in case.** (Make a copy of everything!) 2. Stop the server 4. Replace the BentoBox jar with this one 5. Move or delete locale files 7. Restart the server 8. 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 es.yml by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2701 * Initial cooldown click approach by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2703 * Purge improvements by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2706 * 2636 purge improvements by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2705 * Update Mythic Mobs to 5.9.5 by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2707 * Add 1.21.8 support by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2708 * 🔡 Updated translations to include purging command and other updates by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2709 * Version 3.7.0 by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2702 **Full Changelog**: https://github.com/BentoBoxWorld/BentoBox/compare/3.6.0...3.7.0