Skip to content

Release 3.12.0#2871

Open
tastybento wants to merge 168 commits intomasterfrom
develop
Open

Release 3.12.0#2871
tastybento wants to merge 168 commits intomasterfrom
develop

Conversation

@tastybento
Copy link
Member

No description provided.

tastybento and others added 30 commits April 25, 2023 17:45
Add a 5-minute ExpiringSet cooldown per player UUID to prevent
rapid obsidian scooping that could duplicate lava buckets.
After a successful scoop, the player must wait before scooping again.

Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com>
Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…uplication

Fix lava bucket duplication via rapid obsidian scooping
Reverse the .equals() call in getUnownedIslands() so that
this.getWorld() (non-null) is the receiver instead of
i.getWorld() (potentially null). Add test for null world case.

Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com>
… end world

Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com>
…d guidance

Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com>
…-command-error

Fix NPE in purge unowned command when island world is null
…tructions

Add `.github/copilot-instructions.md` for Copilot coding agent
…n-explosions

Fix NPE in StandardSpawnProtectionListener for standard end/nether spawn explosions
…s no island

Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com>
…ission with named homes

Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com>
…-setting-home

Add regression tests for maxhomes.1 permission with named homes (issue #1564)
…tionality

Add configurable fallback command for `/is expel` when player has no island or spawn
Copilot AI and others added 21 commits March 21, 2026 17:38
Adventure's LegacyComponentSerializer omits repeated §X codes when consecutive
components share the same color, so &a Line1\n&a Line2 would produce §aLine1\nLine2
after serialization — lines 2+ lost their color when split into individual lore
entries. Fix: process each \n-separated line independently in translateColorCodes()
so every line gets its own explicit color code prefix.

Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com>
Agent-Logs-Url: https://github.com/BentoBoxWorld/BentoBox/sessions/e870ffb0-3904-4296-b9fe-bf88ce4967c7
…settings

fix: Preserve color codes on every line of multi-line translated strings
…ommand

Modifies home list display in IslandGoCommand, IslandSethomeCommand,
IslandDeletehomeCommand, and IslandRenamehomeCommand to use clickable
text components. Each home name now has a run_command click action
(/<topLabel> go <homeName>) and a hover tooltip ("Click to teleport").

Adds new locale key commands.island.sethome.click-to-teleport for
the translatable hover text.

Fixes #2458

Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com>
Agent-Logs-Url: https://github.com/BentoBoxWorld/BentoBox/sessions/58eb3b51-0d65-487c-8499-14dc4e4714a6
Merge develop into force-field-fling PR (conflict resolution)
…ickable

Make the home list clickable in chat
The key commands.island.sethome.click-to-teleport was used in
IslandGoCommand, IslandSethomeCommand, IslandDeletehomeCommand, and
IslandRenamehomeCommand but was missing from the locale files, causing
the raw key to be shown as hover text instead of the translated message.

Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com>
Agent-Logs-Url: https://github.com/BentoBoxWorld/BentoBox/sessions/2020c8db-752b-4e8e-89fa-385ec0021024
Added translated click-to-teleport hover text to all 22 non-English
locale files: cs, de, es, fr, hr, hu, id, it, ja, ko, lv, nl, pl,
pt-BR, pt, ro, ru, tr, uk, vi, zh-CN, zh-HK.

Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com>
Agent-Logs-Url: https://github.com/BentoBoxWorld/BentoBox/sessions/3850d60c-0df2-444f-9ed5-8a9f5e4c3aab
Integrates with Dynmap to show each owned island as a labeled point
marker plus an area marker outlining the protected island border.
Handles island create, delete, rename, and reset events to keep
markers in sync.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add Dynmap hook to display island borders
Display island protected borders as shaded rectangles on BlueMap,
matching the DynmapHook's visualization. Also expose public API
methods (getBlueMapAPI, getMarkerSet, createMarkerSet) for addons
to create custom markers.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add area markers and public API to BlueMapHook
Introduce MapHook abstract class and MapManager facade so addons
can create markers, areas, and polygons without depending on a
specific map plugin. MapManager fans out calls to all active map
hooks (BlueMap, Dynmap, etc.) and silently no-ops when none are
installed. Both BlueMapHook and DynmapHook now extend MapHook.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add generic Map API for addon web-map integration
@tastybento
Copy link
Member Author

@copilot Write some release notes for this release. Here is a draft:

Here are the release notes for BentoBox 3.12.0, written for server admins:


BentoBox 3.12.0 Release Notes

New Features

BlueMap Integration — BentoBox now hooks into BlueMap, displaying island markers on your BlueMap web map automatically.

Spawn Protection Setting — A new SPAWN_PROTECTION world flag prevents players from dying to the void at spawn. Useful for servers with exposed spawn islands.

Expel Fallback Command — You can now configure a fallback command that runs when an expelled player has nowhere to go (no island, no spawn point). Defaults to spawn. Set it via expelCommand in config.

Wind Charge Protection Flag — A new WIND_CHARGE flag lets you control whether visitors can use wind charges on islands.

Blueprint Paste Commands — Blueprint bundles can now trigger commands when they are pasted, opening up automation possibilities on island creation.

Blueprint GUI Pagination — The blueprint management GUI now paginates properly, so large blueprint libraries are no longer cramped into a single screen.

Admin Max Team Size Command — A new admin command lets you set maximum team size limits on a per-island basis directly in-game.

Bug Fixes

Lava Bucket / Obsidian Duplication — Fixed an exploit where players could rapidly scoop obsidian to duplicate lava. A configurable cooldown (obsidianScoopingCooldown, default 1 minute) and radius check (obsidianScoopingRadius) have been added to prevent this.

Player XP Not Resetting — Fixed a bug where player XP was not being reset when joining a team or creating a new island in certain scenarios.

Sugar Cane, Cocoa Beans & Nether Wart Protection — These crops were incorrectly using the wrong protection flags. They now respect the correct flag settings.

Purge Command Crash — Fixed a NullPointerException in the purge unowned islands command when an island world was null.

End/Nether Explosion Crash — Fixed a NullPointerException in spawn protection handling for explosions in the End and Nether.

Configuration Changes

Three new settings in config.yml:

  • expelCommand — Command run when an expelled player has no destination (default: spawn)
  • obsidianScoopingRadius — Block radius (0–15) checked for nearby obsidian during bucket use
  • obsidianScoopingCooldown — Minutes before a player can scoop obsidian again (minimum: 1)

Copy link
Contributor

Copilot AI commented Mar 23, 2026

@tastybento I've opened a new pull request, #2886, to work on those changes. Once the pull request is ready, I'll request review from you.

tastybento and others added 5 commits March 22, 2026 21:03
Remove build number from the Maven artifact version so CI publishes
as 3.12.0-SNAPSHOT instead of 3.12.0-b119-SNAPSHOT. The build number
is still available via ${build.number} for plugin.yml display.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Register map hooks (Dynmap, BlueMap) before addon enable so addons can
use MapManager during onEnable(). Previously, map hooks were registered
as "late hooks" after addons had already tried to create markers,
causing all calls to silently no-op. Island marker population is
deferred to BentoBoxReadyEvent since islands aren't loaded at the
earlier registration point.

Also adds an iconName parameter to addPointMarker() so addons can
request specific marker icons (e.g. "sign", "diamond"). Dynmap maps
the name to its icon registry with fallback to "default"; BlueMap
currently uses its default POI icon.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Lists all 85 built-in Dynmap marker icon names in the addPointMarker
Javadoc so addon developers have a quick reference without needing to
consult external Dynmap documentation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Pass isMarkupLabel=true to createMarker so addons can use HTML
formatting (e.g. colored owner names) in marker labels.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@sonarqubecloud
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants