战利品表:池、抽取次数,以及条目与函数的区别
一张什么都不掉的战利品表,通常是权重或条件放错了层级。下面说明每一层嵌套各自控制什么,以及值得了解的那些函数,如果想让某件物品必定掉落,需要为它单独建一个战利品池,不能和别的物品挤在同一池子里一起判定。
战利品表的 JSON 有四层嵌套,每一层的含义都不同。几乎所有“我的表什么都不掉”的问题,都是某个条件被挂在了离它该在的位置差一层的地方。
四个层级
table
└── pools[] how many independent draws
└── entries[] what can come out of this draw
└── functions[] modify the item that came out
- 池上的
rolls决定这个池抽取多少次。一个rolls: 3的池会从同一份条目列表中抽三次。 - 条目上的
weight是在它所属池内的相对权重。权重不需要加起来等于任何数;权重 10 的条目对上权重 90 的条目,出现概率就是后者的十分之一。 conditions存在于每一层,但含义各不相同。在池上,它控制整次抽取是否发生。在条目上,它控制这一个选项是否可选。在函数上,它只控制这次修改是否生效。
想保证掉落,就得单独开一个池
权重无法保证任何东西,因为一个池每次抽取只会选中一个条目。一张必须始终掉落一张地图外加随机战利品的表,需要两个池:
"pools": [
{ "rolls": 1, "entries": [ { "type": "minecraft:item", "name": "minecraft:filled_map" } ] },
{ "rolls": { "min": 2, "max": 4 }, "entries": [ … weighted list … ] }
]
第一个池只有一个条目,所以它必定产出该条目。第二个池从加权列表中抽取 2–4 次。
值得了解的函数
| 函数 | 作用 |
|---|---|
set_count | 固定数值,或 uniform 范围 |
enchant_randomly | 随机附魔,可选地限定在一个列表内 |
enchant_with_levels | 相当于 N 级的附魔台——除非用 options 收窄范围,否则可以是任意附魔 |
set_components | 自定义名称、描述文本、任意数据组件 |
enchanted_count_increase | 按附魔等级(抢夺)增加数量;仅限实体表 |
set_damage | 以分数表示耐久度,因此 0.5 就是磨损一半 |
furnace_smelt | 生物被火烧死时掉落烧炼后的形态 |
enchant_with_levels 和 enchant_randomly 不能互换。前者模拟附魔台,会遵守等级消耗;后者任意挑选,可能产出游戏本身永远不会生成的组合。
人们常用的条件
random_chance—— 一个固定概率random_chance_with_enchanted_bonus—— 现代的、会考虑抢夺的概率killed_by_player—— 你的稀有掉落从不因摔死而出现,原因就在这里entity_properties—— 检查受害者的类型、状态或装备match_tool—— 检查使用的工具,用于方块表
不用重建世界也能测试
/loot give @s loot my_pack:chests/treasure
会把这张表直接塞进你的物品栏。/loot spawn、/loot insert <pos> 和 /loot replace 覆盖了其他几种放置方式。这比摆放箱子再重载快得多,也是检查权重分布唯一靠谱的办法。
在高级战利品表构建器中,把函数和条件挂在正确的层级上,就能构建多池战利品表。