Tutorial:制作附加包/配方:修订间差异

来自Minecraft基岩版开发Wiki
添加的内容 删除的内容
(LPaicen移动页面Manual:制作附加包/配方Tutorial:制作附加包/配方,不留重定向)
标签移动版编辑 移动版网页编辑 高级移动版编辑
 
(未显示11个用户的26个中间版本)
第6行: 第6行:
| version = 1.16.100.59
| version = 1.16.100.59
| vname = 国际版
| vname = 国际版
| devices = {{OS|win10|ios|android}}
| devices = win
| software = vs code
| recommend = {{OS|win10}}
| software = {{SoftwareSprite|vs code}}
| more = [[配方]];[[工作台]];[[Manual:Minecraft:crafting_table|自定义“工作台”]]
| prevparent = 方块
| prevparent = 方块
| nextparent = 战利品表
| nextparent = 战利品表
| prev = 方块置换
| next = 实体
| next = 模型
}}{{about|自定义配方教程|配方开发信息|配方}}
}}{{about|自定义配方教程|配方开发信息|配方}}


第20行: 第17行:
==概述==
==概述==
配方使游戏元素更加丰富,并为许多内容添加了获取途径。在学习了自定义[[物品]]和[[方块]]后,您已经为游戏添加了一些新元素,现在将尝试学习通过自定义配方来为它们添加获取的途径。
配方使游戏元素更加丰富,并为许多内容添加了获取途径。在学习了自定义[[物品]]和[[方块]]后,您已经为游戏添加了一些新元素,现在将尝试学习通过自定义配方来为它们添加获取的途径。

配方存储在行为包的recipes文件夹中。

==在这之前==
添加自定义配方首先需要了解一下自定义配方 行为部分的基本结构。
自定义配方配置文件的数据结构如下:
<syntaxhighlight lang="json" line>
{
"format_version": "1.12",
"各配方适用组件": {
"description": { },//描述
"tags": [ ],//标签(适用方块)
}
}
</syntaxhighlight>
如上,配方配置文件基本由描述、配方类别、配方输入、配方材料与配方输出五部分内容构成,而配方输入、配方材料和配方输出需要定义各类型配方自有的组件才能被定义。下面对上述基本内容进行了简要阐述:</br>
描述 (description) 对象储存了用于描述该配方的基础信息,其数据结构如下:
<syntaxhighlight lang="json" line>
//...
"description": {
"identifier": "配方的赋命名空间标识符"
},
//...
</syntaxhighlight>
该属性用于在应用于某个世界的所有包中唯一标识配方。配方标识符没有名称空间要求,只要单个包中没有两个相同的配方标识符可以匹配即可。</br>
配方标签(tags)数组储存了用于描述该配方适用于哪种配方功能方块,其内容如下:
<syntaxhighlight lang="json" line>
//...
"tag": [
"crafting_table",//说明该配方可适用于原版工作台
...//可多选
]
//...
</syntaxhighlight>
你已经掌握了配方配置文件基本概念,接下来是各个配方的细微差异


==合成配方==
==合成配方==
===有序配方===
===有序配方===
主条目:[[配方#有序配方|有序配方]]
主条目:[[配方#有序配方|有序配方]]

有序配方定义了一个需要固定合成形状的配方,须使用<code>"minecraft:recipe_shaped"</code>才能被定义。

有序配方特殊的是需要定义形状,因此和其他配方的定义格式不同,在于多了样式数组和各组成部分的定义,以下是详细描述:

样式 (pattern) 数组储存了用于描述该配方的排列样式,其内容中有多组字符串,每组字符串代表合成表中的一行,字符串由1-3个字符组成,每个字符在该配方中代表一个物品。
如果您需要将某一格留空,请使用空格,如果某一列为空,请删除代表本列的空格。
下面是一个配方的样式示例
<syntaxhighlight lang="json" line>
"pattern": [
"XX",
"X#",
" #"
]
</syntaxhighlight>
此配方代表一个类似于原版斧的配方排列方式。
配方材料(key)对象储存了用于描述该配方样式中的字符代表的物品,物品可以通过字符串引用或items对象,字符串引用的内容如下:
<syntaxhighlight lang="json" line>
"字符":"物品的赋命名空间标识符:物品特殊值"//:物品特殊值为可选项,不填则所有特殊值均可
</syntaxhighlight>
items对象的内容如下:
<syntaxhighlight lang="json" line>
"字符": {
"item": "物品赋命名空间标识符"
"data": "物品特殊值,支持Molang,可选项"
"count": "物品数量,可选项"//此处不可用,物品数量仅在items对象作为工作台配方的合成结果时可用。
}
</syntaxhighlight>

下面是原版斧的配方
<syntaxhighlight lang="json" line>
{
"format_version": "1.12",
"minecraft:recipe_shaped": {
"description": {
"identifier": "minecraft:diamond_axe"
},
"tags": [ "crafting_table" ],
"pattern": [
"XX",
"X#",
" #"
],
"key": {
"#": {
"item": "minecraft:stick"
},
"X": {
"item": "minecraft:diamond"
}
},
"result": {
"item": "minecraft:diamond_axe"
}
}
}
</syntaxhighlight>

结果 (result) 对象储存了用于描述该配方的制作结果的物品,物品可以通过字符串引用或items对象,引用方法同上。


===无序配方===
===无序配方===
主条目:[[配方#无序配方|无序配方]]
主条目:[[配方#无序配方|无序配方]]


无序配方与有序配方的基本结构同理,只不过将<code>"minecraft:recipe_shaped"</code>组件替换成<code>"minecraft:recipe_shapeless"</code>组件以实现无序配方。
==烧炼配方==

主条目:[[配方#烧炼配方|烧炼配方]]
以下是原版合成打火石无序配方的json文件:
<syntaxhighlight lang="json" line="">
{
"format_version": "1.12",
"minecraft:recipe_shapeless": {
"description": {
"identifier": "minecraft:flint_and_steel"
},
"tags": [ "crafting_table" ],
//与有序配方不同处
"ingredients": [
{
"item": "minecraft:iron_ingot"
},
{
"item": "minecraft:flint"
}
],
"result": {
"item": "minecraft:flint_and_steel"
}
}
}
</syntaxhighlight>

由此可见,无序配方与有序配方的不同处是将<code>"pattern"</code>和<code>"key"</code>的子组件替换成<code>"ingredients"</code>的子组件。

<code>"ingredients"</code>子组件只需要创建若干个json对象存放<code>"item"</code>组件,输入需要物品的赋命名空间标识符即可。

==熔炉配方==
主条目:[[配方#熔炉配方|熔炉配方]]

熔炉配方同理,也是替换成熔炉配方所适用的<code>"minecraft:recipe_furnace"</code>组件。

下面以原版生鸡肉通过熔炉等烹饪获得熟鸡肉的json文件为例:

<syntaxhighlight lang="json" line>
{
"format_version": "1.12",
"minecraft:recipe_furnace": {
"description": {
"identifier": "minecraft:furnace_chicken"
},
"tags": ["furnace", "smoker", "campfire", "soul_campfire"],
//与其他配方不同处
"input": "minecraft:chicken",//输入
"output": "minecraft:cooked_chicken"//输出
}
}
</syntaxhighlight>

由此可见,熔炉配方仅需添加<code>"input"</code>和<code>"output"</code>组件,再输入需要物品的赋命名空间标识符即可。


==酿造配方==
==酿造配方==
主条目:[[配方#酿造配方|酿造配方]]
主条目:[[配方#酿造配方|酿造配方]]</br>
酿造配方与其他配方类似,不过会依据原版特性细分,具体如下:
===药水容器类型配方===
此为药水改变瓶子类型的配方配置,须添加<code>"minecraft:recipe_brewing_container"</code>组件。
此为原版药水通过火药炼成喷溅型药水的json配置文件:
<syntaxhighlight lang="json" line>
{
"format_version": "1.12",
"minecraft:recipe_brewing_container": {
"description": {
"identifier": "minecraft:brew_potion_sulphur"
},
"tags": [ "brewing_stand" ],
"input": "minecraft:potion",
"reagent": "minecraft:gunpowder",
"output": "minecraft:splash_potion"
}
}
</syntaxhighlight>
===药水效果配方===
此为合成药水效果的配方,须添加<code>"minecraft:recipe_brewing_mix"</code>组件决定该配方。
以下是原版粗制的药水用烈焰粉合成力量药水的json配置文件:
<syntaxhighlight lang="json" line>
{
"format_version": "1.12",
"minecraft:recipe_brewing_mix": {
"description": {
"identifier": "minecraft:brew_awkward_blaze_powder"
},
"tags": [ "brewing_stand" ],
"input": "minecraft:potion_type:awkward",
"reagent": "minecraft:blaze_powder",
"output": "minecraft:potion_type:strength"
}
}
</syntaxhighlight>
由此可见,酿造配方与熔炉配方类似,只不过增加了<code>"reagent"</code>子组件指定加工物。

< [[Manual:制作附加包/方块|方块]] | [[Manual:制作附加包/战利品表|战利品表]] >

2024年3月7日 (四) 12:09的最新版本

配方
系列教程
所属系列
难度
初级
前置知识
适用版本
国际版
实践设备
Windows
所需软件

在阅读本教程前,请先确保自身已有一定的附加包基础。在浏览完本教程之后,你将学会如何自定义配方。

概述[编辑]

配方使游戏元素更加丰富,并为许多内容添加了获取途径。在学习了自定义物品方块后,您已经为游戏添加了一些新元素,现在将尝试学习通过自定义配方来为它们添加获取的途径。

配方存储在行为包的recipes文件夹中。

在这之前[编辑]

添加自定义配方首先需要了解一下自定义配方 行为部分的基本结构。 自定义配方配置文件的数据结构如下:

{
  "format_version": "1.12",
  "各配方适用组件": {
    "description": {  },//描述
    "tags": [ ],//标签(适用方块)
  }
}

如上,配方配置文件基本由描述、配方类别、配方输入、配方材料与配方输出五部分内容构成,而配方输入、配方材料和配方输出需要定义各类型配方自有的组件才能被定义。下面对上述基本内容进行了简要阐述:
描述 (description) 对象储存了用于描述该配方的基础信息,其数据结构如下:

//...
"description": {
  "identifier": "配方的赋命名空间标识符"
},
//...

该属性用于在应用于某个世界的所有包中唯一标识配方。配方标识符没有名称空间要求,只要单个包中没有两个相同的配方标识符可以匹配即可。
配方标签(tags)数组储存了用于描述该配方适用于哪种配方功能方块,其内容如下:

//...
"tag": [
  "crafting_table",//说明该配方可适用于原版工作台
  ...//可多选
]
//...

你已经掌握了配方配置文件基本概念,接下来是各个配方的细微差异

合成配方[编辑]

有序配方[编辑]

主条目:有序配方

有序配方定义了一个需要固定合成形状的配方,须使用"minecraft:recipe_shaped"才能被定义。

有序配方特殊的是需要定义形状,因此和其他配方的定义格式不同,在于多了样式数组和各组成部分的定义,以下是详细描述:

样式 (pattern) 数组储存了用于描述该配方的排列样式,其内容中有多组字符串,每组字符串代表合成表中的一行,字符串由1-3个字符组成,每个字符在该配方中代表一个物品。 如果您需要将某一格留空,请使用空格,如果某一列为空,请删除代表本列的空格。 下面是一个配方的样式示例

    "pattern": [
      "XX",
      "X#",
      " #"
    ]

此配方代表一个类似于原版斧的配方排列方式。 配方材料(key)对象储存了用于描述该配方样式中的字符代表的物品,物品可以通过字符串引用或items对象,字符串引用的内容如下:

"字符":"物品的赋命名空间标识符:物品特殊值"//:物品特殊值为可选项,不填则所有特殊值均可

items对象的内容如下:

      "字符": {
        "item": "物品赋命名空间标识符"
        "data": "物品特殊值,支持Molang,可选项"
        "count": "物品数量,可选项"//此处不可用,物品数量仅在items对象作为工作台配方的合成结果时可用。
      }

下面是原版斧的配方

{
  "format_version": "1.12",
  "minecraft:recipe_shaped": {
    "description": {
    "identifier": "minecraft:diamond_axe"
    },
    "tags": [ "crafting_table" ],
    "pattern": [
      "XX",
      "X#",
      " #"
    ],
    "key": {
      "#": {
        "item": "minecraft:stick"
      },
      "X": {
        "item": "minecraft:diamond"
      }
    },
    "result": {
      "item": "minecraft:diamond_axe"
    }
  }
}

结果 (result) 对象储存了用于描述该配方的制作结果的物品,物品可以通过字符串引用或items对象,引用方法同上。

无序配方[编辑]

主条目:无序配方

无序配方与有序配方的基本结构同理,只不过将"minecraft:recipe_shaped"组件替换成"minecraft:recipe_shapeless"组件以实现无序配方。

以下是原版合成打火石无序配方的json文件:

{
  "format_version": "1.12",
  "minecraft:recipe_shapeless": {
    "description": {
    "identifier": "minecraft:flint_and_steel"
    },
    "tags": [ "crafting_table" ],
    //与有序配方不同处
    "ingredients": [
      {
        "item": "minecraft:iron_ingot"
      },
      {
        "item": "minecraft:flint"
      }
    ],
    "result": {
      "item": "minecraft:flint_and_steel"
    }
  }
}

由此可见,无序配方与有序配方的不同处是将"pattern""key"的子组件替换成"ingredients"的子组件。

"ingredients"子组件只需要创建若干个json对象存放"item"组件,输入需要物品的赋命名空间标识符即可。

熔炉配方[编辑]

主条目:熔炉配方

熔炉配方同理,也是替换成熔炉配方所适用的"minecraft:recipe_furnace"组件。

下面以原版生鸡肉通过熔炉等烹饪获得熟鸡肉的json文件为例:

{
  "format_version": "1.12",
  "minecraft:recipe_furnace": {
    "description": {
    "identifier": "minecraft:furnace_chicken"
    },
    "tags": ["furnace", "smoker", "campfire", "soul_campfire"],
    //与其他配方不同处
    "input": "minecraft:chicken",//输入
    "output": "minecraft:cooked_chicken"//输出
  }
}

由此可见,熔炉配方仅需添加"input""output"组件,再输入需要物品的赋命名空间标识符即可。

酿造配方[编辑]

主条目:酿造配方
酿造配方与其他配方类似,不过会依据原版特性细分,具体如下:

药水容器类型配方[编辑]

此为药水改变瓶子类型的配方配置,须添加"minecraft:recipe_brewing_container"组件。 此为原版药水通过火药炼成喷溅型药水的json配置文件:

{
"format_version": "1.12",
"minecraft:recipe_brewing_container": {
"description": {
  "identifier": "minecraft:brew_potion_sulphur"
  },
  "tags": [ "brewing_stand" ],
  "input": "minecraft:potion",
  "reagent": "minecraft:gunpowder",
  "output": "minecraft:splash_potion"
  }
}

药水效果配方[编辑]

此为合成药水效果的配方,须添加"minecraft:recipe_brewing_mix"组件决定该配方。 以下是原版粗制的药水用烈焰粉合成力量药水的json配置文件:

{
"format_version": "1.12",
"minecraft:recipe_brewing_mix": {
"description": {
  "identifier": "minecraft:brew_awkward_blaze_powder"
  },
  "tags": [ "brewing_stand" ],
  "input": "minecraft:potion_type:awkward",
  "reagent": "minecraft:blaze_powder",
  "output": "minecraft:potion_type:strength"
  }
}

由此可见,酿造配方与熔炉配方类似,只不过增加了"reagent"子组件指定加工物。

< 方块 | 战利品表 >