战利品表

即掉落物表,用于定义方块或实体被挖掘后或被击杀后的掉落物)
战利品表文件放置在行为包根目录下的loot_tables文件夹内。在你制作时,也可以不一锭要放在该目录内,只要处于行为包根目录里即可。
因为战利品表与交易列表的性质差不多,都不同于实体生成、特征、渲染控制器等,这些要么是与主体互相绑定,或者单一绑定主体。但交易列表是在实体行为的组件中绑定的,且绑定方式不是用ID,而是用文件路径方式,因此只要放置在行为包内就行。

制作

掉落物表内有多个随机池(pools),随机池内可有多个项目(entries),游戏会从每一个随机池内随机抽一个项目

格式

pools:(数组)随机池们。游戏会从每一个随机池中逐个抽取物品。

  • (对象)一个随机池
    • conditions:(数组)可选。使用该随机池所需满足的条件列表。
      • (对象)一个条件(有关条件的具体内容见下方介绍)
    • tiers:(对象)可选。如果指定,将会忽略掉下方的rolls以及各项中的weight和quality,把entries中的每一项看作一个层级。entries中的第一个对象为第一层,第二个对象为第二层,以此类推。这几行的地方可能讲不明白,如果看不懂下面这三个参数的描述的话,下面有例子。
      • initial_range:(数字)初始的选取范围。游戏将会默认从第 1 层一直到这一参数中指定的层中随机抽取一项。例如,把该参数设置为2,则游戏会默认从entries中的第 1 项和第 2 项中随机抽取一个选择。由于设置了tiers后会忽略掉weight和quality,每一项被选中的几率都是 50%。
      • bonus_chance:(数字)将被选取的层级数再加上定义在bonus_rolls中的奖励的层数的几率。取值应在 [0.0, 1.0] 中。
      • bonus_rolls:(数字)奖励层数。必须大于等于1。当游戏根据initial_range定义的范围从entries中选取一层以后,有一定几率(该几率定义在bonus_chance中)把已经选取的层数再加上这个数字。
    • rolls:(整数)可选。从该随机池中抽取物品的次数。* entries:(数组)可以从该随机池中抽取的所有项。如果指定了rolls,游戏会从这些项中随机抽取一个;如果指定了tiers,则会按照层级的特性随机抽取一个
      • (对象)一项
        • type:(字符串)该项的类型,用于决定下面name参数的解析方式。item表示是个物品,loot_table表示是另一个战利品表,empty表示什么都没有。
        • name:(字符串)名字。会根据上面type的值来解析。例如type为item,则会将此字段按照物品名解析。
        • weight:(整数)该项的权重。从随机池中抽到该项的几率为weight / (该随机池中所有满足条件的事物的 weight 的和)。
        • quality:(整数)可选。根据玩家的幸运等级影响该weight。计算公式为,floor(weight + (quality * )),其中floor为向下取整。
        • pools:(数组)可选。该项的子随机池。在抽出该项后,游戏会从该项的这个子随机池中继续抽取物品。
          • (对象)一个随机池。格式和根对象中随机池的格式完全一致。
        • conditions:(数组)可选。抽出该项所需满足的条件列表。
        • (对象)一个条件(有关条件的具体内容见下方介绍)
        • functions:(函数)可选。抽出该项时对此项执行的战利品表函数(请与命令的函数做区分)。
          • (对象)一个函数
            • function:(字符串)该函数的名称(有关函数的具体内容见下方介绍)。
            • conditions:(数组)执行该函数所需满足的条件列表。
              • (对象)一个条件(有关条件的具体内容见下方介绍)

示例:

{
    "pools": [
        {
            // 第一个随机池。
            "rolls": 1, // 指定了 rolls,因此会从下面的 entries 中随机抽取一项。
            "entries": [
                {
                    // 第一个随机池里的第一项。
                    "type": "item", // 是个物品。
                    "name": "minecraft:rotten_flesh", // 物品 ID 是腐肉的。
                    "weight": 1, // 权重是 1。这个是几其实无所谓,因为这个随机池里面只有这一项,肯定会抽中这一项的。
                    "functions": [
                        {
                            // 对这个腐肉执行的第一个函数。
                            "function": "set_count", // 这个函数的作用是设置物品数量。详细函数列表可以看下面。
                            "count": { // 数量随机设置为 0-2 中的一个。如果设置为 0,表明不会掉落。
                                "min": 0,
                                "max": 2
                            }
                        },
                        {
                            // 对这个腐肉执行的第二个函数。
                            // 这个函数的作用是,玩家的武器每有一级抢夺附魔,就多掉落 0-1 个物品。
                            "function": "looting_enchant", 
                            "count": {
                                "min": 0,
                                "max": 1
                            }
                        }
                    ]
                }
            ]
        },
        {
            // 第二个随机池
            "conditions": [
                // 这个随机池设定了条件。只有以下条件全部满足时,才会从这个随机池中抽取物品。
                {
                    // 条件 1:僵尸是被玩家杀死的。
                    "condition": "killed_by_player"
                },
                {
                    // 条件 2:有 2.5% 的概率达成。玩家的武器每有一级抢夺附魔,就加 1% 的概率。
                    "condition": "random_chance_with_looting",
                    "chance": 0.025,
                    "looting_multiplier": 0.01
                }
            ],
            "rolls": 1,
            "entries": [
                // 当上述两个条件全部满足后,从这三项里随机抽取一个掉落。
                // 这三项的权重 weight 都是 1,因此这三个掉落的概率相等。
                // 这三项结构很简单,就不写注释了。
                {
                    "type": "item",
                    "name": "minecraft:iron_ingot",
                    "weight": 1
                },
                {
                    "type": "item",
                    "name": "minecraft:carrot",
                    "weight": 1
                },
                {
                    "type": "item",
                    "name": "minecraft:potato",
                    "weight": 1
                }
            ]
        }
    ]
}

Tiers

先举例:

{
    "pools": [
        {
            "tiers": {
                "initial_range": 2,  //选取范围为2
                "bonus_rolls": 1,
  //奖励层数
                "bonus_chance": 0.20  //几率
            },
            "entries": [
                {
                    "type": "item",
                    "name": "minecraft:rotten_flesh"
                },
                {
                    "type": "item",
                    "name": "minecraft:carrot"
                },
                {
                    "type": "item",
                    "name": "minecraft:iron_ingot"
                }
            ]
        }
    ]
}

共有三个层级,第一层minecraft:rotten_flesh:直到第三层minecraft:iron_irgot
游戏首先会先从entries中抽取initial_range定义的层数,这里则是从
minecraft:rotten_flesh与minecraft:carrot中选取。
接着,会有bonus_chance定义的几率增加bonus_rolls定义的层数,也就是会有20%几率增加一层,20%几率抽中minecraft:iron_ingot


对于entriestype类型不仅可为item物品还可以是loot_table战利品表,也就是执行另一个战利品表文件,值为文件路径(带文件后缀名.json)。
就比如:

{
    "tiers": {
        "initial_range": 2,
        "bonus_rolls": 3,
        "bonus_chance": 0.095
    },
    "entries": [
        {
            "type": "loot_table",
            "name": "loot_tables/entities/armor_set_leather.json"
        },
        {
            "type": "loot_table",
            "name": "loot_tables/entities/armor_set_gold.json"
        },
        {
            "type": "loot_table",
            "name": "loot_tables/entities/armor_set_chain.json"
        },
        {
            "type": "loot_table",
            "name": "loot_tables/entities/armor_set_iron.json"
        },
        {
            "type": "loot_table",
            "name": "loot_tables/entities/armor_set_diamond.json"
        }
    ]
}

不要问我要是执行该文件本身会咋样,没试过不知道不敢想没兴趣,实践出真知。

绑定

打开某个方块或实体的行为文件
在组件或组件组内新增“minecraft:loot”组件

函数

战利品表中的函数可以不一定要用“minecraft”的命名空间,不用也不会出大事,看你爱好。

*请前往>API文档>其它文档>战利品表 查看

条件

*请前往>API文档>其它文档>战利品表 查看