Руководства / Устранение неполадок
Датапак не загружается? Структура папок и три имени, которые должны совпадать
Если датапак не появляется в /datapack list — проблема в путях, а не в коде. Вот точное дерево, правило пространства имён и папки, которые переименовали.
/datapack list ничего не показывает или показывает пак как отключённый. Почти всегда JSON в порядке, а папки — нет.
Дерево
world/datapacks/my_pack/
├── pack.mcmeta
└── data/
├── my_namespace/
│ ├── function/ one .mcfunction per file
│ ├── recipe/
│ ├── loot_table/
│ ├── advancement/
│ └── predicate/
└── minecraft/
└── tags/
└── function/
└── load.json
Три имени должны совпадать, и одно из них неочевидно:
pack.mcmetaв корне пака — рядом сdata/, а не внутри неё.data/<namespace>/— ваше пространство имён, строчными буквами, без пробелов. Оно становится префиксом вmy_namespace:my_function.- Названия папок категорий, которые изменились и обычно являются виновником.
Папки переименовали в единственное число
Это сломало много паков и много руководств:
| Старое | Текущее |
|---|---|
functions/ | function/ |
recipes/ | recipe/ |
loot_tables/ | loot_table/ |
advancements/ | advancement/ |
predicates/ | predicate/ |
structures/ | structure/ |
Пак с названиями во множественном числе загружается — он появляется в /datapack list — и просто ничего не делает, а это самый запутанный вариант отказа из всех. tags/ осталась во множественном числе, но папки внутри неё перешли в единственное, как и всё остальное — tags/functions/ теперь tags/function/. Да, это непоследовательно.
Автоматический запуск
Два особых тега:
data/minecraft/tags/function/load.json → runs once on load/reload
data/minecraft/tags/function/tick.json → runs every tick
Обратите внимание: data/minecraft/, а не ваше собственное пространство имён — тег принадлежит Minecraft, а функции, на которые он указывает, принадлежат вам:
{ "values": ["my_namespace:setup"] }
Диагностика по порядку
/datapack list— если пак вообще не в списке, значитpack.mcmetaотсутствует, повреждён или лежит на уровень глубже.- В списке, но отключён —
/datapack enable "file/my_pack". Обратите внимание на префиксfile/и кавычки. - В списке и включён, но бездействует — названия папок во множественном числе или тег загрузки в вашем собственном пространстве имён вместо
minecraft. /reloadи прочитайте лог (logs/latest.logили вывод лаунчера). Функция с синтаксической ошибкой отбрасывается там с сообщением "Failed to load function …"; в чате только говорится, что перезагрузка завершена.
В архиве или нет
Работают оба варианта. В архиве означает pack.mcmeta в корне zip-файла, точно как для ресурспаков. Форма папки удобнее при разработке, потому что /reload подхватывает изменения без повторной упаковки.
Размещение на сервере
На сервере путь — <world>/datapacks/, где <world> — это значение level-name в server.properties, а не корень сервера. Положить пак в папку сервера — самая распространённая ошибка на стороне сервера.
Соберите пак с текущими названиями папок и корректным pack.mcmeta, а затем скачайте его готовым к установке с помощью Datapack Studio — и поместите тег загрузки в data/minecraft/tags/function/, как указано выше.