أدلة / استكشاف الأخطاء وإصلاحها
حزمة البيانات لا تُحمَّل؟ بنية المجلدات والأسماء الثلاثة التي يجب أن تتطابق
حزمة البيانات التي لا تظهر في /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/، كما هو موضح أعلاه.