Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions data/placeholders.csv
Original file line number Diff line number Diff line change
Expand Up @@ -123,3 +123,5 @@ TopBlock,aoneblock_island_phase_number_top_<number>,Phase number (e.g. Plains is
TopBlock,aoneblock_island_count_top_<number>,Block Count of magic blocks mined this round at the `<number>` position, 1.0.1
TopBlock,aoneblock_island_lifetime_top_<number>,Lifetime count of magic blocks mined at the `<number>` position, 1.0.1
Border,Border_color,Current border color (red/green/blue) for the player,4.8.0
InvSwitcher,[gamemode]_invswitcher_balance,The player's money balance for this gamemode's world,1.18.0
InvSwitcher,[gamemode]_invswitcher_balance_formatted,The player's money balance for this gamemode's world formatted with currency name,1.18.0
28 changes: 17 additions & 11 deletions data/release-tracker.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"last_run": "2026-05-23T00:37:17Z",
"last_run": "2026-06-01T01:05:19Z",
"repos": {
"BentoBox": {
"last_checked": "2026-05-23T00:37:17Z",
"last_release": "3.16.2",
"last_checked": "2026-06-01T01:05:19Z",
"last_release": "3.17.0",
"doc_path": "BentoBox/",
"category": "core"
},
Expand All @@ -20,8 +20,8 @@
"category": "gamemode"
},
"Boxed": {
"last_checked": "2026-05-23T00:37:17Z",
"last_release": "",
"last_checked": "2026-06-01T01:05:19Z",
"last_release": "3.4.0",
"doc_path": "gamemodes/Boxed/index.md",
"category": "gamemode"
},
Expand Down Expand Up @@ -74,14 +74,14 @@
"category": "addon"
},
"Border": {
"last_checked": "2026-05-23T00:37:17Z",
"last_release": "4.8.3",
"last_checked": "2026-06-01T01:05:19Z",
"last_release": "4.8.4",
"doc_path": "addons/Border/index.md",
"category": "addon"
},
"Challenges": {
"last_checked": "2026-05-23T00:37:17Z",
"last_release": "1.6.0",
"last_checked": "2026-06-01T01:05:19Z",
"last_release": "1.6.1",
"doc_path": "addons/Challenges/index.md",
"category": "addon"
},
Expand Down Expand Up @@ -128,8 +128,8 @@
"category": "addon"
},
"InvSwitcher": {
"last_checked": "2026-05-23T00:37:17Z",
"last_release": "1.17.1",
"last_checked": "2026-06-01T01:05:19Z",
"last_release": "1.18.0",
"doc_path": "addons/InvSwitcher/index.md",
"category": "addon"
},
Expand Down Expand Up @@ -192,6 +192,12 @@
"last_release": "1.19.0",
"doc_path": "addons/Warps/index.md",
"category": "addon"
},
"VoidPortals": {
"last_checked": "2026-06-01T01:45:43Z",
"last_release": "1.6.0",
"doc_path": "addons/VoidPortals/index.md",
"category": "addon"
}
}
}
42 changes: 42 additions & 0 deletions docs/BentoBox/Developer-Documentation.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,45 @@ The core API package is `world.bentobox.bentobox.api.*`. Methods in those packag
# Example Addon

@BONNe maintains an example addon here: [https://github.com/BONNePlayground/ExampleAddon](https://github.com/BONNePlayground/ExampleAddon)

# Cancellable player reset events

*Added in BentoBox 3.17.0.*

When a player leaves a team or their island is reset, BentoBox can clear their inventory, ender chest, money, health, hunger and XP, and untame their animals — depending on each game mode's `island.reset.on-leave` settings. Each of these reset actions now fires a **cancellable** event **before** it runs, so an addon can veto an individual reset instead of all-or-nothing. If a listener cancels the event, BentoBox skips that action.

These events live in `world.bentobox.bentobox.api.events.player`:

| Event | Fired before |
| --- | --- |
| `PlayerTamedRemovalEvent` | untaming the player's animals |
| `PlayerResetEnderChestEvent` | clearing the ender chest |
| `PlayerResetInventoryEvent` | clearing the inventory |
| `PlayerResetMoneyEvent` | withdrawing the player's balance |
| `PlayerResetHealthEvent` | resetting health |
| `PlayerResetHungerEvent` | resetting hunger |
| `PlayerResetExpEvent` | resetting XP |

All events extend `PlayerBaseEvent` (which implements `Cancellable`) and carry the player UUID, the island, and the world. Listening is standard Bukkit:

```java
@EventHandler
public void onInventoryReset(PlayerResetInventoryEvent e) {
if (shouldKeepInventory(e.getPlayerUUID())) {
e.setCancelled(true); // inventory will not be cleared
}
}
```

Events are constructed and dispatched through a small builder API:

```java
PlayerEvent.builder()
.reason(PlayerEvent.Reason.INVENTORY_RESET)
.involvedPlayer(uuid)
.island(island)
.world(world)
.build();
```

This is purely additive — all classes are new and no existing API changed, so 3.17.0 is binary-compatible with existing addons. The [Inventory Switcher addon](../addons/InvSwitcher/index.md) uses these events to protect per-world inventories and balances during resets. See [Release 3.17.0](https://github.com/BentoBoxWorld/BentoBox/releases/tag/3.17.0).
10 changes: 10 additions & 0 deletions docs/addons/Border/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,16 @@ show-warps-on-map: true

[Release v4.8.3](https://github.com/BentoBoxWorld/Border/releases/tag/4.8.3)

??? note "What's new in v4.8.4"
**Released:** 2026-05-26

- 🐛 **Fixed `NoSuchMethodError: WorldBorder.changeSize` on Paper/Purpur 1.21.10.** The 4.8.3 build was compiled against Paper 1.21.11, which renamed the world-border lerp method, so the vanilla border type crashed on 1.21.10 servers when `/[player_command] bordertype vanilla` was used. Border now uses the cross-version `setSize` API and works on **both 1.21.10 and 1.21.11**.
- 🐛 Fixed the Modrinth publish workflow (incorrect artifact path).

No config or locale changes are required. If you worked around the bug with `bordertype barrier`, you can switch back to `vanilla` once 4.8.4 is installed.

[Release v4.8.4](https://github.com/BentoBoxWorld/Border/releases/tag/4.8.4)

## Translations

{{ translations("Border") }}
Expand Down
9 changes: 9 additions & 0 deletions docs/addons/Challenges/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,15 @@ You can find more information how BentoBox custom GUI's works here: [Custom GUI'

[Release v1.6.0](https://github.com/BentoBoxWorld/Challenges/releases/tag/1.6.0)

??? note "What's new in v1.6.1"
**Released:** 2026-05-26

- 🐛 **Confirmation conversations no longer NPE on abandon.** The web library and the wipe/delete prompts in the admin GUI could flood the console with a `NullPointerException` when a confirmation conversation was abandoned instead of answered (for example, clicking a library entry several times before typing `confirm`, or letting the prompt time out). Abandons are now silently treated as no-ops.

Drop-in replacement — no config or locale changes are required.

[Release v1.6.1](https://github.com/BentoBoxWorld/Challenges/releases/tag/1.6.1)

## Translations

!!! info "Translations for challenges"
Expand Down
63 changes: 62 additions & 1 deletion docs/addons/InvSwitcher/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ The following are switched per-world:
* Experience
* Health
* Game mode (creative, survival, etc.)
* Money (per-world economy, added in 1.18.0)

## How to use

Expand Down Expand Up @@ -51,6 +52,7 @@ options:
experience: true
ender-chest: true
statistics: true
money: true # Per-world money (added in 1.18.0). Requires Vault.
# Per-island inventory switching (added in 1.17.0)
# The world-level option must also be true for the island option to take effect.
islands:
Expand All @@ -63,13 +65,53 @@ options:
experience: false
ender-chest: true
statistics: false
money: false # Per-island wallets (added in 1.18.0). False = per-world money only.
```

Set `islands.active: true` to allow players who own more than one island to maintain separate inventories (and other aspects) per island, not just per gamemode world.

### Economy

Added in 1.18.0. When `options.money` is enabled, InvSwitcher registers itself as the Vault economy provider and keeps a **separate balance for each switched world**. Transactions (shop sales, `/pay`, jobs, etc.) are routed to the balance of the world they belong to — even when the target player is offline or in a different world. Worlds InvSwitcher does not manage are passed through to your existing economy plugin (e.g. EssentialsX); if no other economy is present, InvSwitcher handles every world itself.

!!! warning "Requires Vault"
Per-world money requires the [Vault](https://www.spigotmc.org/resources/vault.34315/) plugin. A separate economy plugin is optional — InvSwitcher can be the only economy. If you run the **Bank** addon, island wallets become per-world too.

The `economy:` block is only used when `options.money` is `true`:

```yml
economy:
starting-balance: 0.0 # Balance given on first entry to a managed world (unless imported)
currency-name-singular: Dollar
currency-name-plural: Dollars
fractional-digits: 2 # Digits after the decimal point
import-existing-balances: true # Import each player's existing balance once, on first entry
delegate-unmanaged-worlds: true # Pass unmanaged worlds through to the previous economy plugin
debug: false # Log every transaction to the console (verbose)
```

## Commands

There are no commands.
Added in 1.18.0. Each managed game mode gains its own economy commands, scoped to that game mode's world, so `/bsb balance` shows your BSkyBlock balance and `/ai balance` your AcidIsland balance regardless of where you are standing.

!!! tip
`[player_command]` and `[admin_command]` are the commands that differ depending on the gamemode you are running.

=== "Player commands"

| Command | Description |
|---|---|
| `/[player_command] balance` | Show your money balance for this world |
| `/[player_command] pay <player> <amount>` | Pay another player |

=== "Admin commands"

| Command | Description |
|---|---|
| `/[admin_command] eco give <player> <amount>` | Give money to a player |
| `/[admin_command] eco take <player> <amount>` | Take money from a player |
| `/[admin_command] eco set <player> <amount>` | Set a player's balance |
| `/[admin_command] eco balance <player>` | Show a player's balance |

## What it does
This addon will give players a separate inventory, health, food level, advancements and experience for each gamemode installed and their corresponding worlds. It enables players to play each gamemode independently of each other.
Expand Down Expand Up @@ -101,6 +143,25 @@ This addon will give players a separate inventory, health, food level, advanceme

[Release v1.17.1](https://github.com/BentoBoxWorld/InvSwitcher/releases/tag/1.17.1)

??? warning "What's new in v1.18.0 — requires BentoBox 3.17.0"
**Released:** 2026-05-31

- 🔺⚙️🔡 **Per-world money.** InvSwitcher can now give every game world its own separate economy, on top of the inventories, health, XP and stats it already switches. With `options.money` enabled it registers itself as the Vault economy provider and routes every transaction to the correct world's balance — even when the player is offline or in a different world.
- ⚙️ **New config:** `options.money`, `options.islands.money`, and an `economy:` block (starting balance, currency names, fractional digits, import toggle, delegate toggle, debug). Existing configs keep working; the new keys are added with safe defaults.
- 🔡 **New commands & placeholders:** per-game-mode `balance` and `pay` for players, admin `eco give/take/set/balance`, plus `<gamemode>_invswitcher_balance` and `<gamemode>_invswitcher_balance_formatted` placeholders, translated into every language BentoBox ships.
- 🐛 Advancements no longer inflate experience on world switch.
- 🐛 BentoBox island resets no longer wipe the wrong world's inventory — InvSwitcher now clears the *stored* data for the correct world instead.

🔺 **Requires BentoBox 3.17.0:** InvSwitcher now listens to BentoBox's player-reset events (including the new money-reset event), which were introduced in 3.17.0. It will not load on older BentoBox versions.

🔺 **Economy behaviour change:** when `options.money` is enabled, InvSwitcher becomes the server's Vault economy provider. Worlds it does not manage are passed through to your existing economy (e.g. EssentialsX); managed worlds get their own per-world balance. Requires the Vault plugin.

[Release v1.18.0](https://github.com/BentoBoxWorld/InvSwitcher/releases/tag/1.18.0)

## Placeholders

{{ placeholders_source("InvSwitcher") }}

## Translations

{{ translations("InvSwitcher") }}
27 changes: 23 additions & 4 deletions docs/addons/VoidPortals/index.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,36 @@
# VoidPortals

**VoidPortals** allows players to teleport to other worlds by jumping into the void.
**VoidPortals** lets players travel between dimensions by falling into the void. When a player falls into the void in a world where the flag is enabled, they are safely teleported to the matching location in the next dimension — **Overworld → Nether → The End → Overworld** — instead of dying.

Created and maintained by [BONNe](https://github.com/BONNe).

{{ addon_description("VoidPortals", beta=True) }}

!!! info "Compatibility"
Requires **BentoBox 3.14.0** or newer, **Minecraft 1.21+**, and **Java 21**.

## Installation

1. Place the addon jar in the addons folder of the BentoBox plugin
2. Restart the server
3. In game you can change flags that allows to use current addon.
1. Place the addon jar in the addons folder of the BentoBox plugin.
2. Restart the server.
3. The "Void world teleports" flag is **disabled by default** — enable it per world in the Game Mode's Admin Settings panel.

## Flags

VoidPortals adds a single world setting flag. Toggle it per world from the Game Mode's Admin Settings panel.

{{ flags_source("VoidPortals", "WORLD_SETTING") }}

## Translations

{{ translations("VoidPortals") }}

??? warning "What's new in v1.6.0 — Breaking changes"
**Released:** 2026-06-01

First release since 2019 — VoidPortals is fully modernised for the current BentoBox ecosystem. See the full [Release v1.6.0](https://github.com/BentoBoxWorld/VoidPortals/releases/tag/1.6.0) notes.

- 🔺 **Requires Java 21, Paper 1.21.11 and BentoBox 3.14.0** (was Spigot 1.13.2 / BentoBox 1.5.0). This release will not load on older servers.
- Now ships a `Pladdon` and `plugin.yml` so the jar loads correctly on modern Paper servers.
- 🔡 Added 14 new languages and converted every locale to **MiniMessage** formatting. If you customised the locale files, regenerate them or port your edits — legacy `&` colour codes are no longer used.
- Added a JUnit 5 / MockBukkit test suite, including a regression test ensuring diagonal void-falls still teleport.
16 changes: 16 additions & 0 deletions docs/gamemodes/Boxed/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,22 @@ Commands can be found [here](Commands).

Placeholders can be found [here](Placeholders).

## Changelog

??? note "What's new in v3.4.0"
**Released:** 2026-05-30

- **Trial Chambers support.** Boxed now captures and restores Trial Spawner state — including both the normal *and* ominous configurations — when structures are pulled from the seed world into a player's box, and recognises `trial_chambers` as a tracked structure for advancement-driven box growth.
- 🐛 **No more cross-game-mode progress loss.** Boxed no longer clears a player's advancements and statistics when an island is reset in a *different*, non-Boxed game mode.
- 🐛 Pending structure pastes are now cancelled when an island is deleted, preventing structures being placed into a box that no longer exists.
- 🐛 Ominous trial spawners now restore the correct configuration rather than always applying the normal one.
- Modernised build & test stack: Paper 1.21.11, BentoBox API 3.13.0, JUnit 5 + Mockito + MockBukkit.

!!! note
Trial Chambers are captured from the seed world when a box is generated, so boxes created *before* 3.4.0 will not retroactively gain them. New boxes (and newly expanded regions) will include them.

[Release v3.4.0](https://github.com/BentoBoxWorld/Boxed/releases/tag/3.4.0)

## Translations

{{ translations("Boxed") }}