Datapack không tải? Cấu trúc thư mục và ba cái tên phải khớp nhau
Một datapack không xuất hiện trong /datapack list là do lỗi đường dẫn, không phải lỗi code. Đây là cây thư mục chính xác, quy tắc namespace, và những thư mục đã bị đổi tên.
/datapack list không hiện gì, hoặc hiện pack ở trạng thái disabled. Gần như luôn là do JSON ổn cả mà thư mục sai.
Cây thư mục
world/datapacks/my_pack/
├── pack.mcmeta
└── data/
├── my_namespace/
│ ├── function/ one .mcfunction per file
│ ├── recipe/
│ ├── loot_table/
│ ├── advancement/
│ └── predicate/
└── minecraft/
└── tags/
└── function/
└── load.json
Ba cái tên phải khớp với nhau và một trong số đó không hề dễ thấy:
pack.mcmetaở gốc pack — nằm cạnhdata/, không phải bên trong nó.data/<namespace>/— namespace của bạn, viết thường, không dấu cách. Nó trở thành tiền tố trongmy_namespace:my_function.- Tên các thư mục category, thứ đã thay đổi và là thủ phạm quen thuộc.
Các thư mục đã được đổi sang số ít
Điều này làm hỏng rất nhiều pack và rất nhiều tutorial:
| Cũ | Hiện tại |
|---|---|
functions/ | function/ |
recipes/ | recipe/ |
loot_tables/ | loot_table/ |
advancements/ | advancement/ |
predicates/ | predicate/ |
structures/ | structure/ |
Một pack dùng tên số nhiều vẫn tải — nó xuất hiện trong /datapack list — và đơn giản là không làm gì cả, đây chính là kiểu lỗi khó hiểu nhất trong nhóm. tags/ vẫn giữ số nhiều, nhưng các thư mục bên trong nó đã chuyển sang số ít cùng với mọi thứ khác — tags/functions/ giờ là tags/function/. Đúng, nghe thật thiếu nhất quán.
Chạy thứ gì đó tự động
Hai tag đặc biệt:
data/minecraft/tags/function/load.json → runs once on load/reload
data/minecraft/tags/function/tick.json → runs every tick
Lưu ý data/minecraft/, không phải namespace của bạn — tag thuộc về Minecraft, còn các function mà nó trỏ tới thuộc về bạn:
{ "values": ["my_namespace:setup"] }
Chẩn đoán theo thứ tự
/datapack list— nếu pack hoàn toàn không được liệt kê, thìpack.mcmetabị thiếu, sai định dạng, hoặc nằm sâu quá một cấp.- Được liệt kê nhưng disabled —
/datapack enable "file/my_pack". Chú ý tiền tốfile/và các dấu ngoặc kép. - Được liệt kê và enabled nhưng không hoạt động — tên thư mục số nhiều, hoặc load tag nằm trong namespace của bạn thay vì
minecraft. /reloadvà đọc log (logs/latest.log, hoặc output của launcher). Một function có lỗi cú pháp sẽ bị bỏ ở đó kèm dòng "Failed to load function …"; chat chỉ báo rằng reload đã xong.
Nén zip hay không
Cả hai đều chạy được. Nén zip nghĩa là pack.mcmeta nằm ở gốc file zip, đúng như với resource pack. Dạng thư mục thì tiện hơn khi đang phát triển vì /reload nhận các chỉnh sửa mà không cần nén zip lại.
Vị trí trên server
Trên server, đường dẫn là <world>/datapacks/, trong đó <world> là giá trị của level-name trong server.properties — không phải gốc server. Thả pack vào thư mục server là lỗi phía server phổ biến nhất.
Hãy lắp một pack với tên thư mục hiện hành và một pack.mcmeta hợp lệ, rồi tải về sẵn sàng để thả vào, với Datapack Studio — và đặt load tag của bạn trong data/minecraft/tags/function/, như trên.