MC Toolkit

指南 / 命令与数据

自定义配方:有序、无序,以及用标签代替逐一列出每种木材

一个无法合成的有序配方,通常是 key 写错了。以下是 JSON 写法、游戏会自动从 pattern 中裁掉的内容、能把十三个配方合并成一个的标签技巧,以及测试方法,配方图案里空白行和列会被自动裁掉,但每行字符长度必须一致,否则配方无效。

配方是数据包文件里最容易写的之一,也是最容易出细微错误的之一,因为坏掉的配方会静默失败——合成格子里什么都不会发生。

有序配方

{
  "type": "minecraft:crafting_shaped",
  "pattern": [ "SSS", "S S", "SSS" ],
  "key": { "S": "minecraft:stone" },
  "result": { "id": "minecraft:furnace", "count": 1 }
}

导致大多数失败的三条规则:

  • pattern 中的每个字符都必须存在于 key 中,空格除外,空格表示留空。
  • pattern 是相对的,不是绝对的。 游戏会裁掉边缘的空行和空列,所以一个 2×2 的配方用空格补成 3×3,在合成格里任何位置都能合成——不过写成两行两列更清晰。
  • 每行长度必须相同。 ["SS", "S"] 是无效的。

无序配方

{
  "type": "minecraft:crafting_shapeless",
  "ingredients": ["minecraft:stone", "minecraft:coal"],
  "result": { "id": "minecraft:torch", "count": 4 }
}

顺序无关紧要。重复物品必须各列一次——两个煤炭就要写两条。

标签把一整个家族合并成一个配方

不用为十三种木板各写一个配方:

"key": { "P": "#minecraft:planks" }

# 表示物品标签。#minecraft:planks、#minecraft:logs、#minecraft:wool、#minecraft:stone_crafting_materials 等几十个标签已经存在。定义自己的标签只需一个文件:

data/<namespace>/tags/item/my_metals.json
{ "values": ["minecraft:iron_ingot", "minecraft:gold_ingot"] }

注意 tags/item/——单数是 item,复数是 tags。这个不一致是真实存在的。

带组件的产物

"result": {
  "id": "minecraft:diamond_sword",
  "count": 1,
  "components": { "minecraft:custom_name": "Excalibur", "minecraft:enchantments": { "sharpness": 5 } }
}

这就是不用模组也能让自定义物品可合成的方法。

其他配方类型

crafting_shaped 和 crafting_shapeless 只是众多类型中的两个。还可用的有:smelting、blasting、smoking、campfire_cooking、stonecutting、smithing_transform 和 smithing_trim。烹饪类需要 cookingtime 和 experience;切石需要一个原料和一个数量。

测试

/reload 然后试试合成格子。如果什么都没发生:

  1. 在 /reload 之后检查游戏日志(latest.log)——格式错误的 JSON 会报在那里,而不是聊天栏。
  2. /recipe give @s <namespace>:<recipe>——如果配方 id 写错了,这条命令会报错,说明文件根本没被读取。
  3. 配方解锁和配方存在是两回事。即使一个配方从未出现在配方书中,它也能在合成格里正常工作。

用 数据包 JSON 构建器 来构建配方、谓词和套件 JSON,并检查其中的 key 和标签。

数据包 JSON 生成器 →

更多指南

查看全部 →