生态区#
生态区允许您的玩家在他们的岛屿上改变生态区。
由BONNe创建和维护。
Warning
Biomes 目前处于 Beta 测试阶段。
请记住,您可能会遇到更多的错误 且 某些功能可能不够稳定。
安装#
- 将插件 jar 文件放到
plugins/BentoBox/addons文件夹中。 - 启动并停止服务器,让生态区生成其配置文件。
- 编辑
config.yml和biomesTemplate.yml文件(你可以在plugins/BentoBox/addons/Biomes文件夹中找到它们)。 - 重启服务器。
- 将生态区导入到游戏模式中。
配置#
config.yml#
插件安装成功后,它将创建config.yml文件。这个文件中的每个选项都附有注释。请查阅文件以获取更多信息。 你可以在这里找到最新的配置文件:config.yml
模板#
警告
与通常的配置文件不同,你对biomesTemplate.yml文件所做的更改在启动服务器时不会自动被考虑。
你必须手动导入所做的更改,并最终覆盖之前已导入的配置。
此文件包含有关默认生态区的所有必要信息。 如果你在biomes.yml中更改了值,那么要应用它们,你必须运行 /[admin_command] biomes。
默认模板文件可以在这里找到:biomesTemplate.yml
关于生态区的有用资源
模板文件结构
``` biomes: # 内部数据结构。不要更改!
块都应用成本,PER_USAGE - 每次使用后成本增加[increment]。默认为STATIC。 cost:
可自定义的GUI#
BentoBox 1.17 API引入了一个功能,允许实现可自定义的GUI。这个插件是第一个使用这个功能的插件之一。我们试图尽可能简单地进行自定义,然而,一些功能需要解释。 你可以在这里找到更多关于BentoBox自定义GUI如何工作的信息:自定义GUI
如何自定义GUI
要自定义插件GUI,你需要拥有2.0版本。这是第一个实现它们的版本。插件将在/plugins/BentoBox/addons/Biomes下创建一个名为panels的新目录
目前你可以自定义3个GUI:
- 主面板:
main_panel- 包含所有用户可以购买或使用的生态区的面板。 - 高级面板:
advanced_panel- 包含不同方式的面板,生态区可以在岛屿上应用。 - 购买面板:
buy_panel- 包含玩家可以购买的生态区的面板。
每个GUI包含只有它自己支持的函数。
什么是PREVIOUS|NEXT按钮类型?
PREVIOUS和NEXT按钮类型允许创建自动分页,当你的生态区多于GUI中的空间时。 这些类型在数据下有额外的参数:
indexing- 表示按钮是否会显示页码。
示例:
icon: tipped_arrow[potion_contents={custom_color:11546150}]
title: biomes.gui.buttons.previous.name
description: biomes.gui.buttons.previous.description
data:
type: PREVIOUS
indexing: true
action:
left:
tooltip: biomes.gui.tips.click-to-previous
什么是RETURN按钮类型?
这个按钮在所有面板中都可用。 它创建一个允许返回到上一个菜单或退出gui的按钮。描述由插件生成,但像所有按钮一样,你可以在面板中指定你自己的文本。
示例:
data:
type: RETURN
什么是BIOME按钮类型?
这个按钮在main_panel和buy_panel中可用。 BIOME按钮为生态区对象创建一个动态条目。只有当存在生态区时,按钮才会被填充。例如,如果你只有3个生态区,但在GUI中为它们定义了7个位置,那么只有3个位置会被填充。其余位置将保持空白。
默认情况下,生态区将根据它们的顺序编号进行排序,然而,你可以使用id参数在数据下指定特定生态区在特定插槽中。
data:
type: BIOME
id: example_biome
指定标题、描述和图标将覆盖基于数据库数据的动态生成。默认情况下,这些值将从数据库条目中生成。 这个按钮支持3种不同的操作类型:
- CHANGE - 根据默认更新模式和默认范围值更改生态区。在main_panel中可用。
- ADVANCED_PANEL - 打开允许选择不同生态区更新模式的高级面板。在main_panel中可用。
- BUY - 购买选定的生态区。在buy_panel中可用。
示例:
data:
type: BIOME
actions:
left:
type: CHANGE
# 支持ISLAND | CHUNK:NUMBER | RANGE:NUMBER
content: ISLAND
tooltip: biomes.gui.tips.left-click-to-apply
right:
type: ADVANCED_PANEL
tooltip: biomes.gui.tips.right-click-to-open
什么是PURCHASE按钮类型?
这个按钮在main_panel中可用。 它创建一个打开新面板的按钮,该面板包含玩家可以购买的生态区。
示例:
data:
type: PURCHASE
action:
left:
tooltip: biomes.gui.tips.click-to-view
什么是INCREASE|REDUCE按钮类型?
这个按钮在advanced_panel中可用。 它创建一个增加/减少更改生态区“范围”的按钮。增加/减少的数字可以与按钮类型一起定义。
示例:
data:
type: INCREASE
value: 5
actions:
left:
tooltip: biomes.gui.tips.click-to-increase
什么是MODE按钮类型?
这个按钮在advanced_panel中可用。 它创建一个允许在ISLAND、CHUNK和RANGE模式之间更改生态区更新模式的按钮。模式与按钮类型一起定义。
示例:
data:
type: MODE
value: CHUNK
actions:
left:
tooltip: biomes.gui.tips.click-to-choose
什么是ACCEPT按钮类型?
这个按钮在advanced_panel中可用。 它创建一个允许使用选定设置开始生态区更新的按钮。它有两个动作:
- ACCEPT: 开始生态区更新
- INPUT: 允许通过聊天手动输入数字。
示例:
data:
type: ACCEPT
actions:
left:
type: ACCEPT
tooltip: biomes.gui.tips.left-click-to-accept
right:
type: INPUT
tooltip: biomes.gui.tips.right-click-to-write
命令#
小贴士
[player_command]和[admin_command]是根据你运行的游戏模式而变化的命令。 游戏模式的config.yml文件包含允许你修改这些值的选项。 例如,在BSkyBlock上,默认的[player_command]是island,默认的[admin_command]是bsbadmin。
信息
生态区插件玩家命令是完全可配置的。你可以在生态区插件配置文件中更改它们。下面仅是这些命令的默认名称。
/[player_command] biomes: 此方法打开GUI,允许在用户岛屿上更改生态区。/[player_command] biomes help: 显示所有命令的帮助/[player_command] biomes set <biome> [<type>] [<size>]: 此命令允许在不打开GUI的情况下更改岛屿上的生态区。如果参数和 未提供,命令将使用插件配置中的默认值。 /[player_command] biomes buy <biome>: 此命令允许在不打开GUI的情况下购买生态区。
信息
<biome>可能不是实际Minecraft生态区名称。它是由管理员定义的。<type>是三种生态区更改类型之一。它提供在整个岛屿(ISLAND)、当前区块(CHUNK)或围绕玩家的距离(RANGE)上更改生态区。
/[admin_command] biomes: 打开管理员生态区GUI。/[admin_command] biomes help: 显示所有与生态区相关的管理员命令的帮助。/[admin_command] biomes import [<file>]: 从biomesTemplate.yml配置文件或提供的文件中导入生态区。/[admin_command] biomes set <player> <biome> [<type>] [<size>]: 与用户生态区设置命令相同,但需要提供玩家,其岛屿生态区将被更新。/[admin_command] biomes migrate: 迁移生态区插件数据。通常用于从旧版本升级到新版本时使用。/[admin_command] biomes unlock <player> <biome_id> [true]: 解锁(如果在最后添加true则购买)传递的生态区给玩家岛屿。
权限#
小贴士
[gamemode]是一个前缀,根据你运行的游戏模式而变化。 前缀是游戏模式的小写名称,即如果你使用BSkyBlock,前缀是bskyblock。 类似地,如果你使用AcidIsland,前缀是acidisland。
缺少什么?
你可以在这个插件的addon.yml文件中找到权限的综合列表。
如果下面的列表确实缺少了什么,请告诉我们!
[gamemode].biomes(默认:true):玩家可以使用打开GUI的生态区命令。[gamemode].biomes.info(默认:true):玩家可以使用生态区信息命令。[gamemode].biomes.set(默认:true):玩家可以使用生态区设置命令。[gamemode].biomes.buy(默认:true):玩家可以使用生态区购买命令。
[gamemode].admin.biomes(默认:op):玩家可以使用打开GUI的管理员生态区命令。
更新日志#
v2.3.0 新内容 — 需要 BentoBox 3.14.0+ 和 Paper
发布于: 2026-05-05
- ⚙️ 海洋生态保留。 新增
change-ocean-biomes配置选项(默认:false),防止生态区变更覆盖海洋方块(OCEAN、WARM_OCEAN、DEEP_OCEAN等),保持岛屿海岸线和水下区域完好。设为true可恢复以前的行为。 COMMAND面板动作类型。 面板按钮现在可以在被点击时执行命令,既可作为独立按钮类型,也可作为现有生态区按钮的动作(与CHANGE/BUY/ADVANCED_PANEL并列)。适合"返回岛屿面板"按钮或任何自定义集成。- 重新设计的
biomesTemplate.yml。 44 种生态区(之前约 29 种),重新平衡了价格,新增 9 种生态区,包括红树林沼泽、苍白花园(带苍白怪兽)和竹林。3 个起始捆绑包(Starter、Explorer、Nether & End)以及PER_USAGE价格示例。 - 游戏模式感知的解锁通知。 在正确游戏模式世界中的玩家收到熟悉的可点击"立即使用"提示;在其他世界的玩家收到指明在哪个游戏模式中解锁了生态区的简单消息,避免在错误世界中执行命令的混乱。
- 首次启动时自动导入默认生态区。 当插件启动时发现某个游戏模式没有配置生态区,现在会自动从
biomesTemplate.yml导入。新装时无需手动import步骤。 - 岛屿删除/重置时取消生态队列。 岛屿被删除或重置时,排队中和进行中的生态区更新任务会被取消,正在进行的任务通过
AtomicBoolean标志在下一个区块边界停止。 - 🐛 修复了管理员 GUI 工具提示中的浮点显示精度问题(如
0.0299999999329447746→0.03)。 - 🐛 小数格式化器固定为
Locale.ROOT,使使用逗号小数的语言(如德语)将0.5显示为0.5而不是0,5。 - 🐛 超过 99 块堆叠限制的生态区模板物品现在会拆分为有效堆叠大小,而不是加载失败。
- 🔡 全部 23 个语言文件、面板 YAML 和硬编码 Java 字符串从传统的
&颜色代码迁移到 MiniMessage。新增 14 种翻译(cs、de、hr、hu、id、it、ko、pt、pt-BR、ro、ru、tr、vi、zh-HK)。
🔺 破坏性更改: 此版本要求 BentoBox 3.14.0+、Paper(不再支持 Spigot)和 Java 21。插件不会在旧版本上加载。
🔡 语言提示: 已自定义的语言文件需要更新 — 将 &c/&l 等转换为 MiniMessage 标签(<red>、<bold>),或删除自定义以获取默认值。
⚙️ 配置提示: 检查 config.yml 中的新选项 change-ocean-biomes(默认 false)。
翻译#
帮助我们保持翻译准确
现在 BentoBox 及其插件的大多数翻译已借助 AI 完成——大部分工作已经做好, 但 AI 并不完美。我们真正需要社区提供的是错误报告和纠正。
- 发现错误或措辞不当?请在 bentobox.world 的相关仓库(我们 GitHub 组织的短链接)上提交 issue 或 PR,或者在 Discord 上告知我们。
- 想要添加全新语言?请在相关仓库的
src/main/resources/locales/目录下 提交包含新语言文件的 PR,或在 Discord 上联系我们,我们会为你提供帮助。
| 语言 | 语言代码 | 进度 |
|---|---|---|
| 英语(美国) | en-US | 100%(默认) |
| 中文(中国) | zh-CN | 100% |
| 中文(香港) | zh-HK | 100% |
| 乌克兰语 | uk | 99% |
| 俄语 | ru | 100% |
| 克罗地亚语 | hr | 100% |
| 匈牙利语 | hu | 100% |
| 印尼语 | id | 100% |
| 土耳其语 | tr | 100% |
| 德语 | de | 100% |
| 意大利语 | it | 100% |
| 拉脱维亚语 | lv | 98% |
| 捷克语 | cs | 100% |
| 日语 | ja | 100% |
| 法语 | fr | 99% |
| 波兰语 | pl | 98% |
| 罗马尼亚语 | ro | 100% |
| 荷兰语 | nl | 98% |
| 葡萄牙语 | pt | 100% |
| 葡萄牙语(巴西) | pt-BR | 100% |
| 西班牙语 | es | 100% |
| 越南语 | vi | 100% |
| 韩语 | ko | 100% |
API#
自从生态区2.0和BentoBox 1.17以来,其他插件可以直接访问生态区插件数据。然而,插件请求仍然是对于不想使用太多依赖的插件来说是一个好的解决方案。
Maven依赖#
生态区提供了一个用于其他插件的API。这涵盖了2.1.0及之后的版本。
注意
添加生态区依赖到你的Maven POM.xml中:
```xml
<repositories>
<repository>
<id>codemc-repo</id>
<url>https://repo.codemc.io/repository/bentoboxworld/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>world.bentobox</groupId>
<artifactId>biomes</artifactId>
<version>2.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
```
使用最新的生态区版本。
生态区的JavaDocs可以在这里找到。
事件#
自
事件在生态区2.0版本中添加。
变量
@NotNull BiomesObject biomesObject- 被解锁的生态区对象。@Nullable User user- 解锁生态区对象的用户。@NotNull Island island- 生态区对象被解锁的岛屿。
代码示例
@EventHandler(priority = EventPriority.LOW)
public void onBiomesUnlock(BiomeUnlockedEvent event) {
User user = event.getUser();
BiomesObject biomesOjbect = event.getBiomesObject();
Island island = event.getIsland();
// 还有转换方法,不使用生态区插件对象。
UUID userUUID = event.getUserUUID();
String islandUUID = event.getIslandUUID();
String biomeId = event.getBiomeId();
Biome biome = event.getBiome();
event.setCancelled(false);
}
自
事件在生态区2.0版本中添加。
变量
@NotNull BiomesObject biomesObject- 被购买的生态区对象。@NotNull User user- 购买生态区对象的用户。@NotNull Island island- 生态区对象被购买的岛屿。
代码示例
@EventHandler(priority = EventPriority.MONITOR)
public void onBiomesPurchase(BiomePurchasedEvent event) {
User user = event.getUser();
BiomesObject biomesOjbect = event.getBiomesObject();
Island island = event.getIsland();
// 还有转换方法,不使用生态区插件对象。
UUID userUUID = event.getUserUUID();
String islandUUID = event.getIslandUUID();
String biomeId = event.getBiomeId();
Biome biome = event.getBiome();
}
自
事件在生态区2.0版本中添加。
变量
@NotNull BiomesObject biomesObject- 被使用的生态区对象。@Nullable User user- 触发生态区更改的用户。@NotNull Island island- 生态区发生变化的岛屿。- `@NotNull BlockVector min
Coordinate- 生态区更改的最小坐标。 -@NotNull BlockVector maxCoordinate` - 生态区更改的最大坐标。
!!! 示例 "代码示例"
```java
@EventHandler(priority = EventPriority.MONITOR)
public void onBiomesPreChange(BiomePreChangeEvent event) {
User user = event.getUser();
BiomesObject biomesOjbect = event.getBiomesObject();
Island island = event.getIsland();
BlockVector minCoordinate = event.getMinCoordinate();
BlockVector maxCoordinate = event.getMaxCoordinate();
// 还有转换方法,不使用生态区插件对象。
UUID userUUID = event.getUserUUID();
String islandUUID = event.getIslandUUID();
String biomeId = event.getBiomeId();
Biome biome = event.getBiome();
int minX = event.getMinX();
int minY = event.getMinY();
int minZ = event.getMinZ();
int maxX = event.getMaxX();
int maxY = event.getMaxY();
int maxZ = event.getMaxZ();
}
```
自
事件在生态区2.0版本中添加。
变量
@NotNull BiomesObject biomesObject- 被使用的生态区对象。@Nullable User user- 触发生态区更改的用户。@NotNull Island island- 生态区发生变化的岛屿。@NotNull BlockVector minCoordinate- 生态区更改的最小坐标。@NotNull BlockVector maxCoordinate- 生态区更改的最大坐标。@Nullable Result result- 生态区更改后的结果值。结果值可能为: - FINISHED: 生态区更改成功。 - TIMEOUT: 生态区更改超过超时值,失败。 - FAILED: 生态区更改由于其他原因失败。
代码示例
@EventHandler(priority = EventPriority.MONITOR)
public void onBiomeChanged(BiomeChangedEvent event) {
User user = event.getUser();
BiomesObject biomesOjbect = event.getBiomesObject();
Island island = event.getIsland();
BlockVector minCoordinate = event.getMinCoordinate();
BlockVector maxCoordinate = event.getMaxCoordinate();
Result result = event.getResult();
// 还有转换方法,不使用生态区插件对象。
UUID userUUID = event.getUserUUID();
String islandUUID = event.getIslandUUID();
String biomeId = event.getBiomeId();
Biome biome = event.getBiome();
int minX = event.getMinX();
int minY = event.getMinY();
int minZ = event.getMinZ();
int maxX = event.getMaxX();
int maxY = event.getMaxY();
int maxZ = event.getMaxZ();
String resultName = event.getResultName();
}