.mrpackを通常のmodpack ZIPに変換する — そして抽出ツールが失敗する理由
.mrpackはマニフェストであり、MODのアーカイブではありません。解凍してもJSONファイルが入っているだけで、jarは1つも出てきません。実際の中身と、コンバーターが行うべき処理を解説します。configはoverrides内です。
.mrpackを.zipにリネームして開いても、ほとんど何も入っていません。modrinth.index.json、場合によってはoverrides/フォルダがある程度です。MODが見当たりません。これは破損ではなく、フォーマットが設計どおりに動作している結果です。
中身は何か
modrinth.index.json the manifest: name, version, loader, and a list of downloads
overrides/ config files, resource packs, anything not on Modrinth
マニフェスト内の各エントリは次のようになっています:
{
"path": "mods/sodium.jar",
"hashes": { "sha1": "…", "sha512": "…" },
"downloads": ["https://cdn.modrinth.com/data/…/sodium.jar"],
"fileSize": 812345
}
このパックに含まれるのは参照情報であり、ファイルそのものではありません。だからこそ40個のMODを含むパックが200 KBのダウンロードで済み、汎用の抽出ツールはすべて「失敗」します — 抽出するものが何もないからです。
変換に必要な処理
modrinth.index.jsonを読み込む。- 各エントリをCDNのURLから取得する。
- マニフェスト内のsha512と各ファイルを照合する。これを省略すると、破損したjarやすり替えられたjarがパックに紛れ込みます。
- 各ファイルを
pathに配置する。 overrides/、次にclient-overrides/またはserver-overrides/を上書きコピーする — オーバーライドが優先されるのがその目的です。- 結果をZIPに圧縮する。
ステップ3は、コンバーターが密かに省略する工程です。ハッシュが一致しないということは、ダウンロードが途中で切れたかファイルが変更されたことを意味します。そのままインストールすると、読み込み時に無関係なMODを指すエラーでクラッシュするパックが出来上がります。
なぜ変換するのか
- mrpackを理解しないランチャー。 ATLauncher、MultiMC、手動インストールではjarのフォルダが必要です。
- サーバー側。 サーバーホストは
.mrpackを受け付けないことがほとんどで、modsフォルダを求めます。 - オフラインインストール。 一度変換すれば、パックはCDNを必要としなくなります。
envフィールドがクライアントとサーバーを分ける
各ファイルには次の情報が付いています:
"env": { "client": "required", "server": "unsupported" }
サーバー用パックでは、サーバー側でunsupportedとマークされたものすべてをスキップする必要があります — 主にシェーダー、ミニマップ、HUD系MODです。クライアントのmodsフォルダを丸ごとサーバーにコピーすると、起動時にレンダリングクラスを名指しするクラッシュが起きるのが定番のパターンです。
逆方向の変換
フォルダから.mrpackを構築するのは逆の作業で、1つ落とし穴があります:Modrinth、GitHub、GitLabでホストされていないMODはマニフェストのエントリにできません — しかもModrinth自体、公開パックには自社CDNしか受け付けません。そのようなMODはoverrides/mods/に入れる必要があり、パックは大きくなりますが動作は維持されます。こうしたMODを黙って除外すると、クリーンにインストールできて中身が欠けているパックが出来上がります。
.mrpackをクライアント用またはサーバー用のZIPに変換し、ハッシュ検証とenvの振り分けにも対応しています:MRPACK to ZIP Converter。