
战利品箱
默认提供六个不同等级的战利品箱。你可以使用数据包或KubeJS来自定义自己的战利品箱。
战利品箱
战利品箱是一个由定义驱动的战利品箱模组。该模组只注册一种战利品箱物品,即 lootbox:loot_box;实际的箱子类型存储在物品的 loot_box_id 数据中。战利品箱可以来自内置定义、数据包或 KubeJS。
在登录时以及执行 /reload 之后,服务器会将最终定义与每个客户端同步。在多人游戏中,JEI、创造模式物品栏、物品名称、颜色、提示文本和奖励预览因此都使用服务器的数据。
快速开始
/lootbox give @s lootbox:common
/lootbox give @s lootbox:rare 3
内置箱子等级从低到高依次为:
common → unusual → rare → epic → legendary → endurance
耐力奖励箱有 0.01% 的概率进入其奖励抽取。在这些抽取中,80% 会给予 100 个钻石块,20% 会给予 100 个绿宝石块。其余 99.99% 的概率会给予另一个耐力奖励箱。
内置战利品表可选用地包含来自通用机械、机械动力、Iron's Spells 'n Spellbooks、Goety、应用能源2、Terra Entity、暮色森林和以太世界的代表性物品。缺失的模组会被自动跳过,绝不会成为硬性依赖。
数据包
请将定义放置在:
data/<命名空间>/loot_boxes/<id>.json
完整示例:
{
"display_name_key": "example.lootbox.name",
"color": "#00E5FF",
"rolls": 2,
"jei_info_key": "example.lootbox.jei_info",
"entries": [
{
"item": "minecraft:diamond",
"min": 1,
"max": 3,
"weight": 10,
"luck_weight": 2,
"condition": { "type": "luck", "min": 2 }
},
{
"tag": "minecraft:music_discs",
"min": 1,
"max": 1,
"weight": 5
},
{
"box": "lootbox:rare",
"min": 1,
"max": 1,
"weight": 1
}
]
}
根字段
| 字段 | 类型 | 描述 |
|---|---|---|
display_name_key |
字符串 | 箱子名称的翻译键。推荐使用。如需使用字面文本,请改用 display_name。 |
color |
#RRGGBB、0xRRGGBB 或整数 |
应用于箱子纹理的颜色。默认为白色。 |
rolls |
整数 | 每次开启的奖励抽取次数。默认为 1。 |
jei_info_key |
字符串 | JEI 信息面板的翻译键。如需使用字面文本,请改用 jei_info。 |
entries |
数组 | 奖励条目。每个条目必须且只能定义 item、tag 或 box 其中之一。 |
奖励条目
item:固定的物品 ID。tag:物品标签 ID。将从标签中均匀随机选择一个物品,同时该条目的总权重保持不变。数据重载后会重新解析标签。box:另一个战利品箱的 ID。min、max:数量范围。weight:基础条目权重。luck_weight:最终权重为weight + 玩家幸运值 × luck_weight。condition: {"type":"luck","min":2}:要求玩家的幸运值至少为2。condition.display_key或condition.display:用于在 JEI 和提示文本中显示已注册自定义条件的文本。
标签奖励仍作为一个逻辑奖励条目。在 JEI 中,所有匹配的物品会显示在一个输出槽位中并在该槽位内循环显示。在详细提示文本中,会显示前两个匹配物品以及匹配物品的总数。
KubeJS
将战利品箱定义放在 kubejs/server_scripts/lootbox.js 中,以便它们可以被 /reload 重新执行。仅在需要完整游戏重启期间注册的内容时才使用 startup_scripts。
建议在重新注册之前清除之前的脚本定义:
const LootBoxApi = Java.loadClass('net.xuwu.lootbox.LootBoxApi')
LootBoxApi.clearScriptedDefinitions()
LootBoxApi.registerCondition(
'has_vip_tag',
ctx => ctx.hasPlayer() && ctx.player().getTags().contains('vip'),
ctx => 'VIP required'
)
LootBoxApi.registerTranslated(
'example:vip',
'example.lootbox.vip',
1,
LootBoxApi.entries(
LootBoxApi.entry('minecraft:diamond', 1, 2, 10, 2, 'has_vip_tag', ''),
LootBoxApi.entryTag('minecraft:music_discs', 1, 1, 5, 0, '', ''),
LootBoxApi.entryBox('lootbox:rare', 1, 1, 1, 0, '', '')
),
0x00E5FF,
'example.lootbox.vip_jei_info'
)
数据包与 KubeJS 对照表
| 数据包 | KubeJS | 描述 |
|---|---|---|
display_name |
register |
字面形式的箱子名称。 |
display_name_key |
registerTranslated |
翻译键形式的箱子名称。 |
item |
entry |
固定物品奖励。 |
tag |
entryTag |
从标签中均匀随机选择。 |
box |
entryBox |
另一个战利品箱作为奖励。 |
jei_info_key |
register(..., color, jeiInfoKey) |
JEI 信息的翻译键。 |
condition.display_key |
entryWithConditionKey、entryTagWithConditionKey、entryBoxWithConditionKey |
条件文本的翻译键。 |
min、max、weight、luck_weight |
所有 entry* 方法 |
数量、权重和幸运权重。 |
标签、箱子以及带翻译的条件也可以独立组合使用:
LootBoxApi.registerTranslated(
'example:translated',
'example.lootbox.translated',
1,
LootBoxApi.entries(
LootBoxApi.entryTagWithConditionKey(
'minecraft:music_discs', 1, 1, 10, 0, 'has_vip_tag', 'example.condition.vip'
),
LootBoxApi.entryBox('lootbox:endurance', 1, 1, 1, 0, '', '')
),
0x7C4DFF,
'example.lootbox.translated_jei_info'
)
配置
所有设置都存储在 config/lootbox-common.toml 中。服务器的配置决定了实际的游戏规则:
hide_default_boxes:隐藏内置箱子,并将其从创造模式物品栏和 JEI 中移除。默认为false。mob_drops_enabled:启用在被击杀的生物上掉落内置战利品箱。默认为true。enable_mekanism_rewards、enable_create_rewards、enable_irons_spellbooks_rewards、enable_goety_rewards、enable_ae2_rewards、enable_terra_entity_rewards、enable_twilight_forest_rewards和enable_aether_rewards:分别独立启用可选的模组集成。全部默认为true。mob_drop_chances:配置六个内置箱子等级的掉落几率。每次击杀最多掉落一个内置箱子。检查顺序依次为:Endurance、Legendary、Epic、Rare、Unusual、Common。
接收到服务器快照后,客户端会使用服务器的箱子列表和隐藏设置刷新 JEI 和创造模式物品栏。本地客户端配置仅在连接到服务器之前作为界面回退使用。
JEI
安装了 JEI 后,每个可见的战利品箱都会显示一个配方条目,包含其输入箱子和可能的奖励:
- 输入和输出槽位使用 JEI 的标准槽位背景。
- 标签奖励被合并到一个输出槽位中,并在所有匹配物品之间循环显示,而不会分割该标签条目的总权重。
- 大量奖励列表显示在可滚动的 7×4 奖励网格中。拖动滚动条或使用鼠标滚轮浏览所有奖励。
- 悬停输出项会显示其数量、权重、幸运权重、在当前幸运值下的最终概率以及条件。
- 未满足幸运条件的奖励在 JEI 和提示文本中均一致地显示
0.00%。 jei_info_key或内置箱子的获取/掉落信息显示在 JEI 条目的下方。较长的英文文本会自动换行。
自动战利品箱开启器
自动战利品箱开启器在其输入槽位中接受一个战利品箱,并将生成的奖励送出其输出物品栏。可以从“功能方块”创造模式标签页中访问,或使用以下配方合成:
铁锭 | 漏斗 | 铁锭
铁锭 | 红石 | 铁锭
铁锭 | 铁锭 | 铁锭
该方块需要铁镐或更高等级的镐才能在被开采时掉落自身。如果它被无效工具破坏或强制移除方块破坏,其中存储的所有物品仍然会掉落。
多人游戏与重新加载
- 将数据包放入世界的
datapacks目录,并将 KubeJS 定义放入服务器的kubejs/server_scripts目录。 - 执行
/reload。 - 服务器会重新计算数据包和 KubeJS 的定义,并将最终快照发送给每一位在线玩家。
- 客户端会自动刷新 JEI、创造模式物品栏、箱子名称、颜色和奖励显示。玩家无需在每个客户端上单独安装或执行相同的脚本。
如果新箱子不可见,请首先确保服务器和客户端使用匹配的模组版本。然后依次检查 hide_default_boxes、KubeJS 日志以及 /reload 后的服务器日志。未知或已移除的定义会通过物品快照安全显示,并且不会导致已包含这些箱子的世界崩溃。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。