Template:Translation:未知参数。
战利品表(Loot table,前称可抢夺物品表)是一种技术性JSON表。它的功能是用来替换自然生成的容器的内容物、杀死实体时的掉落物、钓鱼时可以钓上的物品以及破坏方块时的掉落物。
用途
战利品表由诸多字符串标签和一个长整型标签组成,这些标签决定了表的用法,长整型标签决定种子。在相同的种子下生物或者是容器会掉落相同的物品。战利品表不决定容器内容物的排列方式。这种随机完全基于种子。
对于箱子、陷阱箱、漏斗、运输矿车、漏斗矿车、发射器、投掷器和潜影盒而言:
-
- LootTable:战利品表用于容器在将来被打开,或者内容物发生其他互动的时候进行物品的装填。 若是一个大箱子,则仅带有此标签的一半箱子会受到影响。
- LootTableSeed:生成战利品表的种子。此项为空或者是0时则使用随机的种子。
一旦容器内容物发生了互动(如打开箱子或破坏箱子等),这些标签会被移除,也只有这样,战利品才会出现在容器中。
对生物而言:
- 根标签。
- DeathLootTable:战利品表决定生物死亡时的掉落物品。
- DeathLootTableSeed:生成战利品表的种子,类似于生成世界的种子。此项为空或者是0时将使用随机的种子。
生物和容器的战利品表可以用/entitydata
、/blockdata
、/execute store
、/data merge
修改。
您还可以使用命令/loot
自定义地图可以使用战利品表调整容器中出现的战利品和生物的掉落物。也可以修改原有的战利品表或者新建一个。文件结构如下:
- <地图存档文件夹>
- datapacks
- 数据包名称
- data
- 命名空间
- loot_tables
- 命名空间
- data
- 数据包名称
- datapacks
默认文件在命名空间“minecraft”下,而自定义地图与自定义生物也都有自己的命名空间。
若想要覆盖默认战利品表,应把它们放到命名空间“Minecraft”下。战利品表由entities、chests和fishing组成,详见战利品表。若要使用自定义命名空间,则应把战利品表标签设置为“命名空间:战利品表”格式,“命名空间”是命名空间的名称,“战利品表”是战利品表的文件名称去除.json后缀。
标签
战利品表完全使用标准的JSON格式。下面是用到的tag列表。
- 根标签
- pools:这个实体的随机池的全部列表。每个随机池中都会随机抽取列表(entries)里面的物品。每个随机池都会指定其抽取次数(rolls)。
- 一个随机池
- conditions:决定了使用这个随机池的条件。
- 一个条件
- condition:这个条件的名称。具体名称将在下方列出。
- 一个条件
- rolls:决定了在此随机池中抽奖的准确次数。
- rolls:决定了在此随机池中抽奖的次数范围,具体次数为该范围内的随机数。
- min:最小次数。
- max:最大次数。
- bonus_rolls:决定了每点幸运会使得在此随机池中多抽奖的次数。加起来后会向下取整。
- bonus_rolls:决定了每点幸运使得在此随机池中多抽奖的次数的范围,取范围内的随机数。加起来会向下取整。
- min:额外抽奖的最小次数。
- max:额外抽奖的最大次数。
- entries:这个池中能抽出的东西列表。每一次抽奖会随机根据权重选择一个条目(如果它符合指定条件)。
- 一个被抽出项
- conditions:决定抽中该项的条件。
- 一个条件
- condition:条件名。具体名称将在下方列出。
- 一个条件
- type:抽出项的种类。可以填写
item
选择物品,或loot_table
以读取文件夹中的一个战利品表,或者empty
什么都不生成。 - name:
- 如果type是item,则填写物品的ID。比如
minecraft:diamond
。在没有受到函数执行的影响的情况下,其数量为1。 - 如果type是loot_table,则填写该物品表ID。比如
minecraft:gameplay/fishing/junk
。
- 如果type是item,则填写物品的ID。比如
- functions:决定了抽中这个物品时对其执行函数。如果没有被设置,它将不会被使用。必须按照顺序排放(会按照顺序执行),比如
looting_enchant
必须放在set_count
之后以正常运作。- 一个函数:
- function:函数名称(注意不是数据包中的函数)。具体名称将在下方列出。
- conditions:决定了执行该函数的条件。
- 一个条件
- condition:条件的名字。具体名称将在下方列出。
- 一个条件
- 一个函数:
- weight:决定了这个物品被选择的权重。这个值越高物品便越容易被选择(概率为这个物品的权重⁄所有考虑的物品权重之和)。
- quality:基于杀死/开启箱子/钓鱼的玩家的幸运修改条目的
weight
。公式为weight + (quality * generic.luck)
(向下取整)。
- conditions:决定抽中该项的条件。
- 一个被抽出项
- conditions:决定了使用这个随机池的条件。
- 一个随机池
- pools:这个实体的随机池的全部列表。每个随机池中都会随机抽取列表(entries)里面的物品。每个随机池都会指定其抽取次数(rolls)。
函数
战利品表使用了多种给物品添加特殊数据的函数,比如堆叠数或者附魔。下方是这些函数的列表以及使用它们用到的标签。这些tag都位于 function标签的下方。
- enchant_randomly - 为物品附上一个随机的附魔。附魔的等级也是随机的。
- enchantments:能够附上的附魔。如果没有此标签,所有可以对该物品附上的附魔都可能被附上。
- enchant_with_levels - 决定了物品的附魔等级。
- treasure:决定了物品是否能被附上宝藏附魔。
- levels:决定了该附魔的具体等级。
- levels:决定了该附魔的等级范围,在范围内随机抽取。
- min:使用的等级的最小值。
- max:使用的等级的最大值。
- furnace_smelt - 物品将变为在熔炉里烧炼后的状态。用于被火烧死动物死后掉落烧熟的食物。
- looting_enchant - 决定了抢夺附魔对该物品数量的影响。如果未使用,抢夺附魔将对该物品没有效果。
- count:决定了每等级抢夺附魔使得物品需要增加的准确数量。
- count:决定了每等级抢夺附魔使得物品需要增加的数量范围,在范围内取随机值。
- min:数量增加的最小值。
- max:数量增加的最大值。
- limit:指定在计算物品数量增加时的最大限制(也就是说,如果抢夺附魔等级足够高使算出数量超出此限制,则使用限制的数量而不是算出的数量)。如果这个值为0,则不会有限制。
- set_attributes - 为物品加上属性修饰符。
- modifiers
- 一个修改器:
- name:修改器的名称。
- attribute:此修改器修改的属性的名称。
- operation:修改数值的方法。必须是addition、multiply_base或multiply_total。
- amount:指定修改的准确数值。
- amount:指定修改的数值的范围,在范围内随机抽取。
- min:最小数值。
- max:最大数值。
- id:可选:修改器的UUID。如果没有指定,新的UUID将会被生成。
- slot:只有当该物品放在指定的格子时,该修改器才有用,这个数值可以是以下任何一个:mainhand、offhand、feet、legs、chest、head。
- slot:列表中的其中一个格子会被随机选择
- 一个修改器:
- modifiers
- set_count - 设置该物品的堆叠数量。
- count:决定了物品的具体堆叠数量。
- count:决定了物品的堆叠数量的最大值和最小值,在该范围内随机抽取。
- min:堆叠数量的最小值。
- max:堆叠数量的最大值。
- set_damage - 设置工具的损伤值(耐久度)。
- damage:指定伤害的比率(1.0是没有使用过,0.0则是剩下0耐久度)。
- damage:指定一个随机的伤害比率(在一个范围之内)。
- min:最小值。
- max:最大值。
- set_name - 设置该物品的自定义名称。它是一个JSON文本。
- name:纯文本名称。
- name:JSON文本组合,允许设置其颜色、翻译等。
- set_nbt - 在该物品上增加nbt标签。
- tag:添加nbt标签,和命令的使用方法类似。注意最外层括号需要书写花括号(
{}
)以及内部的引号需要使用转义符(\
)标记。
- tag:添加nbt标签,和命令的使用方法类似。注意最外层括号需要书写花括号(
条件
战利品表使用了诸多判断条件来设置实体的掉落,随机池或者函数。下面是条件的列表,以及使用它们所用到的标签。标签都位于 condition下方。
- entity_properties -决定了该条件的要求。
- entity:决定了被要求满足条件的实体。设置成
this
用于检测死亡的实体,killer
检测杀死该实体的实体,killer_player
检测杀死该实体的玩家。 - properties:必须满足的条件。
- on_fire:实体必须/不能是着火的。
- entity:决定了被要求满足条件的实体。设置成
- entity_scores - 检测实体的分数。
- entity:决定了被要求满足条件的实体。设置成
this
用于检测死亡的实体,killer
检测杀死该实体的实体,killer_player
检测杀死该实体的玩家。 - scores:检测的分数。
- 一个记分项:实体对应的记分项的值必须为一个指定的值。记分项名称为该标签的名称,指定的值为该标签的值。
- 一个记分项:实体对应的记分项的值必须在该范围内。
- min:分数的最小值。
- max:分数的最大值。
- entity:决定了被要求满足条件的实体。设置成
- killed_by_player - 要求实体需要由玩家杀死。
- inverse:只有实体不被玩家杀死时候才会掉落。
- random_chance - 随机生成一个0.0-1.0的数值,并检测是否小于此数值,如果随机数小于指定数值则成功。
- chance:成功几率(0.0-1.0以内的数值)
- random_chance_with_looting - 随机生成一个0.0-1.0的数值,并检测是否小于此数值,如果随机数小于指定数值则成功。(会被抢夺附魔的影响)
- chance:基础成功几率(0.0-1.0以内的数值)
- looting_multiplier:每级抢夺附魔对基础几率的影响。公式是
chance + looting_level * looting_multiplier
战利品表
以下这些是默认存在的战利品表。可以在存档里加入更多的表。
- loot_tables
- chests - 资源箱子里的物品。
- abandoned_mineshaft - 废弃矿井中找到的运输矿车。
- buried_treasure - 埋藏的宝藏。
- desert_pyramid - 沙漠神殿的宝藏室里的箱子。
- end_city_treasure - 末地城里的箱子。
- igloo_chest - 雪屋地下室里的箱子。
- jungle_temple - 丛林神庙里的箱子。
- jungle_temple_dispenser - 丛林神庙的发射器
- nether_bridge - 下界要塞里的箱子。
- pillager_outpost - 掠夺者前哨站的箱子。将于1.14加入。
- shipwreck_map - 沉船的地图箱。
- shipwreck_supply - 沉船的补给箱。
- shipwreck_treasure - 沉船的宝箱。
- simple_dungeon - 地牢里的箱子。
- spawn_bonus_chest - 如果打开奖励箱选项的话,新世界生成时的奖励箱。
- stronghold_corridor - 要塞台阶祭坛里的箱子。
- stronghold_crossing - 要塞储存室里的箱子。
- stronghold_library - 要塞图书馆里的箱子。
- underwater_ruin_big - 水下遗迹的大型建筑物的箱子。
- underwater_ruin_small - 水下遗迹的小型建筑物箱的子。
- village_blacksmith - 村庄中的铁匠铺里的箱子。将于1.14移除。
- woodland_mansion - 林地府邸的箱子。
- village - 1.14中新村庄建筑物中的箱子。
- village_cartographer
- village_desert_house
- village_plains_house
- village_savanna_house
- village_snowy_house
- village_taiga_house
- village_tannery
- village_weaponsmith
- entities - 实体掉落的物品。应用在箱子上会出现漏洞,可能导致部分堆叠为0。
- sheep
- black
- blue
- brown
- cyan
- gray
- green
- light_blue
- lime
- magenta
- orange
- pink
- purple
- red
- silver
- white
- yellow
- bat
- blaze
- cat
- cat_morning_gift
- cave_spider
- chicken
- cow
- creeper
- elder_guardian
- enderman
- endermite
- ghast
- giant
- guardian
- horse
- magma_cube
- mushroom_cow
- ocelot
- pig
- rabbit
- sheep - 没毛的羊
- shulker
- silverfish
- skeleton
- skeleton_horse
- slime
- snowman - 雪傀儡
- spider
- squid
- wolf
- zombie
- zombie_horse
- zombie_pigman
- sheep
- gameplay
- fishing
- fish
- junk
- treasure
- fishing - 读取“fishing”文件夹里的一个json,通过幸运决定
- fishing
- empty - 不包含任何物品
- chests - 资源箱子里的物品。
自定义地图
自定义地图可以使用数据包修改战利品表。它们可以是预设的战利品表或者是玩家新增的。以下是其文件结构:
- <地图存档文件夹>
- datapacks
- 数据包名称
- data
- 命名空间
- loot_tables
- 战利品表(.json)
- loot_tables
- 命名空间
- data
- 数据包名称
- datapacks
命名空间名字可以为minecraft或者是自定义的名字。如果该文件夹的名字为minecraft,minecraft就会用里面的文件来取代游戏主文件的loot_tables里的特定战利品表(存档/datapacks/数据包名称/data/minecraft/loot_tables
路径等于游戏主文件里的/data/minecraft/loot_tables/
,同路径和名字的战利品表会取代.jar里相对的文件)比如存档里的datapacks/数据包名称/data/minecraft/loot_tables/entities/zombie.json就会被认作预设的僵尸战利品表,地图中所有僵尸都会根据该表掉落。而存档里的datapacks/数据包名称/data/命名空间/loot_tables/除minecraft以外的命名空间/zombie.json或者是datapacks/数据包名称/minecraft/loot_tables/zombie.json也不会替换掉预设的战利品表,而是需要用NBT标签来指定实体使用此自定义的战利品表。
在LootTable/DeathLootTable/战利品表的name标签里,那个路径是如此填写的:命名空间:战利品表
比如testing:testing1
就是指定存档/datapacks/数据包名称/data/testing/loot_tables/testing里的testing1.json。而testing:test/testing2
就是指定存档/datapacks/数据包名称/data/testing/loot_tables/test/里的testing2.json。命名空间如果是指定minecraft预设的战利品表,则无需填写,比如entities/zombie
就是指定预设(或者是存档/datapacks/数据包名称/data/minecraft/loot_tables/entities里)的zombie.json。
历史
Java版 | |||||
---|---|---|---|---|---|
1.9 | 2015年10月19日 | Dinnerbone宣布了制作战利品表。 | |||
15w43a | 加入战利品表。 | ||||
15w43b | 增加条件entity_scores。 | ||||
15w43c | 重命名“villager_golem.json”为“iron_golem.json” | ||||
增加了钓鱼、无毛羊、僵尸马和骷髅马的战利品表。 | |||||
重命名 item为 name,重命名 items为 entries | |||||
增加了 type并支持读取一个战利品表以代替物品。 | |||||
增加了 luck | |||||
增加了函数set_damage | |||||
15w44a | 增加了函数enchant_randomly及set_attributes。 |
漏洞
Template:Issue list
组件 |
| ||
---|---|---|---|
数据包 | |||
教程 |