M1 Macで軽いForgeで遊ぶには
M1 Macで普通にForgeをやると、重いです。その原因はjavaがx86_64時代のものをRosetta経由で後生大事に使っているからです。当記事ではARMネイティブのjavaへの乗り換え、およびその副作用への対処について記述します。
ARM ネイティブのjavaの導入
なんでもいいですが、brew tap homebrew/cask-versions
からのbrew install --no-quarantine zulu8
が手っ取り早いでしょう。パッケージ管理システムを経由せずにインストーラをぶん回すのは避けたほうがいいです。アンインストールが面倒になります。
Prism Launcherの導入とjavaの切り替え
brew install --no-quarantine prismlauncher
です。ログインや起動構成はよしなにやってください。
javaの設定はグローバルな設定と起動構成ごとの設定があって、どちらもランタイムへのパスを与える形になります。
私と同様の環境であれば、/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/bin/java
になるはずです。ダメな時は自動検出機能を使いましょう。
(M1 Macに限らずサードパーティのランチャーを使ったほうがいいです。生のForge・Fabricは本来の.minecraftをいじってしまうので、よほど気をつけて(全ての設定で外部のフォルダを設定して)いないとぐちゃぐちゃになります。)
副作用対策1: JNAライブラリの更新
javaがARMネイティブになったので、副作用でネイティブバイナリとしてx86_64しか積んでないライブラリは死にます。例えば1.12.2であれば、JNAライブラリが死にます。これを上のバージョンのものに入れ替えて延命します。
起動構成のバージョンからMinecraftを選択して、カスタマイズを押すと編集ができるようになります。適当なエディタでnet.minecraft.jsonが開かれるので、交換するライブラリに関する記述を探します。JNAであれば、こんな感じです。
...
{
"downloads": {
"artifact": {
"sha1": "cb208278274bf12ebdb56c61bd7407e6f774d65a",
"size": 1091208,
"url": "https://libraries.minecraft.net/net/java/dev/jna/jna/4.4.0/jna-4.4.0.jar"
}
},
"name": "net.java.dev.jna:jna:4.4.0"
},
{
"downloads": {
"artifact": {
"sha1": "e3f70017be8100d3d6923f50b3d2ee17714e9c13",
"size": 913436,
"url": "https://libraries.minecraft.net/net/java/dev/jna/platform/3.4.0/platform-3.4.0.jar"
}
},
"name": "net.java.dev.jna:platform:3.4.0"
},
...
これをARM対応しているものに置換します。上のバージョンのダミーの起動構成から探して、剥いでくると良いでしょう。再びJNAで例を示すと、こんな感じです。
...
{
"downloads": {
"artifact": {
"sha1": "7cf4c87dd802db50721db66947aa237d7ad09418",
"size": 1756400,
"url": "https://libraries.minecraft.net/net/java/dev/jna/jna/5.10.0/jna-5.10.0.jar"
}
},
"name": "net.java.dev.jna:jna:5.10.0"
},
{
"downloads": {
"artifact": {
"sha1": "fbed7d9669dba47714ad0d4f4454290a997aee69",
"size": 1343495,
"url": "https://libraries.minecraft.net/net/java/dev/jna/jna-platform/5.10.0/jna-platform-5.10.0.jar"
}
},
"name": "net.java.dev.jna:jna-platform:5.10.0"
},
...
もし他にもネイティブバイナリ原因で不具合を起こすライブラリがあれば報告してください。検出方法としては、ターミナルを開いてlibrariesフォルダに行き、以下のワンライナーを実行してみてください。
jarファイル名と内部に持つバイナリファイル名が列挙されるので、M1 Macに対応してなさそう(darwin or macとarm or aarch64を名前に含むバイナリがない)時は露見していないだけで壊れている可能性があります。(より正確な判定にはlipoでアーキテクチャを見ればいいです。)
for i in ./**/*.jar;do if jar tf "$i"|grep -e "\.dll$" -e "\.so$" -e "\.dylib$" -e "\.jnilib$" >/dev/null;then echo $i; jar tf "$i"|grep -e "\.dll$" -e "\.so$" -e "\.dylib$" -e "\.jnilib$" |sed -e "s/^/ /g"; fi;done
(本当はLWJGLが爆死するのですが、Prism Launcherは自動で置換してくれます。神に感謝。)
副作用対策2: mod内のバイナリの置換
これは正直無理です。これができるならmodが作れます。一応手段を書いておくと、著名なmodは基本オープンソースなのでそれを落としてきて、自前で再コンパイルして出てきたjarを使えばいいです。
なぜ無理かというと、そもそも自前でコンパイルする作業のハードルが高いのに加えて、旧バージョンのmodは更新が止まっていることが多く、(1)OSのアップデートに対応していない(2)開発環境(gradleなど)のバージョンアップに対応していないからです。それを自力で修正できるのならあなたにはmodを作る能力があります。
githubで公開されている場合、もしかすると物好きな人がforkしてARM対応してくれている可能性もあるのでやりたい人は見逃さないように。
検出自体は簡単で、上のワンライナーをmodsフォルダでやるだけです。