战利品表

来自Minecraft Wiki
跳转至: 导航搜索
Clock JE3 BE3.gif
此条目需要更新。

条目中某些信息可以参照英文版进行翻译更新。
附加信息:战利品表列表需要更新。

战利品表(Loot table)是一种技术性JSON表,用于决定各个情况下生成什么物品,比如自然生成的容器的内容物破坏方块时的掉落物杀死实体时的掉落物钓鱼时可以钓上的物品猪灵的以物易物。它不会影响经验的掉落和不掉落物品的实体,比如大型史莱姆产生的史莱姆和被虫蚀的方块中的蠹虫

用途[编辑 | 编辑源代码]

战利品表由诸多字符串标签和一个长整型标签组成,这些字符串标签决定了要使用的战利品表,长整型标签决定种子。在相同的种子下生物或者是容器会掉落相同的物品。战利品表不决定容器内容物的排列方式。这种随机完全基于种子。

对于箱子陷阱箱漏斗运输矿车漏斗矿车发射器投掷器潜影盒木桶而言:

    •  LootTable:战利品表用于容器在将来被打开,或者内容物发生其他互动的时候进行物品的装填。若是一个大箱子,则仅带有此标签的一半箱子会受到影响。
    •  LootTableSeed:生成战利品表的种子,类似于生成世界的种子。此项为空或者是0时则使用随机的种子。

一旦容器内容物发生了互动(如打开箱子或破坏箱子等),这些标签会被移除,也只有此时,战利品才会出现在容器中。

生物而言:

  • 根标签。
    •  DeathLootTable:战利品表决定生物死亡时的掉落物品。
    •  DeathLootTableSeed:生成战利品表的种子,类似于生成世界的种子。此项为空或者是0时将使用随机的种子。

生物和容器的战利品表可以用/execute store/data merge修改。玩家还可以使用命令/loot将战利品表的内容给予实体或放进世界。

标签[编辑 | 编辑源代码]

战利品表完全使用标准的JSON格式。下面是用到的具体的内容。

  •  根标签
    •  type: 战利品表的可选种类的命名空间ID值。必须是其中之一(命名空间minecraft:可以省略):minecraft:empty战利品表不生成任何战利品、minecraft:entity实体掉落物、minecraft:block方块掉落物、minecraft:chest宝藏箱战利品、minecraft:fishing钓鱼战利品表、minecraft:advancement_reward进度奖励、minecraft:barter以物易物、minecraft:command用于/execute (if|unless) predicate、、minecraft:selector用于选择器的predicate=minecraft:advancement_entity用于进度谓词的entityminecraft:generic以上皆非。
    •  functions:对将要产生的物品堆应用函数。函数按顺序应用,所以比如looting_enchant函数必须放在set_count函数之后以正常运作。
      • 一个函数。
        •  function:待应用的函数的命名空间ID。具体的函数将在下方列出。
        •  conditions:决定该函数被应用的条件。如果指定了多个条件,所有条件必须全部满足。
          • 一个条件。
            •  condition:这个条件的命名空间ID值(默认命名空间minecraft:可省去)。具体名称将在下方列出。
    •  pools:这个战利品表的随机池(pools)的列表。每个被使用的随机池给予抽奖次数(rolls)从物品列表中生成物品。
      • 一个随机池。
        •  conditions:决定了使用这个随机池的条件。如果指定了多个条件,则必须都满足。
          • 一个条件。
            •  condition:这个条件的命名空间ID值(默认命名空间minecraft:可省去)。具体名称将在下方列出。
        •  functions:对将要产生的物品堆应用函数。函数按顺序应用,所以比如looting_enchant函数必须放在set_count函数之后以正常运作。
          • 一个函数。
            •  function:待应用的函数的命名空间ID。具体的函数将在下方列出。
            •  conditions:决定该函数被应用的条件。如果指定了多个条件,则必须都满足。
              • 一个条件。
                •  condition:这个条件的命名空间ID值(默认命名空间minecraft:可省去)。具体名称将在下方列出。
        •  rolls值提供器,指定在抽奖池中抽奖的次数。
        •  bonus_rolls值提供器,指定每点幸运使得在此随机池中多抽奖的一定范围内的随机的次数。相乘后向下取整。
        •  entries:这个随机池能产生的所有物品的列表。每一次抽奖会随机根据权重选择一个符合条件的被抽出项。
          • 一个被抽出项(entry)。
            •  conditions:决定抽中该项的条件。如果指定了多个条件,则必须都满足。
            •  functions:决定了抽中这个物品时对其执行函数(不是数据包中的函数)。如果没有被设置,它将不会被使用。必须按照顺序排放(会按照顺序执行),比如looting_enchant函数必须放在set_count函数之后以正常运作。
              • 一个函数
                •  function:要执行的函数的命名空间ID值。具体名称将在下方列出。
                •  conditions:决定了执行该函数的条件。具体名称将在下方列出。
            •  type:被抽出项种类的命名空间ID值(其中默认命名空间minecraft:可以省略)。可以是minecraft:item选择物品项、minecraft:tag选择物品标签、minecraft:loot_table从另一个战利品表生成物品、minecraft:group选择子项、minecraft:alternatives从列表中选择一个子项、minecraft:sequence选择子项直到有一个子项无法选择为止、minecraft:dynamic生成方块的特定掉落物、minecraft:empty什么都不生成。
            •  name
              • 如果类别type是minecraft:item,则填写物品的ID。比如minecraft:diamond。默认在没有被functions影响的情况下,其数量为1。
              • 如果type是minecraft:tag,则填写使用的物品标签。比如arrows
              • 如果type是minecraft:loot_table,则填写使用的战利品表。比如minecraft:gameplay/fishing/junk
              • 如果type是minecraft:dynamic,则填写contents指定方块实体的内容物或self指定旗帜或玩家的头颅。
            •  children:
              • 如果type是minecraft:group,则填写用于生成战利品的项列表。可以用于行方便,比如一个条件适用于多个项时。
              • 如果type是minecraft:alternatives,则填写哪个项用于首个的列表,只有首个成功的项可以生成。
              • 如果type是minecraft:sequence,则填写使用的项列表,直到第一个项失败。当一个项失败时,此列表中的项都不再生成。
            •  expand: 如果type是minecraft:tag,并且expand的值设为true,将选择标签中的一个物品,每个物品的权重和质量都相同。如果设为false,将使用标签中的所有物品。当type是minecraft:tag时,此项为必需。
            •  weight:决定了这个物品被选择的权重。这个值越高物品便越容易被选择(概率为这个物品的权重所有考虑的物品权重之和)。
            •  quality:基于杀死/开启箱子/钓鱼的玩家的幸运修改条目的weight。公式为weight + (quality * generic.luck)(向下取整)。如果结果小于0,则取0。

函数[编辑 | 编辑源代码]

主条目:物品修饰器

战利品表使用了多种给物品添加特殊数据的函数,比如堆叠数或者附魔。下方是这些函数的列表以及使用它们用到的标签。这些标签都位于和 function标签所在的相同函数对象(object)下。

位于数据包<namespace>/item_modifiers目录下的文件拥有和这些函数相同的格式结构。

所有的函数请参见物品修饰器

条件[编辑 | 编辑源代码]

主条目:谓词

战利品表使用了诸多判断条件来设置实体的掉落、随机池或者函数的条件。标签都位于 condition标签所在的条件对象(object)。

而且,数据包内的谓词的条件和战利品表的条件有相同结构。

参考谓词以了解所有可能的的条件。

值提供器[编辑 | 编辑源代码]

战利品表在一些地方使用值提供器来接收一个整数或浮点数。它们可以是一个常数,也可以是一个对象。

  • : 常数提供器。
  • : 根标签。
    •  type: 值提供器种类。

 type可能的值和相关的额外内容:

  • constant - 一个常量。
    •  value: 一个确定的数值。
  • uniform - 提供一个位于最大值与最小值之间(包括这两个数)并服从均匀分布的随机数。
    •  min: 一个值提供器。最小值。
    •  max: 一个值提供器。最大值。
  • binomial - 提供一个服从二项分布的随机数。
    •  n: 一个值提供器。尝试次数。
    •  p: 一个值提供器。 每次尝试的成功概率。
  • score - 一个记分板值。
    •  target: 记分板名提供器。必须为this, killer, direct_killer, player_killer之一。
    •  target: 记分板名提供器。
      •  type: 源地址。 需为 fixedcontext
      • 如果 typefixed:
        •  name: 一个UUID或玩家名。
      • 如果 typecontext:
        •  target: 记分板名提供器。 必须为this, killer, direct_killer, player_killer之一。
    •  score: 记分板项目。
    •  scale: 可选的。记分板的值将以乘于该倍率后返回。

战利品表[编辑 | 编辑源代码]

以下这些是默认存在的战利品表。

数据包[编辑 | 编辑源代码]

主条目:数据包

可以使用数据包修改原有的战利品表或者新建一个。以下是其文件结构:

  • 世界保存文件夹
    • datapacks
      • 数据包名称
        • data
          • 自定义命名空间
            • loot_tables
              • 战利品表名称(.json)

如果该文件夹的名字为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/entities/zombie.json或者是datapacks/数据包名称/minecraft/loot_tables/zombie.json不会覆盖掉默认的战利品表,而可以用NBT标签来指定实体使用此自定义的战利品表。

战利品表名称的格式为命名空间ID,比如testing:testing1就是指定存档/datapacks/数据包名称/data/testing/loot_tables/testing里的testing1.json。而testing:test/testing2就是指定存档/datapacks/数据包名称/data/testing/loot_tables/test/里的testing2.json。命名空间如果是minecraft,则可以省略。

历史[编辑 | 编辑源代码]

Java版
1.92015年10月19日Dinnerbone宣布了制作战利品表。
15w43a加入战利品表。
15w43b增加条件entity_scores
15w43c重命名“villager_golem.json”为“iron_golem.json”。
增加了钓鱼、无毛绵羊、僵尸马和骷髅马的战利品表。
重命名 item name,重命名 items entries
增加了 type并支持读取一个战利品表以代替物品。
增加了 luck
增加了函数set_damage
15w44a增加了函数enchant_randomlyset_attributes
15w44b添加了 quality 标签。
移除了 luck luck_multiplier标签。
添加了 bonus_rolls 标签。
15w51a旁观模式下的玩家将不再触发容器使用其战利品表来生成战利品。
1.9.1pre1发射器投掷器现在使用战利品表。
添加了缺省表 chests/jungle_temple_dispenser
1.1116w32a驴、骡、尸壳和僵尸村民现在从它们各自的战利品表中抽取,而不是分别从马和僵尸的战利品表抽取。
16w43a村民,恼鬼和末影龙现在有了它们各自的战利品表。
1.1317w43a自定义战利品表现在移入数据包
1.1418w43a方块的掉落也改为使用战利品表了。
战利品表现在获得了一批新选项。
在箱子和方块的战利品表中将实体设置为"this"时现在指玩家。
18w44a现在为猫,cat_morning_gift,玩家,女巫加入了战利品表。
为新加入的方块加入了战利品表。
18w46a幻术师加入了战利品表。
18w48a村庄加入了更多战利品表,其中有些尚未使用。
移除了战利品表: village_blacksmith
18w49a战利品表 village_savanna_housevillage_snowy_house现在被使用了。
村庄加入了更多战利品表
18w50a战利品表 village_desert_housevillage_taiga_house现在被使用了,这让所有之前未使用的战利品表都被使用了。
1.1519w34a加入了函数copy_state
1.1620w12a加入了fishing_hook子谓词以检查鱼钩的属性。
pre3下界传送门方块加入了战利品表。

漏洞[编辑 | 编辑源代码]

关于“战利品表”的漏洞由漏洞追踪器维护,请在此汇报漏洞。