Java版マイクラの仕様と言うより、Javaの仕様によって、リソースパックをZIP化したが、パスは合ってるのに読み込まない現象が発生する。そのテクニカルな対処法的なメモ。フォルダ構成が合ってないなどのオマヌケなミスなどは除く。
文字コードによるエラー
ファイルの名前にマルチバイトが入ってる上に文字コードがUTF-8
ではない時に起こる。
ログに記録されたエラー:
Failed to add resource pack <FILENAME>.zip java.lang.IllegalArgumentException: MALFORMED ...
次のように修正する。
- 7-Zip(Windows)の場合:圧縮の際、パラメーター(P)に
cu=on
を追加する1。 zip
(Info-ZIP、Linux)の場合:オプション-UN=UTF8
を付与する。 →zip -UN=UTF8 ...
Javaのjava.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-Zip(Windows)の場合:圧縮方式(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化に意味があることを忘れては成らない。