Skip to content

欢迎来到 BentoBox 开发者文档!#

BentoBox 是一个平台插件,支持一套可在其上运行的插件 API。其架构与 Bukkit 插件系统几乎相同。你可以创建像 BSkyBlock 这样的游戏模式插件,为玩家提供你自己的游戏模式体验,或者你可以开发实用程序插件,如 Warps,使任何游戏模式(甚至普通世界)中的玩家都可以使用传送牌。

Pladdons#

由于服务器运作方式的改变(代码在加载时的重新映射),现在建议所有插件现在都在 Bukkit 插件包装器内运行,该包装器由 BentoBox 提供,称为 Pladdon - Pladdons = Plugin + Addon。通过成为插件,它们在加载时将被正确重新映射,这对于 Paper 等服务器很重要。

Pladdon 包装器的任务是生成附加组件实例,并在通过 getAddon 方法请求时提供它。

由于附加组件是插件,它们将被服务器列为插件,但它们仍应放在 Bentobox/Addons 文件夹中。

JavaDocs#

Javadocs 在这里:https://javadocs.bentobox.world

核心 API 包是 world.bentobox.bentobox.api.*。这些包中的方法会尽可能长期保持稳定。api 包之外的方法和类可能会频繁或大幅度改变。

示例插件#

@BONNe 在这里维护了一个示例插件:https://github.com/BONNePlayground/ExampleAddon

可取消的玩家重置事件#

BentoBox 3.17.0 新增。

当玩家离开队伍或其岛屿被重置时,BentoBox 可能会清空他们的物品栏、末影箱、金钱、生命值、饥饿度和经验值,并将其驯服的动物恢复野生——具体取决于每个游戏模式的 island.reset.on-leave 设置。现在,这些重置动作在执行之前都会触发一个可取消的事件,因此插件可以否决单个重置,而不是全有或全无。如果监听器取消了该事件,BentoBox 就会跳过该动作。

这些事件位于 world.bentobox.bentobox.api.events.player:

事件 触发时机(之前)
PlayerTamedRemovalEvent 将玩家驯服的动物恢复野生
PlayerResetEnderChestEvent 清空末影箱
PlayerResetInventoryEvent 清空物品栏
PlayerResetMoneyEvent 扣除玩家余额
PlayerResetHealthEvent 重置生命值
PlayerResetHungerEvent 重置饥饿度
PlayerResetExpEvent 重置经验值

所有事件都继承自 PlayerBaseEvent(实现了 Cancellable),并携带玩家 UUID、岛屿和世界。监听方式是标准的 Bukkit 方式:

@EventHandler
public void onInventoryReset(PlayerResetInventoryEvent e) {
    if (shouldKeepInventory(e.getPlayerUUID())) {
        e.setCancelled(true); // 物品栏将不会被清空
    }
}

事件通过一个小型构建器 API 构建和分发:

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

这完全是新增的——所有类都是新的,没有更改任何现有 API,因此 3.17.0 与现有插件二进制兼容。Inventory Switcher 插件使用这些事件在重置时保护按世界的物品栏和余额。参见 Release 3.17.0


Last update: June 1, 2026 01:21:42