Datapack não carrega? A estrutura de pastas e os três nomes que precisam bater
Um datapack que não aparece em /datapack list tem um problema de caminho, não de código. Veja a árvore exata, a regra de namespace e as pastas que foram renomeadas.
/datapack list não mostra nada, ou mostra o pacote como desativado. Quase sempre o JSON está certo e as pastas estão erradas.
A árvore
world/datapacks/my_pack/
├── pack.mcmeta
└── data/
├── my_namespace/
│ ├── function/ one .mcfunction per file
│ ├── recipe/
│ ├── loot_table/
│ ├── advancement/
│ └── predicate/
└── minecraft/
└── tags/
└── function/
└── load.json
Três nomes precisam bater, e um deles não é óbvio:
pack.mcmetana raiz do pacote — ao lado dedata/, não dentro dele.data/<namespace>/— seu namespace, em minúsculas, sem espaços. Ele vira o prefixo emmy_namespace:my_function.- Os nomes das pastas de categoria, que mudaram e costumam ser o verdadeiro culpado.
As pastas foram renomeadas para o singular
Isso quebrou muitos pacotes e muitos tutoriais:
| Antigo | Atual |
|---|---|
functions/ | function/ |
recipes/ | recipe/ |
loot_tables/ | loot_table/ |
advancements/ | advancement/ |
predicates/ | predicate/ |
structures/ | structure/ |
Um pacote que usa os nomes no plural carrega — aparece em /datapack list — e simplesmente não faz nada, que é o modo de falha mais confuso de todos. tags/ continuou no plural, mas as pastas dentro dele passaram para o singular junto com o resto — tags/functions/ agora é tags/function/. Sim, é inconsistente.
Executando algo automaticamente
Duas tags especiais:
data/minecraft/tags/function/load.json → runs once on load/reload
data/minecraft/tags/function/tick.json → runs every tick
Repare em data/minecraft/, não no seu próprio namespace — a tag pertence ao Minecraft, e as funções para as quais ela aponta pertencem a você:
{ "values": ["my_namespace:setup"] }
Diagnosticando em ordem
/datapack list— se o pacote não aparece na lista,pack.mcmetaestá faltando, malformado, ou um nível fundo demais.- Aparece na lista mas está desativado —
/datapack enable "file/my_pack". Repare no prefixofile/e nas aspas. - Aparece na lista e está ativado, mas não faz nada — nomes de pasta no plural, ou uma tag de carregamento no seu próprio namespace em vez de
minecraft. /reloade leia o log (logs/latest.log, ou a saída do launcher). Uma função com erro de sintaxe é descartada ali com "Failed to load function …"; o chat só diz que o reload terminou.
Compactado ou não
Os dois funcionam. Compactado significa pack.mcmeta na raiz do zip, exatamente como nos pacotes de recursos. O formato de pasta é mais fácil durante o desenvolvimento, porque /reload capta as edições sem precisar compactar de novo.
Posicionamento no servidor
Em um servidor, o caminho é <world>/datapacks/, onde <world> é o valor de level-name em server.properties — não a raiz do servidor. Jogar o pacote na pasta do servidor é o erro mais comum do lado do servidor.
Monte um pacote com os nomes de pasta atuais e um pack.mcmeta válido, e depois baixe ele pronto para usar, com o Datapack Studio — e coloque sua tag de carregamento em data/minecraft/tags/function/, como acima.