.mrpackを通常のModパックzipに変換する方法 — そしてなぜ解凍ソフトが失敗するのか
.mrpackはModのアーカイブではなく、マニフェストです。解凍してもJSONファイルしかなく、jarファイルは手に入りません。その中身と、コンバーターが実際に何をしているのかを説明します。
.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パックが200KBのダウンロードサイズで済むのです。そして、一般的な解凍ソフトが「失敗」するのもそのためです。解凍するものが何もないからです。
変換がすべきこと
modrinth.index.jsonを読み込む。- マニフェストの各エントリをCDNのURLから取得する。
- マニフェスト内のsha512と照合して各ファイルを検証する。これをスキップすると、破損したjarや置き換えられたjarがパックに入り込んでしまいます。
- 各ファイルを
pathに配置する。 overrides/を上書きコピーする — 上書きファイル(オーバーライド)は、その目的のために存在します。- 結果をzip圧縮する。
ステップ3は、コンバーターが密かにスキップしがちな部分です。ハッシュが一致しない場合、ダウンロードが途中で切れたか、ファイルが変更されたことを意味します。それでもインストールすると、ロード時にクラッシュし、間違ったModを指すエラーが発生するパックができてしまいます。
なぜ変換するのか
- mrpackに対応していないランチャー。 ATLauncher、MultiMC、手動インストールでは、jarファイルのフォルダーが必要です。
- サーバー側。 サーバーホストは
.mrpackを受け入れることはほとんどありません。Modフォルダーを要求します。 - オフラインインストール。 一度変換すれば、パックはCDNを必要としなくなります。
envフィールドがクライアントとサーバーを決定する
各ファイルには次の情報が含まれています。
"env": { "client": "required", "server": "unsupported" }
サーバーパックは、サーバー側でunsupportedとマークされたもの(主にシェーダー、ミニマップ、HUD Mod)をスキップする必要があります。クライアントのModフォルダー全体をサーバーにコピーすると、起動時にレンダリングクラスを名指しするクラッシュが発生する一般的な原因となります。
逆方向の変換
フォルダーから.mrpackを構築するのは逆の作業であり、一つ落とし穴があります。ModrinthにないModはマニフェストエントリにできません。それらはoverrides/mods/に入れる必要があり、これによりパックは大きくなりますが、動作は維持されます。これらのModを黙って削除すると、クリーンにインストールされるものの、コンテンツが欠落したパックができてしまいます。
ハッシュ検証とenvの分割処理に対応した双方向の変換は、リソースパックZipツールで行えます。