一个谁都拿不到的物品可没什么意思。在这篇指南中,你将为前几篇指南中的红宝石物品添加三个配方:红宝石剑的有序配方、红宝石苹果的无序配方,以及把粗红宝石烧炼成红宝石的熔炉配方。你还会了解配方书如何解锁配方,以及 tags 和 priority 的作用。
快捷方式:GodCraft
GodCraft 有工作台、熔炉、锻造台和酿造配方对象,并配有真实的合成网格。你只需点选物品放进格子里,不用手打图案。
- 打开工坊,在你的附加包中添加一个工作台或熔炉配方。
- 用你自己的物品或原版物品填满网格。
- 选择产物以及产出数量。
- 点击导出。配方文件会自动为你写好。
本页其余部分展示这些文件是什么样子的。
手动制作
配方放在行为包中一个叫 recipes 的文件夹里。每个配方是一个 JSON 文件,文件名对游戏来说无关紧要。我们使用命名空间 myname。请在所有地方把它换成你自己的。
每个配方都有相同的基本结构:
- 一个类型:
minecraft:recipe_shaped、minecraft:recipe_shapeless或minecraft:recipe_furnace - 一个
description.identifier:配方(而不是物品)的唯一 ID tags:哪些工作站可以使用它unlock:它何时出现在配方书中- 原料和产物
有序配方
有序配方在意每个物品放在网格中的位置,比如剑必须摆成一条竖线。
{
"format_version": "1.20.10",
"minecraft:recipe_shaped": {
"description": {
"identifier": "myname:ruby_sword"
},
"tags": ["crafting_table"],
"pattern": [
"R",
"R",
"S"
],
"key": {
"R": {
"item": "myname:ruby"
},
"S": {
"item": "minecraft:stick"
}
},
"unlock": [
{
"item": "myname:ruby"
}
],
"result": {
"item": "myname:ruby_sword"
}
}
}图案的工作方式:
pattern画出网格。每个字符串是一行,每个字符是一个格子。最多 3 行,每行最多 3 个字符。- 空格表示“这个格子留空”。比如镐,你会写成
"RRR"、" S "、" S "。 key说明每个字符代表什么。字母由你来选,挑好记的就行。result是你得到的东西。加上"count": 4就能一次得到多个。
图案不必填满整个 3x3。上面的剑宽 1 格、高 3 格,所以玩家可以在网格的任意一列中合成它。图案的镜像版本默认也能用。
无序配方
无序配方只在意网格里放了什么,不在意放在哪儿。很适合把东西混合在一起。
{
"format_version": "1.20.10",
"minecraft:recipe_shapeless": {
"description": {
"identifier": "myname:ruby_apple"
},
"tags": ["crafting_table"],
"ingredients": [
{
"item": "minecraft:apple"
},
{
"item": "myname:ruby",
"count": 2
}
],
"unlock": [
{
"item": "minecraft:apple"
}
],
"result": {
"item": "myname:ruby_apple"
}
}
}ingredients 中的每一项是一种物品。当你需要多个相同物品时,加上 "count":这里玩家只要在网格中任意位置放一个苹果和两颗红宝石就行。一个无序配方总共最多可以使用 9 个物品。
熔炉配方
熔炉配方用高温把一种物品变成另一种。它是所有配方里最简单的:
{
"format_version": "1.20.10",
"minecraft:recipe_furnace": {
"description": {
"identifier": "myname:smelt_raw_ruby"
},
"tags": ["furnace", "blast_furnace"],
"input": "myname:raw_ruby",
"output": "myname:ruby",
"unlock": [
{
"item": "myname:raw_ruby"
}
]
}
}input 放进上方的格子,output 是烧出来的东西。按照你的第一个自定义物品中制作红宝石的方法做一个 myname:raw_ruby,或者先用一个原版物品来测试。
tags 字段:用哪个工作站?
tags 列出所有接受该配方的工作站。一个配方可以同时属于多个工作站。
| 标签 | 工作站 |
|---|---|
crafting_table | 工作台(如果图案放得下,也可以用物品栏里的 2x2 网格) |
stonecutter | 切石机 |
furnace | 熔炉 |
blast_furnace | 高炉(原版用它烧炼矿石和金属) |
smoker | 烟熏炉(原版用它烹饪食物) |
campfire、soul_campfire | 营火(食物) |
所以,烹饪食物的配方应该列出 "furnace", "smoker", "campfire", "soul_campfire",就像原版的生牛肉一样。
用物品标签作为原料
键或原料可以不指定某个具体物品,而是用 tag 接受一整组物品:
"P": {
"tag": "minecraft:planks"
}现在任何种类的木板都能放进这个格子。原版就是用这种方法让你可以用橡木、白桦木或其他任何木头来合成工作台的。其他好用的原版标签还有 minecraft:logs 和 minecraft:wooden_slabs。
unlock 字段:配方书
unlock 决定配方何时出现在玩家的配方书中。没有它的话,玩家只能去猜你的配方。
- 物品列表:玩家捡起其中任意一个物品后,配方就会解锁。这里也可以用
"tag",比如{ "tag": "minecraft:planks" }。 - 情境:在特殊情况下解锁,写成一个对象而不是列表:
"unlock": {
"context": "AlwaysUnlocked"
}原版使用的其他情境还有 PlayerInWater 和 PlayerHasManyItems。对大多数自定义配方来说,在获得主要原料时解锁是最友好的选择。
小贴士
用玩家最先拿到的原料来解锁。对于剑来说就是红宝石,这样玩家一找到第一颗红宝石,配方就会弹出来。
优先级:两个配方冲突时
如果两个配方的原料和形状完全相同,游戏就必须从中选一个。"priority" 字段(一个整数,放在 tags 旁边)用来给配方排序。原版会对重叠的配方使用 -1、0、1 和 2 这样的小数字,比如接受任意木台阶的木桶配方,和只接受单一种类台阶的木桶配方。
不过,按优先级排序只是最后的手段。最好的办法是避免冲突:查看原版物品,选一个没有其他配方使用的图案,然后测试你的配方是否得到了预期的产物。
测试
- 把包加载到一个世界中(参见导出并安装)。
- 用 /give 给自己原料,比如
/give @s myname:ruby 5。 - 打开配方书。拿到解锁物品后,你的配方应该就会出现。
- 把每个配方都合成一遍,再烧炼一颗粗红宝石。
出问题时
| 你看到的现象 | 最可能的原因 |
|---|---|
| 配方没有任何反应 | 物品 ID 拼写错误,或者 pattern 中的某个字符在 key 中没有定义 |
| 配方书里没有它 | 缺少 unlock 字段,或者玩家从未拿到过解锁物品 |
| 两个配方打架 | 原料和形状相同:修改图案或设置 priority |
| 熔炉不接受这个物品 | tags 列表中没有包含这种熔炉 |
| 两个配方使用了同一个 ID | 每个 description.identifier 都必须是唯一的 |