战利品表¶
战利品表(Loot Table)是Minecraft基岩版中用于定义随机物品掉落规则的数据驱动系统。战利品表控制着实体被击杀时的掉落物、方块被摧毁时的掉落物、箱子等容器中的随机内容、钓鱼的收获物等。
概述¶
战利品表以JSON格式定义,存放在行为包的loot_tables/目录中。战利品表通过文件路径引用,例如loot_tables/entities/zombie.json。
战利品表的核心思想是通过概率池和条件判断来生成随机的物品列表。每次触发战利品表时,游戏引擎按照定义的规则从中随机选取若干物品作为结果输出。
结构¶
战利品表的定义文件由一个或多个池(Pool)组成。每个池包含一组条目(Entry)、可选的条件(Condition)和其他抽取配置。每个池独立执行,多个池的结果共同构成一次战利品表调用的输出。
池¶
池是战利品表中的一个独立的随机选择单元。每个池指定从其条目中选取的次数(rolls),可以是固定数值或一个随机范围。池还可以指定bonus_rolls等额外抽取配置,并可以通过条件控制整个池是否参与生成。
条目¶
条目是池中的一个候选物品。条目可以是:
- 物品(Item):一种具体的物品。
- 战利品表引用(Loot Table):引用另一个战利品表。
- 空(Empty):不生成任何物品。
每个条目有一个权重(Weight)值,权重越高的条目被选中的概率越大。
条件¶
条件用于限制池或条目的生效场景。常见的条件包括:
killed_by_player:要求实体被玩家击杀。random_chance:指定一个0到1之间的概率。random_chance_with_looting:概率随抢夺魔咒等级提升。has_mark_variant:要求实体具有特定的标记变种值。entity_properties:要求指定实体满足属性条件。match_tool:要求触发掉落的工具满足物品或魔咒条件。
函数¶
函数(Function)可以对战利品表输出的物品进行后处理修改。常见的函数包括:
set_count:设置物品数量。set_data:设置物品数据值。set_damage:设置工具的耐久损耗。enchant_randomly:随机附魔。enchant_with_levels:按等级附魔。set_name:设置自定义名称。set_lore:设置描述文本。looting_enchant:根据抢夺魔咒增加掉落数量。fill_container:为容器物品设置放置后的内容表。exploration_map:将地图转换为指向指定结构的探险地图。
部分函数仅适用于特定上下文。例如,looting_enchant只适用于由实体死亡触发的战利品表,furnace_smelt不适用于交易或容器,enchant_book_for_trading属于交易表函数。多个函数可以同时作用于同一条目;当相同函数发生冲突时,后定义的函数会覆盖先定义的结果。战利品表与交易表共享同一套函数系统,参见物品函数了解所有可用函数的完整说明。
应用场景¶
战利品表在基岩版中应用于以下场景:
- 实体掉落物:实体行为定义中通过
minecraft:loot组件引用战利品表。 - 方块掉落物:方块定义中通过
minecraft:loot组件引用战利品表。 - 容器内容:结构中的容器(如宝箱)通过战利品表生成随机内容。
- 钓鱼:钓鱼的收获物由战利品表控制。
/loot命令:直接调用指定战利品表,将结果给予玩家或投入世界。
覆盖¶
战利品表通过路径引用,不具有独立的全局标识符。若要覆盖原版战利品表,只需在行为包中创建与原版路径完全一致的文件即可。当多个行为包存在相同路径的战利品表文件时,资源栈中优先级更高的包(在世界行为包列表中排列更靠前的包)的文件会覆盖优先级更低包中的同路径文件。原版战利品表文件路径遵循loot_tables/<类别>/<名称>.json的惯例,涵盖实体(entities/)、方块(blocks/)、宝箱(chests/)等子目录。
参见战利品表参考了解字段、条件和函数的完整列表。