えむのメモして満足するLog

どうも私です。

MinecraftのリソースパックをZip化しただけなのに…

Java版マイクラの仕様と言うより、Javaの仕様によって、リソースパックをZIP化したが、パスは合ってるのに読み込まない現象が発生する。そのテクニカルな対処法的なメモ。フォルダ構成が合ってないなどのオマヌケなミスなどは除く。

文字コードによるエラー

ファイルの名前にマルチバイトが入ってる上に文字コードUTF-8ではない時に起こる。

ログに記録されたエラー:

Failed to add resource pack <FILENAME>.zip
java.lang.IllegalArgumentException: MALFORMED

...

次のように修正する。

  • 7-ZipWindows)の場合:圧縮の際、パラメーター(P)にcu=onを追加する1
  • zip(Info-ZIP、Linux)の場合:オプション-UN=UTF8を付与する。 → zip -UN=UTF8 ...

Javajava.util.zip自体がUTF-8を標準としている。相当ファイルを消せば回避できるが、ファイル名に関係なく、UTF-8エンコードしておくのが吉2

圧縮方式によるエラー

このエラーに遭遇すると「リソースパックの選択」の「利用可能」に相当のzipファイルだけが一覧にない現象が発生する。

ログに記録された警告:

Couldn't get pack info for: java.util.zip.ZipException: invalid CEN header (bad compression method)

これは圧縮方式がdeflateではないため発生するが、それ以外の理由でもZipExceptionは発生するので気をつけよう。

圧縮方式を正すには次のようにする。

  • 7-ZipWindows)の場合:圧縮方式(M)にDeflateを選択する。
  • zip(Info-ZIP、Linux)の場合:オプション-Z deflateを付与して明確化する。 → zip -Z deflate ...

その他リソースパックの一覧に表示されない現象は、ルードディレクトリにpack.mcmetaがないと発生する。これは単にマヌケ事案なので補完してやる事。

イクラのリソースパック造るなら有無を言わさずログの確認は必須だろう。

FTPでアップロードしてる?

FTPでは転送の形式をバイナリモードにしてzipファイルをアップロードしないと破損する。

さいごに

zipのオプションは二つとも付けておくことでリソースパックの条件を満たす。 → zip -Z deflate -UN=UTF8 ...

-Zは付けずともデフォルトでdeflateが選ばれてるはずだが、余計なオプションを付けたせいかstoreになってたので、一応明確化しておくと良いだろう。

圧縮レベルの変更は中毒患者専用のオプションだ。
よい子の皆さんは微々たる軽量化(軽くなると言うわけではない)を狙うより、ZIP化に意味があることを忘れては成らない。