MC Toolkit

指南 / 命令与数据

战利品表:池、抽取次数,以及条目与函数的区别

一张什么都不掉的战利品表,通常是权重或条件放错了层级。下面说明每一层嵌套各自控制什么,以及值得了解的那些函数,如果想让某件物品必定掉落,需要为它单独建一个战利品池,不能和别的物品挤在同一池子里一起判定。

战利品表的 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 覆盖了其他几种放置方式。这比摆放箱子再重载快得多,也是检查权重分布唯一靠谱的办法。

在高级战利品表构建器中,把函数和条件挂在正确的层级上,就能构建多池战利品表。

高级战利品表生成器 →

更多指南

查看全部 →