PackSquashとは
CUIベースの、Java版Minecraft用リソースパック(とデータパックでも使えるらしい)向けの圧縮ソフト。圧縮のオプションにリソースパックのzipファイルを解凍しにくくする項目がある。
画像ファイル(.png)・音楽ファイル(.ogg)・jsonファイル・Optifineに付属するCustom Item Textures (CIT)として認識させるためのプロパティファイル・3Dモデルのbbmodelなどが入っていても使うことができる。
マイクラ鯖「もふくらふと」のサーバーリソースパックに関わらせてもらっているのだけれど、今後のイベントで登場するアイテムのテクスチャを入れた新バージョンを先に公開してしまうとリソースパック.zipを解凍して何が追加されたか調べられると一瞬でテクスチャとアイテム名がバレるので、何かしらの方法でマイクラでは読み込めるけどエクスプローラーでは解凍できないようにしたいなあ、と思っていたところにとても良いツールでした。
本来のメイン用途は高効率の圧縮ツールとしてなので、7-Zipみたいな普通の圧縮ソフトを使ってデフォルト設定で圧縮するよりも小さいサイズで圧縮できるメリットもあります。
ただ、このソフトはCUI(コマンドラインつまり文字列だらだら出てくるコマンドプロンプトみたいなアレ)で動くので普段プログラミングやらをしない私には環境構築がめちゃくちゃ険しい道だったのでここに書き残しておきます。
(知ってから起動するまでに分からなさすぎて3ヶ月ぐらい放置した)
環境構築
使い方は全てPackSquashのGitHubのwikiページに載っていますが案の定英語オンリーです。
環境構築もInstallation guideに書いてあります。Windows、macOS、Linux系で動くらしいのでOSはほぼ気にしなくて問題ないと思われますが、どのOSでもGStreamerとかいうマルチメディアフレームワーク
が必要です。
私はWindowsとmacOSで使ったのでそれぞれ使う方を読んでください。ほぼ公式ガイドの翻訳ですが。Linuxの人は英語オリジナルガイドを頑張ってください。(さぼり)
Windowsの人
※Windows 11でも動きました。
- GitHubのReleasesページからPackSquash本体をダウンロードします。私が使った時はv0.3.0でした。
- ダウンロードしたzipファイルを解凍するとpacksquash.exeが出てきます。packsquash用に適当なフォルダを作っておき、そこに入れておきます。
- ここ(直ダウンロードリンク)からGStreamer v1.18.xをダウンロードし、インストーラーを起動してインストールさせます。
- Winキー+Rキーで
ファイル名を指定して実行
を開いて、%windir%\System32\SystemPropertiesAdvanced.exe
を入力してOKします。 システムのプロパティ
ウインドウの詳細設定が表示されるので、ウインドウ下部の環境変数...
をクリック。- 環境変数ウインドウには上下それぞれ
○○○(ユーザー名)のユーザー環境変数
とシステム環境変数
がありますが、上側のユーザー環境変数のリストにある変数名Path
もしくはPATH
をクリックして青くしてから、編集
ボタンをクリック。 - 新規をクリックして
%GSTREAMER_1_0_ROOT_MINGW_X86_64%bin
を入力して、OK→OK→適用→OK。
これでWindowsでの環境構築は完了です。
macOSの人
- GitHubのReleasesページからPackSquash本体をダウンロードします。私が使った時はv0.3.0でした。
- ダウンロードしたzipファイルを解凍するとpacksquashが出てきます。packsquash用に適当なフォルダを作っておき、そこに入れておきます。
- macOSではGStreamerのインストールにHomebrewを使います。ない人はリンク先のインストールコマンドをターミナル.appで実行してインストールしてください。
- ターミナル(Homebrew)で
$ brew install gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad
を入力して実行するとGStreamerのインストールが始まります。 - 手順1でダウンロードしたpacksquashの実行権限を与えるために
chmod +x (ここにファイルパス)
をターミナルで実行します。
これでmacOSでの環境構築は完了です。
Option Filesの設定
以降はOS関係なく同じ作業になります。
PackSquashには圧縮方法を細かく決められます。決めるテキストファイルがOption Filesです。公式英語ガイド
このテキストファイルはTOML v0.5.0っていう方式らしく、拡張子は.toml
になります。
圧縮するフォルダの指定(必要最小限の設定)
PackSquashを使うには最低限、このOption Filesに圧縮するリソースパックのフォルダを指定させる必要があります。
pack_directory = 'C:\リソースパックのフォルダまで\のファイルパスを\ここに'
をコピペして(ファイルパスを書き換えてね)UTF-8の.toml
ファイルで保存するだけです。Option Filesのファイル名はpacksquash実行時に指定するので何でも問題ありません。
本題であるリソースパック.zipの解凍防止機能を付けたり、Optifine CITに対応したりするには追加でオプションを書き加える必要がありますが、初回はこのpack_directoryだけを指定した最低限で実際に圧縮してくれるか試すことでエラー防止にもなるのでおすすめします。
サーバーリソースパックに必要そうな設定は少し以下にまとめておきますが、本題は解凍防止なので圧縮ガチ勢の方は公式の英語ガイドを見て頑張ってください。(さぼり)
圧縮したリソースパックの出力先
指定したファイルパスに指定した名前で出力する設定。
output_file_path = 'C:\出力先\の\ファイルパス\リソパ名.zip'
解凍防止の設定
本題の解凍防止設定です。というより解凍にどれだけ再現性を持つか(?)の設定です。pedantic、high、balanced、disregardの4種類がありますが完全に解凍不可にする場合はdisregardを使います。
少し試した感じではWindowsのエクスプローラー、MacのFinder、そこらへんのフリーの解凍ソフトあたりではエラーを起こして解凍できませんでした。完全に100%防ぐわけではないらしいのでそこは諦めましょう。
disregardの場合
zip_spec_conformance_level = 'disregard'
Optifine Custom Item Textures (CIT)のファイルに対応させる
標準設定ではOptifine CITのファイルは無視されて圧縮されません。
今の所allow_modsの設定で使えるのはOptiFineだけのようです。
allow_mods = ['OptiFine']
もふくらふとのサーバーリソースパックで使っている設定テンプレ
(公式ガイドのComplex options fileをいじったもの)
# Lines that start with # are comments, and PackSquash ignores them.
# You can also start a comment in the middle of a line with #, that
# spans until the end of the line
# Global options
pack_directory = 'C:\ファイルパス\pack'
output_file_path = 'C:\ファイルパス\pack.zip'
recompress_compressed_files = true
zip_compression_iterations = 255
automatic_minecraft_quirks_detection = true
# The value of this option is ignored due to automatic quirk detection
# being enabled, but this usually does not matter
work_around_minecraft_quirks = [ ]
allow_mods = ['OptiFine']
skip_pack_icon = false
validate_pack_metadata_file = true
ignore_system_and_hidden_files = false
zip_spec_conformance_level = 'disregard'
# These two are actually ignored due to the ZIP spec conformance level
size_increasing_zip_obfuscation = true
percentage_of_zip_structures_tuned_for_obfuscation_discretion = 100
never_store_squash_times = true
# System dependent values. Use them as-is only if you have a good reason,
# not just because you have copied and pasted this options file
threads = 16
spooling_buffers_size = 128 # MiB
open_files_limit = 256
# Per-file options below
# Ogg files do not get transcoded
['**/*?.ogg']
transcode_ogg = false
# Lossless music files get pitch shifted and compressed with good quality
['**/*?.{flac,wav}']
channels = 2
sampling_frequency = 44100
target_pitch = 1.5
minimum_bitrate = 64000
maximum_bitrate = 128000
# JSON files with comments get prettified and nothing is removed from them
['**/*.jsonc']
minify_json = true
delete_bloat_keys = true
# Compress textures losslessly no matter what. Keep them small
['**/*.png']
image_data_compression_iterations = 255
color_quantization_target = 'none'
maximum_width_and_height = 2048
skip_alpha_optimizations = false
# Don't minify shaders
['**/*.{fsh,vsh}']
minify_shader = false
# Don't minify properties files
['**/*.properties']
minify_properties = false
PackSquashの圧縮実行
Option Filesを作ったら、いよいよ圧縮を行います。
Windowsはコマンドプロンプト、macOS(とLinuxも?)はターミナルを開いて、
C:\PackSquashのあるファイルパスを指定\packsquash.exe C:\Option Filesのあるファイルパスを指定\ファイル名.toml
を入力しEnterで圧縮が始まるはずです。
ちなみに、もふくらふとのリソースパックを圧縮する時、見た目は.pngだが実際には.jpegの画像ファイルでエラーを起こして失敗したことがあります。
コメント
素晴らしい