自定义合成配方:定型、不定型,以及使用标签而非列出所有木材
一个无法合成的定型配方通常是键错误或图案填充不当。本文介绍了 JSON 格式、将八个配方合并为一个的标签技巧,以及如何测试。
配方是数据包中最容易编写的文件之一,也最容易出现细微错误,因为一个损坏的配方会静默失败——合成格中什么也不会发生。
定型配方 (Shaped)
{
"type": "minecraft:crafting_shaped",
"pattern": [ "SSS", "S S", "SSS" ],
"key": { "S": "minecraft:stone" },
"result": { "id": "minecraft:furnace", "count": 1 }
}
导致大多数失败的三个规则:
pattern中的每个字符都必须存在于key中,除了空格,空格表示空。- 图案是相对的,而不是绝对的。 一个 2×2 的配方应该写成两行两列,而不是用空格填充成 3×3。填充会导致它只能在合成格的特定角落合成。
- 所有行的长度必须相同。
["SS", "S"]是无效的。
不定型配方 (Shapeless)
{
"type": "minecraft:crafting_shapeless",
"ingredients": ["minecraft:stone", "minecraft:coal"],
"result": { "id": "minecraft:torch", "count": 4 }
}
顺序无关紧要。重复的物品必须分别列出——两块煤炭意味着两个条目。
标签将一个系列合并为一个配方
无需为八种木板类型编写八个配方:
"key": { "P": "#minecraft:planks" }
# 标记了一个物品标签 (item tag)。#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;切石 (stonecutting) 需要一个单独的材料和数量。
测试
/reload 然后尝试合成格。如果什么也没发生:
- 重新加载时检查聊天——格式错误的 JSON 会在那里报告。
/recipe give @s <namespace>:<recipe>——如果配方 ID 错误,这会报错,表明文件根本没有被读取。- 配方解锁与配方存在是分开的。即使配方从未出现在合成书 (recipe book) 中,它也能在合成格中工作。
使用 Datapack JSON Builders 中检查的键和标签构建配方、判断条件 (predicate) 和工具包 (kit) JSON。