战利品表¶
战利品表(Loot Table)是Minecraft基岩版中用于定义随机物品掉落规则的数据驱动系统。战利品表控制着实体被击杀时的掉落物、方块被摧毁时的掉落物、箱子等容器中的随机内容、钓鱼的收获物等。
概述¶
战利品表以JSON格式定义,存放在行为包的loot_tables/目录中。战利品表通过文件路径引用,例如loot_tables/entities/zombie.json。
战利品表的核心思想是通过概率池和条件判断来生成随机的物品列表。每次触发战利品表时,游戏引擎按照定义的规则从中随机选取若干物品作为结果输出。
结构¶
战利品表的定义文件由一个或多个池(Pool)组成。每个池包含一组条目(Entry)和可选的条件(Condition)。
池¶
池是战利品表中的一个独立的随机选择单元。每个池指定从其条目中选取的次数(rolls),可以是固定数值或一个随机范围。战利品表中的所有池依次处理,各池的选取结果汇总为最终的掉落物列表。
条目¶
条目是池中的一个候选物品。条目可以是:
- 物品(Item):一种具体的物品。
- 战利品表引用(Loot Table):引用另一个战利品表。
- 空(Empty):不生成任何物品。
每个条目有一个权重(Weight)值,权重越高的条目被选中的概率越大。
条件¶
条件用于限制池或条目的生效场景。常见的条件包括:
killed_by_player:要求实体被玩家击杀。random_chance:指定一个0到1之间的概率。random_chance_with_looting:概率随抢夺魔咒等级提升。has_mark_variant:要求实体具有特定的标记变种值。
函数¶
函数(Function)可以对战利品表输出的物品进行后处理修改。常见的函数包括:
set_count:设置物品数量。set_data:设置物品数据值。set_damage:设置工具的耐久损耗。enchant_randomly:随机附魔。enchant_with_levels:按等级附魔。set_name:设置自定义名称。set_lore:设置描述文本。looting_enchant:根据抢夺魔咒增加掉落数量。
应用场景¶
战利品表在基岩版中应用于以下场景:
- 实体掉落物:实体行为定义中通过
minecraft:loot组件引用战利品表。 - 方块掉落物:方块定义中通过
minecraft:loot组件引用战利品表。 - 容器内容:结构中的容器(如宝箱)通过战利品表生成随机内容。
- 钓鱼:钓鱼的收获物由战利品表控制。
- 交易:村民等NPC的交易内容也可以通过交易表(类似战利品表的机制)控制。