recipe(单数)→ 命名空间和文件名有没有大写或中文 → 原材料写法与目标版本是否匹配 →/datapack list 里这个包是否已启用。用数据包给自己加一条合成配方。
免费在线数据更新至 26.2
正在加载工具…
数据包的目录结构是固定的,放错一层游戏会静默忽略, 既不加载也不报错 —— 这是自定义配方最难排查的一类问题。
我的数据包/
├── pack.mcmeta
└── data/
└── <命名空间>/
└── recipe/ ← 1.21 起是单数,此前是 recipes/
└── my_sword.json{
"type": "minecraft:crafting_shaped",
"pattern": [
" A ",
" A ",
" B "
],
"key": {
"A": "minecraft:diamond",
"B": "minecraft:stick"
},
"result": { "id": "minecraft:diamond_sword", "count": 1 }
}在 1.21 / 1.21.1 上必须用完整的 {item:…} 写法 —— 裸字符串会让配方加载失败,而且不会有任何提示。
1.21.9 起改用 min_format / max_format 数组表示版本区间。填错 pack_format 通常仍能加载,但游戏会提示「为其他版本制作」。
recipe(单数)→ 命名空间和文件名有没有大写或中文 → 原材料写法与目标版本是否匹配 →/datapack list 里这个包是否已启用。data/minecraft/recipe/ 下并用与原版相同的文件名, 就能替换掉原版配方。想删掉某个原版配方,放一个内容为 {"type":"minecraft:crafting_shapeless","ingredients":[…不可能的组合…]} 的同名文件即可。result 里除了 id 和 count, 1.20.5+ 还能写 components,直接产出带附魔、带名字的成品。做一个数据包:把配方 JSON 放到「存档/datapacks/你的包名/data/<命名空间>/recipe/xxx.json」,同级目录放一个 pack.mcmeta 声明版本,进游戏执行 /reload 即可。命名空间和文件名必须是全小写字母、数字或下划线,用中文或大写会静默加载失败。
按顺序排查三点:一是路径拼错(1.21 起是单数的 recipe,不是 recipes);二是命名空间或文件名含大写、空格、中文;三是 pack.mcmeta 的 pack_format 与游戏版本对不上。执行 /datapack list 能看到包是否被识别,F3+日志会写出具体报错。
可以,把材料写成物品标签,前面加井号,例如 "#minecraft:planks" 表示任意木板、"#minecraft:logs" 表示任意原木。有序配方写在 key 里,无序配方直接写进 ingredients 数组即可。