Датапак для Minecraft своими руками: структура файлов и первый рецепт
Как собрать датапак без модов и Java: что писать в pack.mcmeta, как устроена папка data, куда класть рецепты и таблицы лута и почему после правки нужен /reload.
Половина идей, ради которых люди лезут в моддинг, не требует ни Java, ни Forge. Новые рецепты, другой лут в сундуках, свои функции и события — всё это делается датапаком, то есть набором текстовых файлов.
Датапак работает в ванильной игре, не требует установки чего-либо у игроков и правится блокнотом.
Где он лежит
Датапак кладётся внутрь конкретного мира:
.minecraft/saves/<имя мира>/datapacks/<имя датапака>/
Отсюда важное следствие: датапак привязан к миру, а не к игре. Хочешь использовать в другом мире — копируешь папку.
pack.mcmeta
Единственный обязательный файл. Лежит в корне датапака и описывает его для игры:
{
"pack": {
"description": "Мой первый датапак",
"min_format": [88, 0],
"max_format": [88, 0]
}
}
min_format и max_format задают диапазон версий формата, с которыми пак совместим. Числа
зависят от версии игры и меняются от релиза к релизу — это первое, что стоит проверить, если
пак не подхватывается.
Формат объявления версий менялся: в старых паках стоит одиночное поле pack_format, и гайды
в интернете в основном показывают именно его. Если копируешь пример из статьи трёхлетней
давности, а игра пак не видит, дело почти наверняка здесь.
Структура data
Всё остальное живёт в папке data, разложенной по пространствам имён:
data/<пространство имён>/<реестр>/<путь>.json
Пространство имён — обычно имя твоего пака, например mypack. Оно нужно, чтобы твои файлы не
конфликтовали с ванильными и с чужими паками.
Реестр — то, что ты описываешь. Основные:
recipe/— рецепты крафта;loot_table/— таблицы лута;function/— функции с командами;advancement/— достижения;tags/— теги, объединяющие предметы и блоки в группы.
Обрати внимание на единственное число в именах папок: recipe, а не recipes. Это тоже
менялось между версиями, и старые гайды здесь врут.
Первый рецепт
Самый быстрый способ убедиться, что всё работает, — сделать рецепт. Файл
data/mypack/recipe/diamond_from_coal.json:
{
"type": "minecraft:crafting_shaped",
"pattern": [
"CCC",
"CCC",
"CCC"
],
"key": {
"C": "minecraft:coal_block"
},
"result": {
"id": "minecraft:diamond",
"count": 1
}
}
Девять блоков угля превращаются в алмаз. Баланс сомнительный, зато результат проверяется за десять секунд.
Как применить изменения
После правки файлов не нужно перезапускать игру. Достаточно команды:
/reload
Она перечитывает рецепты, таблицы лута, функции, достижения, предикаты и теги.
Проверить, что пак вообще подхватился, можно командой /datapack list. Если твоего пака нет
в списке включённых — ищи ошибку в pack.mcmeta или в структуре папок. Если пак есть, а
рецепт не работает — ошибка внутри JSON.
Где это становится неудобным
Один рецепт — приятно. Пятьдесят — уже работа.
JSON не прощает мелочей: лишняя запятая, кавычка не того типа, опечатка в идентификаторе предмета. Игра при этом молча не загрузит файл, а иногда и весь пак. Искать опечатку в пятидесяти файлах глазами — занятие на вечер.
Плюс однотипность. «Сделай такие же рецепты для всех видов дерева» — это восемь почти одинаковых файлов, которые отличаются одним словом. Копировать руками скучно и потому легко ошибиться.
Ровно здесь агент с доступом к файлам даёт выигрыш: он генерирует набор файлов по образцу, проверяет валидность JSON пачкой и находит опечатки в идентификаторах, не открывая каждый файл. Дока работает с папкой датапака напрямую и может держать модель локально, а не пересылать содержимое в облако — скачать можно бесплатно.
Что можно, а что нельзя
Стоит понимать границу, чтобы не потратить неделю зря.
Датапаком делается: рецепты, лут, торговля жителей, достижения, функции с командами, теги, генерация структур в мире, кастомные измерения.
Датапаком не делается: новые предметы и блоки со своим поведением, новые механики, свой интерфейс, всё, что требует кода. Это территория модов на Java.
Практический совет: начни с датапака в любом случае. Если упрёшься в потолок — переходи на мод, но чаще оказывается, что упираться не пришлось.
Если датапак делается для сервера, он кладётся в папку мира на сервере, а не у игроков. Про настройку самого сервера — в статье про Forge-сервер с модами.