Compatibility
Minecraft: Java Edition
Platforms
Details
Changelog
New Release Highlights
- Visitors cannot steal items from copper golems by hitting them
- ⚙️ 🔡 🔺 New
RAID_TRIGGERisland protection flag replaces the oldVISITOR_TRIGGER_RAIDworld setting, giving island owners granular control over who can trigger raids - ⚙️ 🔡 Economy/Vault integration for blueprint bundle costs — admins can now charge players to choose a blueprint when creating or resetting islands
- New
/bbox placeholders(aliasph) GUI and/bbox dump-placeholderscommand for browsing and documenting all registered placeholders - Automatic update notification banner on startup when a newer BentoBox version is available
- 🔺 Performance: island loading is now dramatically faster on servers with many islands (spatial hash replaces nested TreeMap — addresses servers that hung at "Loading islands from database...")
- Fixed NETHER_PORTAL / END_PORTAL protection flags being bypassed when Paper had
misc.enable-nether: false - Fixed
/bbox purge regionsnot deleting nether/end region files, and corrected login-check logic and scan reporting - BentoBox teleports now use
TeleportCause.PLUGINinstead ofUNKNOWN, fixing compatibility with Essentials/back
Compatibility
✔️ Paper Minecraft 1.21.5 - 1.21.1 ✔️ Java 21
Upgrading
- As always, take backups just in case. (Make a copy of everything!)
- Stop the server
- Replace the BentoBox jar with this one
- Restart the server
- You should be good to go!
🔺 Config migration note: The
VISITOR_TRIGGER_RAIDworld setting has been removed. It is replaced by the new per-islandRAID_TRIGGERprotection flag. Review your game mode configs after upgrading.
Legend
- 🔡 locale files may need to be regenerated or updated.
- ⚙️ config options have been removed, renamed or added.
- 🔺 special attention needed.
New Features
⚙️ 🔡 🔺 RAID_TRIGGER Protection Flag (replaces VISITOR_TRIGGER_RAID)
[PR #2801](https://github.com/BentoBoxWorld/BentoBox/pull/2801)
The VISITOR_TRIGGER_RAID world setting has been converted into a proper island protection flag called RAID_TRIGGER. Island owners can now configure the minimum rank required to trigger a raid on their island (visitor, member, trusted, owner, etc.) via the island settings panel. Players attempting to trigger a raid below the configured rank will have their action blocked without consuming their Bad Omen effect. By default, only members and above can trigger raids — matching previous behaviour.
⚙️ 🔡 Economy Integration for Blueprint Bundle Costs
[PR #2806](https://github.com/BentoBoxWorld/BentoBox/pull/2806)
Admins can now assign a Vault economy cost to blueprint bundles. A cost editor is available in the admin GUI. When economy is enabled and multiple bundles are available, players will see costs displayed and must be able to afford a bundle before selecting it. A new config option charge-for-blueprint-on-reset (default: false) controls whether the cost also applies when resetting an island. Costs are silently skipped when Vault/economy is not installed.
Placeholder Browser GUI and Dump Command
[PR #2803](https://github.com/BentoBoxWorld/BentoBox/pull/2803)
Two new admin tools for managing placeholders:
/bbox placeholders(aliasph) — opens an interactive GUI showing all registered placeholders organised by addon, with resolved values./bbox dump-placeholders— generates a Markdown file documenting every registered placeholder, useful for documentation and the BentoBoxWorld docs site.
Panel appearance can be customised via BentoBox/panels/placeholder_panel.yml and placeholder_list_panel.yml.
Automatic Update Notifications
[PR #2834](https://github.com/BentoBoxWorld/BentoBox/pull/2834)
BentoBox now checks for newer releases on startup and prints a coloured banner to the console if an update is available. The check runs asynchronously and fails silently on network errors. Development builds skip the check entirely.
Performance
🔺 Faster Island Loading — Spatial Hash for IslandGrid
[PR #2840](https://github.com/BentoBoxWorld/BentoBox/pull/2840)
The internal island grid has been rewritten to use a spatial hash map instead of nested TreeMaps. This reduces island loading from O(n²) to O(n) average-case, directly fixing the issue where servers with large numbers of islands would hang at "Loading islands from database...". Also corrects a bug that could cause large islands to be missed by coordinate lookups (relevant to plugins like Stranger Realms).
Bug Fixes
🔺 Addon Binary Compatibility and Class Loading Fix
[PR #2836](https://github.com/BentoBoxWorld/BentoBox/pull/2836)
Restores the ImmutableSet<UUID> return type on Island.getMemberSet(), which had been changed to Set<UUID> and was causing NoSuchMethodError at runtime for addons compiled against earlier BentoBox versions. Also fixes an IllegalStateException: Recursive update in AddonClassLoader that caused startup failures for addons with cross-addon dependencies (e.g. DimensionalTrees).
Fix NETHER_PORTAL / END_PORTAL Flag Bypass
[PR #2802](https://github.com/BentoBoxWorld/BentoBox/pull/2802)
When Paper's misc.enable-nether (or enable-end) was set to false, BentoBox's portal handling bypassed the Bukkit event bus entirely, allowing visitors to use portals regardless of the protection flag. Events are now properly routed through Bukkit.getPluginManager().callEvent() so flag checks fire correctly.
Fix Purge Regions
[PR #2841](https://github.com/BentoBoxWorld/BentoBox/pull/2841) [PR #2804](https://github.com/BentoBoxWorld/BentoBox/pull/2804) [PR #2805](https://github.com/BentoBoxWorld/BentoBox/pull/2805)
Several fixes to the /bbox purge regions command:
- Nether/end worlds were not being detected correctly due to early evaluation before addon worlds loaded
- The recent-login protection check had inverted logic and only checked the island owner rather than all team members
- Region files in nether and end worlds were not being deleted
- Scan reports now show how many islands are blocked by level thresholds vs. protection flags
Fix Copper Golem Item Theft by Visitors
[PR #2799](https://github.com/BentoBoxWorld/BentoBox/pull/2799)
Visitors could steal items held by Copper Golems by hitting them. This has been fixed.
Fix TeleportCause for Plugin-Initiated Teleports
[PR #2800](https://github.com/BentoBoxWorld/BentoBox/pull/2800)
BentoBox teleports (home, safe-spot etc.) now correctly use TeleportCause.PLUGIN instead of TeleportCause.UNKNOWN. This fixes compatibility with plugins like Essentials where /back would not work after a BentoBox teleport.
Fix force-shown Integer in Panel Configuration
[PR #2832](https://github.com/BentoBoxWorld/BentoBox/pull/2832)
Setting force-shown: N in a panel YAML now correctly forces all rows 1 through N to be visible, rather than only the last row. The list form force-shown: [2, 4] is unaffected.
Internal / Developer Changes
A large batch of code quality improvements driven by SonarCloud analysis: sealed classes, removal of deprecated ChatColor API, lambda and @Override style fixes, variable shadowing, cognitive complexity reduction in TemplateReader, production code quality improvements, and replacement of deprecated EntityDamageByEntityEvent and LingeringPotion test APIs. Extensive new JUnit 5 test suites added for ClosestSafeSpotTeleport, SQLDatabaseHandler, BlueprintPaster, IslandTeamInviteGUI, DefaultPasteUtil, and others. Placeholder panel pagination deduplicated into AbstractPanel.
What's Changed
- Fix Javadoc @link syntax in getPrimaryIsland method by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2792
- Fix Copper Golem item theft via player interaction by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2799
- Add unit tests for homeTeleportAsync(Island, User, boolean) overload by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2794
- ⚙️ 🔡 🔺 Convert VISITOR_TRIGGER_RAID world setting to RAID_TRIGGER protection flag by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2801
- Use TeleportCause.PLUGIN instead of TeleportCause.UNKNOWN for plugin-initiated teleports by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2800
- ⚙️ Add placeholder browser GUI and dump command (#1332) by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2803
- Fix NETHER_PORTAL flag bypass when paper misc.enable-nether is false by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2802
- Refactor AdminPurgeRegionsCommand to dynamically handle nether and end world regions by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2804
- Fix purge regions not deleting nether/end region files by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2805
- ⚙️ 🔡 Add economy integration for blueprint bundle costs by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2806
- Refactor command argument checks and enhance null safety in various commands by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2807
- Deduplicate PlaceholderPanel pagination into AbstractPanel by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2808
- Fix SonarCloud HIGH severity code smells by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2810
- Fix SonarCloud: Disabled tests, parameterized tests by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2814
- Fix SonarCloud: Remove redundant Mockito eq() and commented-out code by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2811
- [WIP] Update code style based on SonarCloud feedback by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2824
- [WIP] Fix code style improvements based on SonarCloud feedback by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2823
- Fix scheduler thread leak in ExpiringMapTest when assertions fail by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2822
- Fix scheduler thread leaks in ExpiringMapTest by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2821
- Ensure ExpiringMap.shutdown() always runs in tests via try/finally by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2819
- Fix leaked MockedStatic handle for IslandsManager in TestBentoBox by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2818
- Ensure ExpiringMap.shutdown() always runs in tests via try/finally by @Copilot in https://github.com/BentoBoxWorld/BentoBox/pull/2820
- Fix SonarCloud: Code style — lambdas, @Override, collapsible ifs by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2812
- Fix SonarCloud: Variable shadowing in tests and assertion improvements by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2813
- Fix SonarCloud: Production code quality improvements by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2815
- Fix SonarCloud: Sealed classes, deprecated API, ChatColor removal by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2816
- Fix SonarCloud: Replace deprecated EntityDamageByEntityEvent and LingeringPotion in tests by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2817
- fix: reduce BentoBox monster-class coupling from 24 to 20 (S1200) by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2826
- Fix Sonar code quality issues: S5361, S3776 complexity by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2825
- Reduce cognitive complexity in TemplateReader by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2827
- Add JUnit5 tests for ClosestSafeSpotTeleport by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2828
- Add JUnit 5 tests for SQLDatabaseHandler by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2830
- Implement comprehensive BlueprintPasterTest suite by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2829
- Add JUnit 5 tests for IslandTeamInviteGUI by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2831
- Add JUnit5 tests for DefaultPasteUtil by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2833
- Add automatic update notifications on startup by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2834
- Fix force-shown integer value not showing correct number of rows by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2832
- 🔺 Fix binary-incompatible getMemberSet() return type and AddonClassLoader recursive update by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2836
- 🔺 Replace IslandGrid nested TreeMap with spatial hash by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2840
- Fix purge regions: nether detection, login check inversion, and scan report by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2841
- Version 3.11.2 by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2791
New Contributors
- @Copilot made their first contribution in https://github.com/BentoBoxWorld/BentoBox/pull/2792
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.11.1...3.11.2



