Chuyển đổi .mrpack sang zip modpack thông thường — và lý do các trình giải nén thất bại
.mrpack là một tệp kê khai (manifest), không phải một kho lưu trữ mod. Giải nén nó chỉ cho bạn một tệp JSON và không có tệp jar nào. Đây là những gì thực sự có bên trong và những gì một trình chuyển đổi phải làm.
Đổi tên một .mrpack thành .zip, mở nó ra, và bạn hầu như chẳng thấy gì: một tệp modrinth.index.json, có thể là một thư mục overrides/. Các mod biến mất. Đây không phải là hỏng tệp — mà là định dạng hoạt động đúng như thiết kế.
Bên trong có gì
modrinth.index.json the manifest: name, version, loader, and a list of downloads
overrides/ config files, resource packs, anything not on Modrinth
Mỗi mục trong tệp kê khai trông như sau:
{
"path": "mods/sodium.jar",
"hashes": { "sha1": "…", "sha512": "…" },
"downloads": ["https://cdn.modrinth.com/data/…/sodium.jar"],
"fileSize": 812345
}
Gói mod chứa tham chiếu, không phải tệp. Đó là lý do một gói 40 mod chỉ là bản tải về 200 KB và cũng là lý do mọi trình giải nén thông thường đều "thất bại" — chẳng có gì để giải nén cả.
Một trình chuyển đổi phải làm gì
- Đọc
modrinth.index.json. - Tải mọi mục từ URL CDN của nó.
- Xác minh từng tệp dựa trên sha512 trong tệp kê khai. Bỏ qua bước này là cách một tệp jar bị hỏng hoặc bị tráo lọt vào gói.
- Đặt từng tệp vào đúng
pathcủa nó. - Sao chép
overrides/, rồiclient-overrides/hoặcserver-overrides/, đè lên trên — các tệp ghi đè thắng, đó chính là mục đích của chúng. - Nén kết quả lại.
Bước 3 là bước mà các trình chuyển đổi âm thầm bỏ qua. Mã băm không khớp nghĩa là bản tải về đã bị cắt ngắn hoặc tệp đã thay đổi; cứ cài đặt nó thì sẽ tạo ra một gói crash khi tải với thông báo lỗi trỏ sai mod.
Vậy tại sao phải làm việc này
- Các trình khởi chạy không hiểu mrpack. ATLauncher, MultiMC và cài đặt thủ công cần một thư mục chứa các tệp jar.
- Phía máy chủ. Các nhà cung cấp máy chủ hầu như không bao giờ chấp nhận
.mrpack; họ muốn thư mục mods. - Cài đặt ngoại tuyến. Sau khi chuyển đổi, gói không còn cần CDN nữa.
Trường env quyết định phía máy khách hay máy chủ
Mỗi tệp mang theo:
"env": { "client": "required", "server": "unsupported" }
Gói máy chủ phải bỏ qua mọi thứ được đánh dấu unsupported ở phía máy chủ — chủ yếu là shader, bản đồ mini và mod HUD. Sao chép toàn bộ thư mục mod của máy khách vào máy chủ là nguyên nhân thường gặp của lỗi crash khi khởi động với tên một lớp kết xuất (rendering class).
Chiều ngược lại
Xây dựng một .mrpack từ một thư mục là quy trình ngược lại và có một cái bẫy: bất kỳ mod nào không được lưu trữ trên Modrinth, GitHub hay GitLab đều không thể trở thành một mục trong tệp kê khai — và bản thân Modrinth chỉ chấp nhận CDN của chính nó cho các gói được xuất bản. Nó phải nằm trong overrides/mods/, điều này khiến gói lớn hơn nhưng vẫn hoạt động. Âm thầm bỏ những mod đó sẽ tạo ra một gói cài đặt trơn tru nhưng thiếu nội dung.
Chuyển đổi một .mrpack thành ZIP cho máy khách hoặc máy chủ, với xác minh mã băm và xử lý phân tách env, tại Trình chuyển đổi MRPACK sang ZIP.