mrpackはzipだと嘘をつくzipである
.mrpackを.zipにリネームして展開しても、手に入るのはマニフェストとoverridesフォルダだけで、modは入っていない——jarはModrinthのCDN上にあり、ハッシュで取得される。SHA-1とSHA-512で検証されます。
.mrpack はZIPアーカイブなので、.zip にリネームして展開することは可能です——そして、ほとんど役に立つものは出てきません。手に入るのは modrinth.index.json と overrides フォルダだけで、modは一切ありません。jarは最初から中には入っていないのです。
modが入っていない理由
Modrinthのパックはペイロードではなくマニフェストを保存します。modrinth.index.json の各エントリには、ダウンロードURLと、そのURLが返すべきファイルのSHA-1およびSHA-512ハッシュが記載されています。ランチャーはマニフェストを読み、各ファイルを取得し、ハッシュを検証してから、初めてインスタンスに配置します。
この設計によりパックは小さく保たれ、すべてのjarを再アップロードすることなくパックを更新できます。その一方で、一度誰かが解決するまでパックはオフラインでは使えないということでもあります。
マニフェストに実際に含まれるもの
| フィールド | 意味 |
|---|---|
formatVersion | マニフェストのスキーマバージョン |
game | 常に "minecraft" ——バージョンは dependencies に入っている |
files | path、hashes、downloads、env の配列 |
dependencies | 最初にインストールするローダーとMinecraftのバージョン |
各ファイルの env フィールドこそ、多くの人が見落とすものです。これは client と server について別々に、そのファイルが required、optional、unsupported のいずれであるかを示します——そして env がないファイルは両方で必須です。client-onlyとマークされたmodは、サーバーの mods フォルダにコピーすべきではありません——そうすることが、サーバーが起動を拒否するよくある原因です。
ハッシュチェックは任意ではない
ダウンロードしたファイルのSHA-1がマニフェストと一致しない場合、そのファイルは誤っています。途中で切れたダウンロード、jarとして保存されたCDNのエラーページ、あるいは改ざんされたミラーのいずれかです。検証を省略するコンバーターは、壊れたインスタンスを平気でパックしてしまいます。検証こそが、でたらめな再パックを信用するのではなく、これをローカルで行う理由そのものです。
クライアントとサーバーの出力
同じマニフェストでも、ターゲットによって2種類の異なるアーカイブが生成されます。
- クライアントパック ——すべてを含み、さらに
overridesをインスタンスのルートにマージした、ZIPを受け付けるランチャー用のものです。 - サーバーパック ——
env.serverがunsupportedであるエントリをスキップし、残りを保持し、client-overrides/の代わりにoverrides/の上にserver-overrides/を重ねます。
Java Editionのみ。Bedrockには同等のフォーマットがありません。Bedrockのアドオンは .mcaddon/.mcpack アーカイブで、manifest.json の形がまったく異なり、Modrinthのパックがそれらに解決されることはありません。
overridesはマージではなく上書きする
overrides/ 以下のファイルは、modが配置された後にインスタンスへ上書きコピーされます。overrides内のコンフィグファイルは、modのデフォルトを丸ごと置き換えます。パックがoverridesにコンフィグを同梱していて、あなたがインスタンス内でもそのコンフィグを編集した場合、次回の解決時にはoverrides側のコピーが勝ちます。
マニフェストを変換し、すべてのハッシュを検証して、ランチャー対応またはサーバー対応のZIPを手に入れましょう:MRPACK to ZIP Converter。