Рецепт — это файл
Команды, добавляющей рецепт, не существует. Как и loot-таблицы с ачивками, рецепт — это JSON-файл, который мир читает при загрузке, и живёт он по пути data/<пространство>/recipe/<имя>.json внутри датапака. Если это звучит непривычно, статья датапаки против команд объясняет почему, а генератор датапаков соберёт папку.
Обратите внимание: папка называется recipe, в единственном числе, начиная с 1.21. Раньше было recipes, и файл, оставшийся в старой папке, на новой игре не читается вообще.
Лишние ряды — ошибка, которая стоит дороже всего
Рецепт по форме сопоставляется с наименьшим прямоугольником, который его вмещает, и паттерн, который вы написали, и есть этот прямоугольник. Напишете паттерн в три строки там, где рецепт занимает одну, — вы объявили трёхстрочный рецепт.
"pattern": [
"###",
" ",
" "
]
Такое не скрафтится в сетке 2×2 в инвентаре, а на верстаке потребует, чтобы три предмета стояли именно в верхнем ряду. Почти наверняка вы хотели вот это:
"pattern": [
"###"
]
Теперь рецепт сработает везде, где три предмета стоят в ряд. Правило простое: обрезайте все пустые ряды и столбцы по краям. Пробелы внутри формы значимы и должны остаться — дырка в середине кольцевого рецепта осмысленна и намеренна.
По форме или без формы
Бесформенный крафт полностью игнорирует расположение: он берёт плоский список и срабатывает, если эти предметы просто есть в сетке.
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
"minecraft:paper",
"minecraft:ink_sac"
],
"result": { "id": "minecraft:written_book", "count": 1 }
}
Берите бесформенный, когда расположение не несёт смысла — а это большинство рецептов-комбинаций. По форме имеет смысл там, где форма и есть часть идеи: кирка на сетке должна выглядеть как кирка.
Два изменения формата, ломающие скопированные примеры
JSON рецептов переписывали дважды за короткий срок — поэтому пример из туториала часто не работает без всякой видимой причины.
| Версия | Ингредиент | Результат крафта |
|---|---|---|
| до 1.20.5 | {"item": "minecraft:x"} | {"item": ..., "count": n} |
| 1.20.5 – 1.21.1 | {"item": "minecraft:x"} | {"id": ..., "count": n} |
| 1.21.2 и новее | "minecraft:x" | {"id": ..., "count": n} |
Результаты плавки и камнереза тоже переехали: до 1.20.5 это была просто строка с ID, после — объект. Ничего из этого не меняет смысла рецепта, только его написание — а именно такие расхождения мучительнее всего искать глазами.
Один ингредиент — много предметов
Ингредиентом может быть тег предметов, а не конкретный предмет; пишется с # впереди. Так рецепт начинает принимать любое дерево:
"key": {
"#": "#minecraft:planks"
}
В ванили много полезных тегов — #minecraft:planks, #minecraft:logs, #minecraft:wool — и свои можно определить в data/<пространство>/tags/item/. Перечислять все породы дерева руками тоже работает, но стареет плохо: в следующем обновлении добавят новое дерево, и рецепт тихо перестанет его принимать.
Когда рецепт работает, а книга пуста
Этот случай сбивает с толку, потому что ничего на самом деле не сломано. Кастомный рецепт не показывается в книге рецептов, пока не разблокирован, а разблокировка идёт через ачивку с наградой recipe_unlocked. Ваниль делает это для каждого своего рецепта — поэтому они и появляются по мере сбора материалов.
Пока вы этого не добавили, рецепт всё равно прекрасно крафтится, если игрок выложит его сам. Так что если ваша проверка звучит как «его нет в книге» — попробуйте собрать его руками, прежде чем решить, что файл неверный.
Чек-лист, когда ничего не происходит
- Файл лежит в
recipe/, в единственном числе, если версия 1.21+? - Есть ли в паттерне пустые крайние ряды или столбцы?
- Совпадает ли формат ингредиентов с вашей версией игры?
- Сделали ли
/reload? - Виден ли пак в
/datapack list?
В отличие от loot-таблиц, кривой рецепт обычно всё-таки ругается в логе сервера при перезагрузке — так что этот лог стоит прочитать раньше всего остального.
Куда идти дальше
Генератор рецептов раскладывает рецепт по сетке, сам обрезает паттерн и переписывает формат ингредиентов и результата при смене версии. Дальше генератор loot-таблиц закрывает то, что выпадает из сундуков и мобов, а не то, что кладут в верстак.