Level#
Level 可让你的玩家通过放置方块来提升岛屿等级,竞争最高的岛屿等级!
由 tastybento 创建和维护。
安装#
- 将 level 插件 jar 文件放入 BentoBox 插件的 addons 文件夹
- 重启服务器
- 插件将创建一个数据文件夹,里面有一个 config.yml 文件
- 根据需要编辑 config.yml。该配置文件指定方块的价值(见下文)
- 如果进行了更改,请重启服务器
配置#
Level 插件有 3 个通用配置项:
- config.yml 文件包含插件的默认配置。
- blockconfig.yml 文件包含每个方块的价值。
- /panels/ 包含管理玩家 GUI 的文件。
config.yml#
配置文件包含插件的主要功能。
最新的 config.yml 可以在这里找到。
本节定义了插件的许多整体设置。
disabled-game-modes
允许指定 Level 插件不应在哪些游戏模式插件中运行。
Level 将不会与这些游戏模式插件挂钩。
默认值: []
log-report-to-console
如果从控制台执行命令,则允许查看等级报告。
默认值: true
concurrent-island-calcs
允许指定一次可以进行多少个岛屿等级计算。
如果队列中有多个,且你的 CPU 可以处理,你可以并行运行岛屿计算。
默认值: 1
calculation-timeout
允许指定等级计算应在多少分钟后停止。
一般来说,计算只需要几秒钟,所以如果这个值被触发,说明有些不对劲。
默认值: 5
zero-new-island-levels
允许指定起始方块是否应包含在岛屿等级中。
如果为 true,Level 将计算初始岛屿的等级,并将其从任何未来的等级计算中移除。 如果移除所有起始方块,玩家等级可能会变成负值。
如果为 false,玩家的初始岛屿方块将计入他们的等级。
默认值: true
login
允许设置在玩家登录时计算岛屿等级。
这会在玩家登录时静默计算他们的岛屿等级。
默认值: false
nether
允许在等级计算中包含下界岛屿。
警告:在游戏中途启用此选项会让拥有岛屿的玩家的岛屿等级突然提高。新岛屿将被正确归零。
默认值: false
end
允许在等级计算中包含末地岛屿。
警告:在游戏中途启用此选项会让拥有岛屿的玩家的岛屿等级突然提高。新岛屿将被正确归零。
默认值: false
include-chests
允许在等级计算中包含箱子内容。
警告:等级计算时间会更长,服务器性能可能受到影响。
默认值: false
underwater
允许指定水下方块倍数。
如果方块低于海平面,它们可以有更高的价值。例如 2 倍。 如果有海洋,则可以促进水下开发。该值可以是小数。
默认值: 1.0
levelcost
允许指定一个岛屿等级的价值。
默认值: 100
最小值: 1
level-calc
允许指定等级计算公式。
- blocks - 所有方块价值的总和,减去任何死亡惩罚
- level_cost - 在线性方程中,一个等级的价值
此公式可以包括 +、=、*、/、sqrt、^、sin、cos、tan、log(自然对数)。 结果将始终四舍五入为长整数。
例如,另一个非线性选项可以是: 3 * sqrt(blocks / level_cost)
默认值: blocks / level_cost
levelwait
允许指定等级请求之间的冷却时间(秒)。
默认值: 60
deathpenalty
允许指定死亡惩罚。
玩家每死一次将损失多少方块价值。 默认值 100 意味着每死一次,玩家将损失 1 级(如果 levelcost 为 100)。
设置为零可不使用此功能。
默认值: 100
sumteamdeaths
允许对死亡惩罚中的所有队员求和。
如果为 false,则只计算队长的死亡次数。
默认值: false
shorthand
允许显示较短的岛屿等级数字。
显示向下取整的大等级值,例如 10,345 -> 10k
默认值: false
blockconfig.yml#
方块配置文件包含方块的价值。
最新的 blockconfig.yml 可以在这里找到。
本节定义了方块的价值和限制。
Tip
此文件中的值仅支持整数 -> 完整数字。
limits
本节列出了任何特定方块的限制。 超过此数量的方块不会被计算。 此限制适用于所有游戏模式,不是特定于世界的。
格式: MATERIAL: NUMBER
blocks
本节列出了所有游戏模式(世界)中方块的价值。 要指定特定世界的价值,请使用下一节。 任何未列出的方块将具有 0 的价值。空气始终为零。
格式: MATERIAL: NUMBER
CraftEngine 自定义方块也受支持(需要 BentoBox 3.15.0+)。使用其命名空间 ID 作为键:
blocks:
mynamespace:my_block: 50
mynamespace:custom_ore: 3
worlds
列出在特定世界中具有不同价值的任何方块。 如果未列出某个方块,将使用 blocks 部分的默认值。 以世界名称为前缀。如果存在,这些值将应用于相关的下界和末地。
示例:
worlds:
AcidIsland_world:
SAND: 0
SANDSTONE: 0
ICE: 0
在此示例中,AcidIsland 将对所有方块使用与 BSkyBlock 相同的值,除了沙子、沙石和冰。
可自定义 GUI#
BentoBox 1.17 API 引入了一个允许实现可自定义 GUI 的功能。我们尽量让自定义变得简单,但有些功能需要解释。 你可以在这里找到更多关于 BentoBox 自定义 GUI 如何工作的信息: 自定义 GUI
我如何自定义 GUI?
要自定义 Level 插件的 GUI,你需要 2.10.0 版本。这是第一个实现它们的版本。插件将在 /plugins/bentobox/addons/level 下创建一个名为 panels 的新目录。
目前你可以自定义 3 个 GUI:
- 排行榜面板:
top_panel- 允许查看前 10 名岛屿。 - 详细方块面板:
detail_panel- 允许在游戏中查看详细的方块价值列表。 - 方块价值面板:
value_panel- 允许在游戏中查看每个方块的价值。
每个 GUI 都包含仅由其自身支持的功能。
PREVIOUS|NEXT 按钮类型是什么?
此按钮在 detail_panel 和 value_panel 中可用。 PREVIOUS 和 NEXT 按钮类型允许在方块多于 GUI 中的空间时创建自动分页。 这些类型在 data 下有额外的参数:
indexing- 指示按钮是否显示页码。
示例:
icon: tipped_arrow[potion_contents={custom_color:11546150}]
title: level.gui.buttons.previous.name
description: level.gui.buttons.previous.description
data:
type: PREVIOUS
indexing: true
action:
left:
tooltip: level.gui.tips.click-to-previous
TOP 按钮类型是什么?
此按钮在 top_panel 中可用。它按岛屿等级显示排名前 X 的岛屿。
icon 默认为 PLAYER_HEAD,带有正确的玩家皮肤。启用它将使用指定的材料替换它。
data 字段中的 index 允许指定当前位置应显示前 10 名中的哪个位置。
排行榜面板有 2 个实现的操作,功能需要额外的插件:
warp- 需要 Warps 插件。仅当玩家岛屿上存在传送标志时才会显示。visit- 需要 Visit 插件。仅当玩家岛屿上允许访问时才会显示。
Fallback 允许在排行榜位置上没有玩家时更改背景图标。
示例:
#icon: PLAYER_HEAD
title: level.gui.buttons.island.name
description: level.gui.buttons.island.description
data:
type: TOP
index: 1
actions:
warp:
click-type: LEFT
tooltip: level.gui.tips.click-to-warp
visit:
click-type: RIGHT
tooltip: level.gui.tips.right-click-to-visit
fallback:
icon: LIME_STAINED_GLASS_PANE
title: level.gui.buttons.island.empty
VIEW 按钮类型是什么?
此按钮在 top_panel 中可用。它显示查看者的岛屿等级。
icon 默认为 PLAYER_HEAD,带有正确的玩家皮肤。启用它将使用指定的材料替换它。
view 操作允许查看玩家岛屿的详细菜单。
示例:
#icon: PLAYER_HEAD
title: level.gui.buttons.island.name
description: level.gui.buttons.island.description
data:
type: VIEW
actions:
view:
click-type: unknown
tooltip: level.gui.tips.click-to-view
BLOCK 按钮类型是什么?
此按钮在 detail_panel 和 value_panel 中可用。此按钮将给定材料显示为图标。
示例:
#icon: STONE
title: level.gui.buttons.value.name
description: level.gui.buttons.value.description
data:
type: BLOCK
命令#
Tip
[player_command] 和 [admin_command] 是根据你运行的游戏模式而不同的命令。 游戏模式的 config.yml 文件包含允许你修改这些值的选项。 例如,在 BSkyBlock 中,默认的 [player_command] 是 island,默认的 [admin_command] 是 bsbadmin。
/[player_command] top: 访问排行榜面板。需要[gamemode].island.top权限。/[player_command] level: 触发玩家的等级计算。需要[gamemode].island.level权限。/[player_command] value [material]: 允许检查方块价值。需要[gamemode].island.value权限。/[player_command] donate: 打开方块捐献 GUI,将方块价值捐献给岛屿等级。需要[gamemode].island.level.donate权限。/[player_command] donate hand [amount]: 将手持物品捐献指定数量给岛屿等级。
/[admin_command] level <player>: 触发玩家的等级计算。需要[gamemode].admin.level权限。/[admin_command] levelstatus: 显示有多少岛屿在队列中。需要[gamemode].admin.levelstatus权限。/[admin_command] sethandicap <player> <number>: 允许设置岛屿等级的初始数值。需要[gamemode].admin.level.sethandicap权限。/[admin_command] top: 在聊天中显示前 10 名岛屿。需要[gamemode].admin.top权限。/[admin_command] top remove <player>: 允许从排行榜中移除玩家。需要[gamemode].admin.top.remove权限。
权限#
Tip
[gamemode] 是一个根据你运行的游戏模式而不同的前缀。 前缀是游戏模式的小写名称,即如果你使用 BSkyBlock,前缀就是 bskyblock。 类似地,如果你使用 AcidIsland,前缀就是 acidisland。
[gamemode].intopten- (默认:true) - 让玩家出现在前 10 名面板中。[gamemode].island.level- (默认:true) - 允许玩家使用/[player_command] level命令。[gamemode].island.top- (默认:true) - 允许玩家使用/[player_command] top命令。[gamemode].island.value- (默认:true) - 允许玩家使用/[player_command] value命令。[gamemode].island.level.donate- (默认:true) - 允许玩家使用/[player_command] donate命令。[gamemode].island.level.details.blocks- (默认:true) - 允许玩家查看岛屿的详细方块列表。[gamemode].island.level.details.spawners- (默认:false) - 允许玩家查看岛屿的详细刷怪笼列表。[gamemode].island.level.details.underwater- (默认:false) - 允许玩家查看岛屿的详细水下方块列表。[gamemode].island.level.details.above-sea-level- (默认:false) - 允许玩家查看岛屿海平面以上的详细方块列表。
[gamemode].admin.level- (默认:op) - 允许玩家使用/[admin_command] level <player>命令。[gamemode].admin.levelstatus- (默认:op) - 允许玩家使用/[admin_command] levelstatus命令。[gamemode].admin.level.sethandicap- (默认:op) - 允许玩家使用/[admin_command] sethandicap <player> <number>命令。[gamemode].admin.top- (默认:op) - 允许访问/[admin_command] top命令。[gamemode].admin.top.remove- (默认:op) - 允许访问/[admin_command] top remove <player>命令。
有缺失的内容吗?
你可以在此插件的 addon.yml 文件中找到完整的权限列表。 如果下面的列表中确实缺少了什么,请告诉我们!
占位符#
提示
[gamemode] 是一个前缀,根据你运行的游戏模式而有所不同。
前缀是游戏模式名称的小写形式,即如果你正在使用 BSkyBlock,前缀则为 bskyblock。
每个游戏模式正确翻译的占位符可以在以下位置找到:
请阅读主要的占位符页面.
| Placeholder | Description | Level version |
|---|---|---|
%Level_[gamemode]_island_level% | Island level of the player's island | 1.9.0 |
%Level_[gamemode]_visited_island_level% | Island level of the island the player is standing on | 1.9.0 |
%Level_[gamemode]_top_value_#rank#% | Island level of the #rank#-th island in the Top 10 | 1.9.0 |
%Level_[gamemode]_top_name_#rank#% | Island owner's name of the #rank#-th island in the Top 10 | 1.9.0 |
%Level_[gamemode]_top_island_name_#rank#% | Name of the #rank#-th island in the Top 10 | 2.11.0 |
%Level_[gamemode]_top_members_#rank#% | List of the members of the #rank#-th island in the Top 10 | 2.11.0 |
%Level_[gamemode]_top_weighted_value_#rank#% | Weighted island level (level/number of members) of the #rank#-th island in the Top 10 | 2.12.0 |
%Level_[gamemode]_top_weighted_name_#rank#% | Weighted island level name (level/number of members) of the #rank#-th island in the Top 10 | 2.12.0 |
%Level_[gamemode]_top_weighted_members_#rank#% | Weighted island members (level/number of members) of the #rank#-th island in the Top 10 | 2.12.0 |
%Level_[gamemode]_top_weighted_island_name_#rank#% | Weighted island name (level/number of members) of the #rank#-th island in the Top 10 | 2.12.0 |
%Level_[gamemode]_points_to_next_level% | Points to the next level for player | 2.3.3 |
%Level_[gamemode]_rank_value% | Displays island rank value | 2.7.2 |
%Level_[gamemode]_island_level_raw% | Unformatted island level | 2.8.1 |
%Level_[gamemode]_island_total_points% | Total number of points counted before applying level formula | 2.10.0 |
%Level_[gamemode]_island_level_max% | Maximum level this island has ever been. Current level maybe lower. | 2.10.0 |
常见问题#
你能添加 X 功能吗?
请将其添加到这里的列表中。
如何让 level-cost 在每个等级后增加?
level-cost 设置是一个固定值,无法按等级逐步增加,因为 BentoBox 通过将单一公式应用于总方块数来计算岛屿等级,而非逐级迭代。
实现等级成本递增的方式是使用 level-calc 公式。例如,若要让每个等级比前一个等级难 50%(即 1 级需要 100 个方块,2 级需要 150 个,3 级需要 225 个,以此类推),公式如下:
level-calc: 2.4661 * log(blocks) - (2.4661 * log(level_cost) - 1)
其中 level_cost 是达到 1 级所需的方块数。
以下是该进度曲线的图表:

Warning
该公式在 25 级左右开始渐近——达到 26 或 27 级需要极大量的方块,这可能导致大多数玩家最终趋向相同的最高等级。在选择进度曲线时请考虑这一点。
推导自定义公式
要构建适合特定进度曲线的公式:
- 在电子表格(如 Excel 或 Google Sheets)中创建目标等级及其对应方块成本的表格。
- 绘制该表格的 X/Y 图表。
- 右键单击图表并添加趋势线,选择最适合曲线的近似类型(线性、对数、指数等),然后启用"在图表上显示方程"。
- 在生成的方程中,将
x替换为blocks,并将其作为level-calc的值。
例如,上述 50% 进度就是通过这种方式推导出来的,结果为:
level-calc: 2.4661 * log(blocks) - 10.357

更新日志#
v2.23.0 新内容
发布于: 2026-03-xx
- Oraxen/Nexo 自定义方块支持。 Level 现在可以计算 Oraxen 和 Nexo 自定义方块的价值。在
blockconfig.yml中使用oraxen:block_id或nexo:block_id格式定义价值。 - 每方块占位符。 针对岛屿中跟踪的每种方块类型动态注册占位符(例如
[gamemode]_island_count_<block>)。由于这些是基于配置动态生成的,请参考blockconfig.yml了解你服务器上可用的标识符。
v2.24.0 新内容 — 需要操作
发布于: 2026-04-xx
- 方块捐献系统。 玩家现在可以将方块从物品栏直接捐献给岛屿等级,而无需将其放置在岛屿上。新命令:
/[player_command] donate(GUI)和/[player_command] donate hand [amount]。 - 新旗帜
ISLAND_BLOCK_DONATION— 控制谁可以捐献方块(默认:岛屿所有者;最低:成员)。 - 排行榜面板中新增
DONATED标签,显示捐献方块贡献。 - 等级公式中新增
island_members变量。 - 🔡 所有语言文件迁移至 MiniMessage。 删除
BentoBox/addons/Level/locales/并重启以重新生成。 - 🔺 需要删除
detail_panel.yml— 删除旧面板文件以获取包含捐献标签的更新版本。
v2.25.0 新内容
发布于: 2026-04-26
- CraftEngine 自定义方块支持。 CraftEngine 方块现在可在岛屿等级计算中被计数。在
blockconfig.yml中使用命名空间 ID 添加(如mynamespace:my_block: 50)。需要 BentoBox 3.15.0+。可通过在config.yml中设置disabled-plugin-hooks: [CraftEngine]禁用。 - 可本地化的
hand关键字。/island donate和/island value中的hand参数现可通过新的island.donate.hand.keyword语言键翻译。英文hand始终作为备用被接受。 - 🔡 所有 16 个非英语语言文件已更新,包含缺失的键。
- 🔡 乌克兰语语言文件现已完整翻译。
🔡 重新生成语言文件以获取新的 island.donate.hand.keyword 键。
v2.26.0 新内容
发布于: 2026-05-04
- 可配置捐献面板。 捐献 GUI 现在通过新的
panels/donation_panel.yml模板完全可配置,与价值面板、详情面板和前十面板一致。管理员可以将面板调整为 1 至 6 行、重新排列四个命名按钮(INFO、CANCEL、PREVIEW、CONFIRM)、更换图标,并添加装饰性物品。捐献网格会自动填充非边框、非命名按钮的所有格子。 force-shown: [1,2,3,4]控制面板使用的行数(支持 1–6 行)。四个必需按钮按其data.type放置。如果模板缺失或任一必需按钮不存在,面板将回退到先前硬编码的 4 行布局。- 🐛 装饰性模板物品现在会真正显示在物品栏中;自定义
title:现已生效;force-shown现作为列表解析(与其他面板 YAML 一致)。 - 无 API 破坏、无语言变化、无
config.yml迁移。
⚙️ 捐献面板布局。 首次启动时会生成新的 panels/donation_panel.yml — 不修改即保持 2.25.0 的布局,或编辑以自定义。
翻译#
帮助我们保持翻译准确
现在 BentoBox 及其插件的大多数翻译已借助 AI 完成——大部分工作已经做好, 但 AI 并不完美。我们真正需要社区提供的是错误报告和纠正。
- 发现错误或措辞不当?请在 bentobox.world 的相关仓库(我们 GitHub 组织的短链接)上提交 issue 或 PR,或者在 Discord 上告知我们。
- 想要添加全新语言?请在相关仓库的
src/main/resources/locales/目录下 提交包含新语言文件的 PR,或在 Discord 上联系我们,我们会为你提供帮助。
| 语言 | 语言代码 | 进度 |
|---|---|---|
| 英语(美国) | en-US | 100%(默认) |
| 中文(中国) | zh-CN | 100% |
| 乌克兰语 | uk | 100% |
| 俄语 | ru | 100% |
| 匈牙利语 | hu | 100% |
| 印尼语 | id | 100% |
| 土耳其语 | tr | 100% |
| 德语 | de | 100% |
| 拉脱维亚语 | lv | 100% |
| 捷克语 | cs | 100% |
| 法语 | fr | 100% |
| 波兰语 | pl | 100% |
| 荷兰语 | nl | 100% |
| 葡萄牙语 | pt | 100% |
| 西班牙语 | es | 100% |
| 越南语 | vi | 100% |
| 韩语 | ko | 100% |
API#
从 Level 2.7.2 和 BentoBox 1.17 开始,其他插件可以直接访问 Level 插件数据。但是,对于不想使用太多依赖项的插件来说,插件请求仍然是一个很好的解决方案。
Maven 依赖#
Level 为其他插件提供了 API。这涵盖了 Level 2.8.1 及更高版本。
Note
将 Level 依赖项添加到你的 Maven POM.xml 中:
<repositories>
<repository>
<id>codemc-repo</id>
<url>https://repo.codemc.io/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>world.bentobox</groupId>
<artifactId>level</artifactId>
<version>2.8.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
使用最新的 Level 版本。
然后,一旦你拥有岛屿所在的世界,并确认玩家是该世界中岛屿的所有者,你就可以通过询问 Level 来获得玩家的等级。
Level 的 JavaDoc 可以在这里找到。
事件#
变量
Island island- 岛屿对象。UUID targetPlayer- 计算等级的玩家的 ID。Results results- 计算出的岛屿结果。
代码示例
@EventHandler(priority = EventPriority.MONITOR)
public void onLevelCalculated(IslandLevelCalculatedEvent event) {
UUID user = event.getTargetPlayer();
Island island = event.getIsland();
Results results = event.getResults();
// 来自结果的死亡惩罚。
int deathHandicap = event.getDeathHandicap();
// 来自结果的岛屿初始等级。
long initialLevel = event.getInitialLevel();
// 来自结果的岛屿等级。
long level = event.getLevel();
// 这将覆盖岛屿等级为 100。
event.setLevel(100);
// 达到下一级所需的点数
long pointsToNextLevel = event.getPointsToNextLevel();
// 来自结果的报告文本。
List<String> report = event.getReport();
}
变量
Island island- 岛屿对象。UUID targetPlayer- 计算等级的玩家的 ID。
代码示例
@EventHandler(priority = EventPriority.LOW)
public void beforeLevelCalculated(IslandPreLevelEvent event) {
UUID user = event.getTargetPlayer();
Island island = event.getIsland();
}
插件请求处理程序#
直到 BentoBox 1.17,由于我们用于加载插件的类加载器,我们在访问 BentoBox 环境之外的数据时遇到了问题。 这意味着数据只能从其他插件访问。但是 BentoBox 实现了 PlAddon 功能,这意味着请求处理程序不再是必需的。
有关插件请求处理程序的更多信息可以在这里找到。
描述
返回给定世界中玩家的岛屿等级。
输入
world-name: String - 世界名称。player: UUID - 玩家的 UUID。
输出
玩家的岛屿等级,如果输入无效或该玩家在此世界中没有岛屿,则为 0L。
Failure
如果未提供 world-name 或 world-name 不存在或不是游戏模式世界,此处理程序将返回 0L。
代码示例
/**
* 返回给定世界中玩家的岛屿等级。
* @param playerUUID 玩家的 UUID,不为 null。
* @param worldName 岛屿所在的世界(主世界)名称,不为 null。
* @return 玩家的岛屿等级,如果输入无效或该玩家在此世界中没有岛屿,则为 {@code 0L}。
*/
public long getIslandLevel(UUID playerUUID, String worldName) {
return (Long) new AddonRequestBuilder()
.addon("Level")
.label("island-level")
.addMetaData("world-name", worldName)
.addMetaData("player", playerUUID)
.request();
}
描述
返回拥有的岛屿位于前 10 名的玩家,映射到他们岛屿的等级。
输入
world-name: String - 世界名称。
输出
Map<UUID, Long>,包含拥有的岛屿位于前 10 名的岛主的 UUID,映射到他们岛屿的等级。
Failure
如果未提供 world-name 或 world-name 不存在或不是游戏模式世界,此处理程序将返回空 map。
代码示例
/**
* 返回拥有的岛屿位于前 10 名的玩家,映射到他们岛屿的等级。
* @param worldName 岛屿所在的世界(主世界)名称,不为 null。
* @return 一个 Map,包含拥有的岛屿位于前 10 名的岛主的 UUID,映射到他们岛屿的等级,
* 如果指定的世界不存在或不包含岛屿,则返回一个空 map。
*/
public Map<UUID, Long> getTopTen(String worldName) {
return (Map<UUID, Long>) new AddonRequestBuilder()
.addon("Level")
.label("top-ten-level")
.addMetaData("world-name", worldName)
.request();
}