教程:制作附加包/配方

来自Minecraft基岩版开发Wiki
配方
系列教程
所属系列
难度
初级
前置知识
适用版本
国际版
实践设备
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"子组件指定加工物。

< 方块 | 战利品表 >