战利品表
即掉落物表,用于定义方块或实体被挖掘后或被击杀后的掉落物)
战利品表文件放置在行为包根目录下的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:(数组)执行该函数所需满足的条件列表。
- (对象)一个条件(有关条件的具体内容见下方介绍)
- (对象)一个函数
- (对象)一项
- 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
。
对于entries,type
类型不仅可为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文档>其它文档>战利品表 查看