数据包加载失败?文件夹结构和三个必须匹配的名称
如果数据包没有出现在 /datapack list 中,那通常是路径问题,而非代码问题。本文将详细介绍正确的目录结构、命名空间规则以及那些被重命名的文件夹。
/datapack list 什么也没显示,或者显示数据包已禁用。这几乎总是因为 JSON 文件没问题,但文件夹结构有误。
目录结构
world/datapacks/my_pack/
├── pack.mcmeta
└── data/
└── my_namespace/
├── function/ one .mcfunction per file
├── recipe/
├── loot_table/
├── advancement/
├── predicate/
└── 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/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/前缀和引号。 - 已列出并启用但无反应 —
pack_format错误,或文件夹名称为复数。 /reload并阅读聊天信息。函数中的语法错误会在此处显示,而不会静默失败。
是否压缩
两种方式都有效。压缩意味着 pack.mcmeta 位于 zip 文件的根目录,与资源包完全相同。在开发过程中,文件夹形式更方便,因为 /reload 无需重新压缩即可识别编辑。
服务器放置位置
在服务器上,路径是 <world>/datapacks/,其中 <world> 是 level-name 在 server.properties 中的值 — 而不是服务器根目录。将数据包直接放入服务器文件夹是服务器端最常见的错误。
使用当前文件夹名称、有效的 pack.mcmeta 和已连接的加载标签来组装一个数据包,然后使用 Datapack Studio 下载它,即可直接放入。