附加包教程: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
总结
好了,现在,你应该会如何添加一个配方了。下期,我们就要学习如何添加函数了。
第一期 第二期 第三期 绿锦嗷 发表于 2023-8-17 14:00
up,我的锻造台修改了,但是用的是自定义物品,为什么放不上去
目前,官方对锻造台的配方有限制。在锻造转化配方中,仅有下界合金锭可以作为升级材料,仅有原版装备可以被升级。在盔甲纹饰配方中可以通过给自定义物品添加标签,来让自定义物品参与合成。如果一个自定义盔甲参与纹饰合成,那么材料会被消耗,但成品没有纹饰。 up,我的锻造台修改了,但是用的是自定义物品,为什么放不上去 兄弟(划)师傅,您好。 一只歼25 发表于 2023-2-1 00:39
请问物品ID是填原版某个物品的ID吗
是的,如果附加包向游戏添加了物品也可以使用附加包定义的物品ID 补充一下、使用无序合成可以实现在多个输出物品中选择一个输出、不过就是用了一种取巧的办法。
就是使用叫"stonecutter"(切石机)的tag。
实现的时候、可以把原材料合成出一个中间物品、再把这个中间物品放到切石机里选择性地输出其他物品。 请问物品ID是填原版某个物品的ID吗 好教程
不过如果配上游戏内图片就更好了
页: [1]