战利品表:池、掷骰以及条目与函数之间的区别
一个什么都不掉落的战利品表,通常是其权重或条件设置在了错误的层级。本文将解释每个嵌套层级的作用,以及值得了解的函数。
战利品表的 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存在于每个层级,并且含义不同。在池上,它们控制整个抽取过程。在条目上,它们控制该选项。在函数上,它们仅控制修改。
保证掉落需要独立的池
权重无法保证任何东西,因为一个池每次掷骰(roll)只会选择一个条目。一个必须始终掉落一张地图外加随机战利品的表需要两个池:
"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 级附魔台一样附魔——如果要求,包括宝藏附魔 |
set_components | 自定义名称、lore、任何数据组件 |
looting_enchant | 每级抢夺(Looting)的额外奖励;仅限实体表 |
set_damage | 耐久度以分数表示,所以 0.5 是半磨损状态 |
furnace_smelt | 当生物被火焰杀死时掉落的熔炼形式 |
enchant_with_levels 和 enchant_randomly 不可互换。前者模拟附魔台并遵循等级消耗;后者随意选择,可以生成游戏永远不会生成的组合。
人们常用的条件
random_chance— 一个固定的概率random_chance_with_enchanted_bonus— 现代的考虑抢夺(Looting)的几率killed_by_player— 你的稀有掉落物从坠落死亡中从未出现的原因entity_properties— 检查受害者的类型、状态或装备match_tool— 检查使用的工具,用于方块表
无需重建世界即可测试
/loot give @s loot my_pack:chests/treasure
将战利品表直接放入你的物品栏。/loot spawn、/loot insert <pos> 和 /loot replace 涵盖了其他放置方式。这比放置箱子和重新加载要快得多,而且是检查权重分布的唯一合理方法。
使用 高级战利品表生成器 构建多池表,并将函数和条件附加到正确的层级。