## 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
* 🐛 Compatible with the latest version of CraftEngine by @jhqwqmc in https://github.com/BentoBoxWorld/BentoBox/pull/2978
* 🐛 Defer on-join player resets until after team-accept teleport by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2979
* 🔺 Harden `Island.setRange` against distance-mismatch corruption by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2980
* Pin MockBukkit to v4.110.0 (fix flaky SNAPSHOT resolution) by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2981
**Full Changelog**: https://github.com/BentoBoxWorld/BentoBox/compare/3.16.1...3.16.2
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }