Chuyển đổi .mrpack thành gói mod zip thông thường — và tại sao các công cụ giải nén lại thất bại
Một tệp .mrpack thực chất là một bản kê khai (manifest), không phải là một kho lưu trữ các mod. Giải nén nó sẽ cho bạn một tệp JSON chứ không phải các tệp jar. Dưới đây là những gì thực sự bên trong và những gì một công cụ chuyển đổi phải làm.
Đổi tên một .mrpack thành .zip, mở nó ra, và bạn sẽ thấy gần như không có gì: một modrinth.index.json, có thể là một thư mục overrides/. Các mod bị thiếu. Đây không phải là lỗi 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 bản kê khai trông như thế này:
{
"path": "mods/sodium.jar",
"hashes": { "sha1": "…", "sha512": "…" },
"downloads": ["https://cdn.modrinth.com/data/…/sodium.jar"],
"fileSize": 812345
}
Gói này chứa tham chiếu, không phải tệp. Đó là lý do tại sao một gói 40 mod chỉ có dung lượng 200 KB và tại sao mọi công cụ giải nén thông thường đều "thất bại" — không có gì để giải nén.
Một công cụ chuyển đổi phải làm gì
- Đọc
modrinth.index.json. - Tải từng mục từ URL CDN của nó.
- Xác minh từng tệp dựa trên mã sha512 trong bản kê khai. Bỏ qua bước này là cách một
tệp jar bị hỏng hoặc bị thay thế lọt vào một gói.
- Đặt mỗi tệp vào
pathcủa nó. - Sao chép
overrides/lên trên cùng — các tệp ghi đè sẽ thắng, đó là mục đích của chúng. - Nén kết quả.
Bước 3 là bước mà các công cụ chuyển đổi thường âm thầm bỏ qua. Một mã băm không khớp có nghĩa là quá trình tải xuống bị cắt cụt hoặc tệp đã bị thay đổi; việc cài đặt nó dù sao cũng tạo ra một gói bị lỗi khi tải với một lỗi chỉ vào mod sai.
Tại sao phải làm điều này
- Các trình khởi chạy không hỗ trợ mrpack. ATLauncher, MultiMC và các cài đặt thủ công đều muố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 một
.mrpack; họ muốn
thư mục mod.
- 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 giữa máy khách và máy chủ
Mỗi tệp mang theo:
"env": { "client": "required", "server": "unsupported" }
Một 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à các shader, minimap và các mod HUD. Sao chép toàn bộ thư mục mod của máy khách lên máy chủ là nguyên nhân thông thường gây ra lỗi khi khởi động mà chỉ ra một lớp kết xuất (rendering class).
Đi theo hướng ngược lại
Xây dựng một .mrpack từ một thư mục là quá trình ngược lại và có một cạm bẫy: bất kỳ mod nào không có trên Modrinth không thể là một mục trong bản kê khai. Nó phải nằm trong overrides/mods/, điều này làm cho gói lớn hơn nhưng vẫn hoạt động. Việc âm thầm bỏ qua các mod đó sẽ tạo ra một gói cài đặt sạch sẽ nhưng thiếu nội dung.
Chuyển đổi theo cả hai hướng, với xác minh mã băm và phân tách env được xử lý, trong Resource Pack Zip Tools.