Cat_Anchor 发表于 2023-1-8 07:41:52

附加包教程:2.配方

本帖最后由 Cat_Anchor 于 2023-8-27 17:07 编辑




前言



上期,我们成功创建了一个没有任何效果的附加包。这一期,我们将学习自定义配方相关内容。



https://klpbbs.com/static/image/hrline/line5.png


准备



在行为包根目录下创建recipes文件夹,打开。
(注:以后提到“打开xxx文件夹”时,如果你没有这个文件夹,那就创建xxx文件夹。)



https://klpbbs.com/static/image/hrline/line2.png


第一个配方



现在就可以开始了,新建一个文件,打开。注意,以后如果不特别说明,新建的文件后缀就都是.json。(关于这个文件的命名以后如果不说,那就都是你的内容的名字。例如你想要沙子合成石头,那就sand_to_stone,差不多就这样。不过这个没什么限制,但只能用英文,而且别太长就行。总之,怎么开心怎么来。)
配方有8种:有序配方、无序配方、烧炼配方、酿造配方、酿造混合配方、材料分解配方、锻造升级配方和锻造纹饰配方。其中,第一和第二种配方是工作台配方;第三种是熔炉(或高炉、烟熏炉、营火、灵魂营火)配方;第四和第五种是酿造台配方;第六种比较特殊,属于教育版独有的内容,创建世界时开启教育版选项即可使用;第七和第八种配方在锻造台上进行,负责盔甲纹饰和升级下界合金装备。
接下来,我会分别讲解这些配方的格式。
有序配方就是有图案、有顺序的配方,例如木板横着放是压力板,竖着放是木棍,这都是有序配方,原料的摆放顺序不能改。代码如下。
{
"format_version": "1.20.10", //代码的格式版本,不同版本可使用的功能不同,见下文unlock部分
"minecraft:recipe_shaped": {
    "description": {
      "identifier": "这里直接写配方英文名,要和文件名匹配"
    },
    "tags": [
      "crafting_table" //定义合成的标签,以后自定义方块时会用到
    ],
    "group": "stained_glass", //定义合成属于的组,目前尚不清楚有什么用途
    "priority": 1, //定义合成的优先级
    "pattern": [
      " A ",
      "ABA",
      " A "
    ], //这里就是模拟工作台的地方,相当于3*3网格。放进去的物品要用代号,只能是一个符号或者字母。空格表示不放东西。可以改变形状,例如2*2,2*3等等。
    //注意格式,可以用MT管理器的“格式化代码”功能检查格式,如果没报错就是正确格式,报错就根据错误提示修改。
    "key": {
      "A": {
      "item": "minecraft:leather", //物品ID
      "data": 0 //这里是物品数据值。
      }, //这里就是说,上面的代号表示什么。这个例子中说的是“A代表皮革”。
      "B": {
      "item": "minecraft:ender_pearl" //也是物品ID,这里是末影珍珠
      }
    },
    "unlock": [ //基岩版1.20.10新增了unlock字段,用于定义配方解锁功能。玩家获得下面列出的物品会解锁配方。此字段仅可在代码格式版本1.20.10及以上时存在,1.20.10以下时不需要此字段。
      {
      "item": "minecraft:slime"
      }
    ],
    "result": {
      "item": "supplementary:primary_stronghold", //这里是输出的物品。
      "count": 1, //这里是输出的数量,写正整数。
      "data": 0 //这里是物品数据值,关于“数据值”,查wiki。
    } //当然,也可以在result后接一个数组,把这个对象放进数组里就可以实现多个输出物品了。
}
}
下面是多个输出的例子。
https://pic.imgdb.cn/item/63ba78d2be43e0d30eca9370.jpg


无序配方与有序配方相反,就是无顺序的配方,例如钻石块分解成钻石,无论放哪个格子,分解出的都是9个钻石,原料的摆放顺序可以改。代码如下。
{
"format_version": "1.20.10",
"minecraft:recipe_shapeless": {
    "description": {
      "identifier": "这里直接写配方英文名,要和文件名匹配"
    },
    "tags": [
      "crafting_table" //合成的标签,以后自定义方块时会用到
    ],
    "ingredients": [
      {
      "item": "minecraft:stone" //物品ID,这里是原料,可以有很多个原料,每个原料的物品ID允许一样,例如合成混凝土粉末时的配方。
      }
    ],
    "unlock": { //有序配方和无序配方都可以拥有unlock字段。除了使用列表表示物品以外,还可以使我对象指定上下文触发。
      "context": "PlayerInWater" //玩家在水里时解锁配方。还可以填写“None”,即永远不会触发配方。还可以填写“AlwaysUnlocked”,即配方本来就不用解锁。
    },
    "result": {
      "item": "minecraft:sand", //这里是输出的物品。
      "count": 1, //这里是输出的数量,写正整数。
      "data": 0 //这里是物品数据值,关于“数据值”,查wiki。
    } //注意,这里目前不支持有很多个输出。
}
}
这个配方在游戏里是这样的。
https://pic.imgdb.cn/item/63ba78c0be43e0d30eca7ad1.jpg


还可以添加切石机配方,其格式与无序配方相同。
{
"format_version": "1.12",
"minecraft:recipe_shapeless": {
    "description": {
    "identifier": "minecraft:stonecutter_brick_slab" //命名空间ID
    },
    "tags": [ "stonecutter" ], //切石机
    "ingredients": [
      {
      "item": "minecraft:brick_block", //输入的物品,只能有一个
      "data": 0 //数据值
      }
    ],
    "result": {
      "item": "minecraft:double_stone_slab", //输出的物品,只能有一种
      "data": 4, //数据值
      "count": 2 //数量
    }
}
}


烧炼配方很简单,只需要定义输入的原料和输出的成品,如粗铁烧铁锭。代码如下。
{
"format_version": "1.12",
"minecraft:recipe_furnace": {
    "description": {
      "identifier": "这里直接写配方英文名,要和文件名匹配"
    },
    "tags": [
      "furnace", //熔炉
      "blast_furnace"//高炉
    ], //这里决定什么炉可以烧,"smoker"是烟熏炉,"campfire"是篝火,"soul_campfire"是灵魂篝火。
    "input": "supplementary:calcite_ore", //输入物品
    "output": "minecraft:calcite" //输出物品
}
}
还可以定义一个腐肉烧皮革的配方:https://pic.imgdb.cn/item/63ba78dcbe43e0d30ecaa085.jpg


酿造台配方比熔炉配方复杂一些,需要定义输入的原料、催化剂(指酿造台上面放的东西)和输出的成品,如药水加红石酿造加长时间的药水。酿造配方的输入、催化剂和输出忽略指定的数量值。如果酿造配方的输入可以堆叠,那么整个堆叠将被消耗。目前有一个问题,输出的物品不会与完全相同的物品堆叠在一起,不管是否指定了数据值。
酿造混合配方不将输入物品的数据值传递给输出物品。除了指定水瓶、药水、喷溅药水和滞留药水的,指定输入物品的数据值会使配方无效。
酿造容器配方将输入物品的数据值传递给输出物品,指定输入和输出的数据值会被忽略。仅允许输入水瓶、药水、喷溅药水和滞留药水。以下是酿造混合配方的代码。
{
"format_version": "1.12",
"minecraft:recipe_brewing_mix": {
    "description": {
      "identifier": "这里直接写配方英文名,要和文件名匹配"
    },
    "tags": [
      "brewing_stand" //酿造台可以酿造,目前没开放接口,只能写这个
    ],
    "input": "minecraft:potion_type:water", //输入的物品ID,这里是水瓶
    "reagent": "supplementary:ender_blaze_powder", //催化剂,例如红石
    "output": "supplementary:haste_potion" //输出的物品ID,一般是药水(当然其他的也可以)
}
}


材料分解配方主要用于教育版里的材料分解器,代码如下。
{
"format_version": "1.14",
"minecraft:recipe_material_reduction": {
    "description": {
      "identifier": "这里直接写配方英文名,要和文件名匹配"
    },
    "input": "minecraft:diamond", //要分解的物品
    "output": [
      {
      "count": 64, //数量
      "item": "minecraft:element_6" //一项输出,写物品ID
      },
      {
      "count": 36, //数量
      "item": "minecraft:element_6" //又一项输出,写物品ID
      }
    ], //这里是输出的物品,总共输出的物品貌似不能超过9项
    "tags": "material_reducer" //材料分解器
}
}


锻造升级配方用于升级下界合金装备。
{
"format_version": "1.12",
"minecraft:recipe_smithing_transform": {
    "description": {
      "identifier": "这里直接写配方英文名,要和文件名匹配"
    },
    "tags": [
      "smithing_table" //锻造台
    ],
    "base": "minecraft:diamond_axe", //要锻造的装备,这里是钻石斧,只能是标记为可升级物品的装备
    "template": "minecraft:netherite_upgrade_smithing_template", //锻造模板,只能是下界合金升级模板
    "addition": "minecraft:netherite_ingot", //锻造材料,只能是下界合金锭
    "result": "minecraft:netherite_axe" //输出的成品,这里是下界合金斧
}
}

锻造纹饰配方用于盔甲纹饰系统。这个配方无需填写输出物品,输出物品被自动指定为有纹饰的盔甲。
{
"format_version": "1.20.10",
"minecraft:recipe_smithing_trim": {
    "description": {
      "identifier": "minecraft:smithing_armor_trim" //命名空间ID
    },
    "tags": [
      "smithing_table" //锻造台
    ],
    "template": {
      "tag": "minecraft:trim_templates" //锻造模板,使用了tag指定所有锻造模板,这里只能是标记为锻造模板的物品
    },
    "base": {
      "tag": "minecraft:trimmable_armors" //可锻造的盔甲,这里只能是标记为可锻造盔甲的物品
    },
    "addition": {
      "tag": "minecraft:trim_materials" //可锻造的矿石锭、水晶等(如金锭、紫水晶碎片等),这里只能是标记为可纹饰的材料的物品
    }
}
}

自从1.19.50以来,就可以使用tag标签作为配方的输入。只需要把原料中的"item": ...替换为"tag": ...后填写一个标签,那么所有拥有这个标签的方块和物品都可以参与合成。可以在这里找到所有原版标签。
示例文件下载:



https://klpbbs.com/static/image/hrline/line1.png


总结



好了,现在,你应该会如何添加一个配方了。下期,我们就要学习如何添加函数了。





第一期 第二期 第三期

Cat_Anchor 发表于 2023-8-17 19:19:58

绿锦嗷 发表于 2023-8-17 14:00
up,我的锻造台修改了,但是用的是自定义物品,为什么放不上去

目前,官方对锻造台的配方有限制。在锻造转化配方中,仅有下界合金锭可以作为升级材料,仅有原版装备可以被升级。在盔甲纹饰配方中可以通过给自定义物品添加标签,来让自定义物品参与合成。如果一个自定义盔甲参与纹饰合成,那么材料会被消耗,但成品没有纹饰。

绿锦嗷 发表于 2023-8-17 14:00:26

up,我的锻造台修改了,但是用的是自定义物品,为什么放不上去

建筑技工张大哥 发表于 2023-7-8 14:31:30

兄弟(划)师傅,您好。

Cat_Anchor 发表于 2023-3-18 17:58:00

一只歼25 发表于 2023-2-1 00:39
请问物品ID是填原版某个物品的ID吗

是的,如果附加包向游戏添加了物品也可以使用附加包定义的物品ID

乄拂晓乄 发表于 2023-2-1 23:44:50

补充一下、使用无序合成可以实现在多个输出物品中选择一个输出、不过就是用了一种取巧的办法。

就是使用叫"stonecutter"(切石机)的tag。

实现的时候、可以把原材料合成出一个中间物品、再把这个中间物品放到切石机里选择性地输出其他物品。

无銘 发表于 2023-2-1 00:39:04

请问物品ID是填原版某个物品的ID吗

YesNewBee 发表于 2023-1-8 08:49:48

好教程
不过如果配上游戏内图片就更好了
页: [1]
查看完整版本: 附加包教程:2.配方