การแปลงไฟล์ .mrpack เป็นไฟล์ zip modpack ทั่วไป — และทำไมโปรแกรมแตกไฟล์ถึงล้มเหลว
ไฟล์ .mrpack เป็นเพียงรายการข้อมูล (manifest) ไม่ใช่ไฟล์เก็บถาวรของม็อด การแตกไฟล์ออกมาจะได้ไฟล์ JSON และไม่มีไฟล์ .jar นี่คือสิ่งที่อยู่ข้างในจริงๆ และสิ่งที่ตัวแปลงไฟล์ต้องทำ
เปลี่ยนชื่อไฟล์ .mrpack เป็น .zip แล้วเปิดดู คุณจะพบว่าแทบไม่มีอะไรเลย: มีแค่ไฟล์ modrinth.index.json และอาจจะมีโฟลเดอร์ overrides/ ม็อดหายไป นี่ไม่ใช่ความเสียหาย แต่เป็นรูปแบบไฟล์ที่ทำงานตามที่ออกแบบไว้
สิ่งที่อยู่ข้างใน
modrinth.index.json the manifest: name, version, loader, and a list of downloads
overrides/ config files, resource packs, anything not on Modrinth
แต่ละรายการใน manifest จะมีลักษณะดังนี้:
{
"path": "mods/sodium.jar",
"hashes": { "sha1": "…", "sha512": "…" },
"downloads": ["https://cdn.modrinth.com/data/…/sodium.jar"],
"fileSize": 812345
}
แพ็กนี้จะส่ง การอ้างอิง ไม่ใช่ไฟล์ นั่นคือเหตุผลที่แพ็กม็อด 40 ตัวมีขนาดดาวน์โหลดเพียง 200 KB และทำไมโปรแกรมแตกไฟล์ทั่วไปถึง "ล้มเหลว" — เพราะไม่มีอะไรให้แตกไฟล์ออกมา
สิ่งที่การแปลงไฟล์ต้องทำ
- อ่าน
modrinth.index.json - ดึงข้อมูลแต่ละรายการจาก URL ของ CDN
- ตรวจสอบแต่ละไฟล์เทียบกับ sha512 ใน manifest การข้ามขั้นตอนนี้คือสาเหตุที่ทำให้ไฟล์ .jar ที่เสียหายหรือถูกแทนที่เข้าไปอยู่ในแพ็ก
- วางแต่ละไฟล์ไว้ที่
path - คัดลอก
overrides/ทับลงไป — ไฟล์ที่ทับจะชนะ นั่นคือวัตถุประสงค์ของมัน - บีบอัดผลลัพธ์เป็นไฟล์ zip
ขั้นตอนที่ 3 คือสิ่งที่ตัวแปลงไฟล์มักจะข้ามไปอย่างเงียบๆ แฮชที่ไม่ตรงกันหมายความว่าการดาวน์โหลดถูกตัดทอนหรือไฟล์มีการเปลี่ยนแปลง การติดตั้งต่อไปจะทำให้แพ็กขัดข้องเมื่อโหลด โดยมีข้อผิดพลาดที่ชี้ไปที่ม็อดผิดตัว
ทำไมต้องทำแบบนี้เลย
- ตัวเรียกใช้งานที่ไม่รองรับ mrpack ATLauncher, MultiMC และการติดตั้งด้วยตนเองต้องการโฟลเดอร์ที่มีไฟล์ .jar
- ฝั่งเซิร์ฟเวอร์ โฮสต์เซิร์ฟเวอร์แทบจะไม่ยอมรับ
.mrpackพวกเขาต้องการโฟลเดอร์ม็อด - การติดตั้งแบบออฟไลน์ เมื่อแปลงแล้ว แพ็กจะไม่ต้องการ CDN อีกต่อไป
ฟิลด์ env เป็นตัวตัดสินว่าสำหรับไคลเอนต์หรือเซิร์ฟเวอร์
แต่ละไฟล์จะมี:
"env": { "client": "required", "server": "unsupported" }
แพ็กเซิร์ฟเวอร์ต้อง ข้าม ทุกอย่างที่ทำเครื่องหมาย unsupported ในฝั่งเซิร์ฟเวอร์ — ส่วนใหญ่จะเป็นเชดเดอร์, มินิแมป และม็อด HUD การคัดลอกโฟลเดอร์ม็อดไคลเอนต์ทั้งหมดไปยังเซิร์ฟเวอร์เป็นสาเหตุปกติของการขัดข้องเมื่อเริ่มต้นที่ระบุคลาสการเรนเดอร์
การทำในทางกลับกัน
การสร้าง .mrpack จากโฟลเดอร์เป็นการทำในทางกลับกันและมีข้อควรระวังหนึ่งข้อ: ม็อดใดๆ ที่ไม่ได้อยู่บน Modrinth ไม่สามารถเป็นรายการใน manifest ได้ จะต้องอยู่ใน overrides/mods/ ซึ่งจะทำให้แพ็กมีขนาดใหญ่ขึ้นแต่ยังคงใช้งานได้ การทิ้งม็อดเหล่านั้นไปอย่างเงียบๆ จะทำให้ได้แพ็กที่ติดตั้งได้อย่างสะอาดแต่ขาดเนื้อหา
แปลงได้ทั้งสองทิศทาง พร้อมการตรวจสอบแฮชและการจัดการการแยก env ได้ที่ Resource Pack Zip Tools