本文以示例作为例子详解。
标准表达
物品
{
"item": "minecraft:diamond",物品注册名
"count": 1,数量(可以超越堆叠上限)
"data": 0, 元数据(如果物品拥有元数据则必须要提供,也可以当作damage使用)
"nbt": "{haha:true}", nbt,
"enchantment": [
由于mc1.12.2附魔在nbt中使用数字id,因此此处使用单独的方法额外添加附魔。可不写,使用nbt直接编辑效果等同
{
"name": "minecraft:fire_protection",
"level": 12
level也可以写作范围
"level":{
"type":"minecraft:price",
"min": 12,
"max":12
}
}
]
}
范围
原版限制物品数量不得超过255,否则取余
例如514=256+256+2=2
均匀取值
{
"type":"minecraft:price",如果没有type字段,则默认type为"minecraft:price"。
"min": 1,最小值
"max": 2最大值
}
常数
{
"type":"cvh:constant",
"constant":1常数
}
柏松分布
{
"type":"cvh:poisson_distribution",
"min": 1,最小值
"max": 22,最大值
"lambda":5平均值
柏松分布,但是取值在[min,max)内。
取值不要太大,因为乘阶。
}
欧皇也开不出太逆天的交易(x
村民职业
主职业
职业的主要类别。
0_profession.json
{
"type": "minecraft:profession", 主要类型,声明这是一个主职业json
"professionName": "cvr:example",主职业注册名,重复会导致崩溃
"villageTexture": "null:null.png",村民的贴图
"zombieTexture": "null:null.png"僵尸村民的贴图
}
副职业
具体的职业,交易的实际作用者。
1_cancer.json
{
"type": "minecraft:cancer",主要类型,声明这是一个副职业json
"career": "career",职业名,单字符串,可以重复,关乎村民交易界面标题翻译键
"profession": "cvr:example"主职业
}
交易
物品换绿宝石
2_emerald_for_items.json
{
"type": "minecraft:emerald_for_items",主要类型,声明这是一个绿宝石换物品交易json
"profession":"cvr:example",绑定的主职业
"career": "career",绑定的副职业
"level": 1,这个交易的解锁等级,最低为1,可不填写,默认为1
"trade":{交易的主要内容,其余交易的上面部分等同,差别在trade内部
1.0.2之前minecraft:emerald_for_items有Bug,to和from的实际内容反了。
在1.0.2之后这个bug被修复,可以任意填,会自动分析
下方是反填的示例
实际上,这里并不存在to和from,因为村民始终提供一个绿宝石
"from": {玩家需要提供的(但在物品换绿宝石中是村民提供的)
"price": {物品的数量,在两个中间随机取值(这是一个本mod标准范围表达)
"min": 1,
"max": 2
}
},
"to": {村民提供的(但在物品换绿宝石中是玩家提供的)
"item": {物品(这是一个本mod标准物品表达)
"item": "minecraft:diamond",物品注册名
"count": 1,数量(可以超越堆叠)
"data": 0, 元数据(如果物品拥有元数据则必须要提供,也可以当作damage使用)
"nbt": "{haha:true}", nbt,
"enchantment": [由于mc1.12.2附魔在nbt中使用数字id,因此此处使用单独的方法额外添加附魔。可不写,使用nbt直接编辑效果等同
{
"name": "minecraft:fire_protection",
"level": 12
}
]
}
}
}
}
物品和绿宝石换物品
3_item_and_emerald_to_item.json
{
"type": "minecraft:item_and_emerald_to_item",
"profession":"cvr:example",
"career": "career",
"level": 1,
"level": 1,
"trade":{
"from": {
"price": {绿宝石的数量
"min": 1,
"max": 2
},
"count": {物品的数量,覆盖物品count
"min": 1,
"max": 2
},
"item": {物品
"item": "minecraft:dirt",
"count": 1,
"data": 0,
"nbt": "{haha:true}",
"enchantment": [
{
"name": "minecraft:fire_protection",
"level": 12
}
]
}
},
"to": {
"count":{物品数量
"min": 3,
"max": 4
},
"item": {物品
"item": "minecraft:iron_sword",
"count": 1,
"data": 0,
"nbt": "{haha:true}",
"enchantment": [
{
"name": "minecraft:fire_protection",
"level": 5
}
]
}
}
}
}
绿宝石换物品
4_list_item_for_emeralds.json
{
"type": "minecraft:list_item_for_emeralds",
"profession":"cvr:example",
"career": "career",
"level": 1,
"trade":{
"from": {
价格:如果这里取负数,则表达一个绿宝石能够购买的物品数量。
非标准范围表达(1.1.3移除)
"minPrice": 1,所需绿宝石的最小数量
"maxPrice": 2所需绿宝石的最大数量
1.1.3新增:
"price":{标准范围
"type":"minecraft:price",
"min": 1,
"max": 2
}
},
"to": {
"item": {物品标准表达式(mod)
"item": "minecraft:apple",
"count": 10,
"data": 0,
"nbt": "{haha:true}",
"enchantment": [
{
"name": "minecraft:fire_protection",
"level": 114
}
]
}
}
}
}
物品格
5_cvh_slots.json
{
"type": "cvh:slots",
"profession":"cvr:example",
"career": "career",
"level": 1,
"trade":{
"from": {
"slot1": {
"price": {
"type":"cvh:poisson_distribution",
"min": 1,
"max": 22,
"lambda":5
},
"item": {
"item": "minecraft:dirt",
"count": 1,
"data": 0,
"nbt": "{haha:true}",
"enchantment": [
{
"name": "minecraft:fire_protection",
"level": {
"type":"cvh:poisson_distribution",
"min": 1,
"max": 22,
"lambda":5
}
}
]
}
},
"slot2": {
"price": {
"type":"cvh:poisson_distribution",
"min": 1,
"max": 22,
"lambda":5
},
"item": {
"item": "minecraft:diamond",
"count": 1,
"data": 0,
"nbt": "{haha:false}",
"enchantment": [
{
"name": "minecraft:fire_protection",
"level": {
"type":"cvh:poisson_distribution",
"min": 3,
"max": 5,
"lambda":4
}
}
]
}
}
},
"to": {
"slot3": {
"price":{
"type":"cvh:constant",
"constant":32
},
"item":{
"item": "minecraft:apple",
"count": 10,
"data": 0,
"nbt": "{haha:true}",
"enchantment": [
{
"name": "minecraft:fire_protection",
"level": {
"type":"cvh:constant",
"constant":32
}
}
]
}
}
}
}
}