chakokuのブログ(rev4)

テック・コミック・DTM・・・ごくまれにチャリ

Raspberry Jam MOD を入れる→このアプローチはやめる

やりたいこと:PythonMinecraftを制御したい。そのためRaspberry Jam MODを入れる
問題点:Minecraft 1.12.2まで落とす必要があるようだ。ランチャーから1.12.2を起動したがクラッシュする。原因不明(ログが見当たらない)
結論:Raspberry Jam MODを入れるアプローチではなく、mcrcon等によるリモートからコマンドを送信する経路を活用してプログラム制御を実現したい

あまりバージョンの整合性とか分かっていないのだが、、次にJam MODを入れる。GitHubからJam MODを落としてくる。バージョンの整合性を考慮する必要があるらしいが、、とりあえず最新版を落とす。

Releases · arpruss/raspberryjammod · GitHub
0.94の、mods.zip , python-scripts.zipを落としてみる

modsフォルダを展開すると、1.12.2 , 1.12.1 ... 1.10までフォルダに分かれている。バージョンごとに何かが存在するということか。。先人の手順を読むと、それぞれ以下の作業をすると

  1. modsを展開して作成されたフォルダ内のRaspberryJamMod.jarをForge配下のmodsフォルダにコピーする、
  2. mcpipyを展開して生成されたmcipyフォルダをまるごと、Forge配下のフォルダにコピーする

あまり確認せずにForgeを入れたので、Forgeが管理するフォルダがどこなのか分からず。。

% pwd
/Users/##_user_id__##/Library/Application Support/minecraft/versions

% ls -F
1.19.2/				22w43a/				version_manifest_v2.json
1.19.2-forge-43.1.1/		22w44a/

% ls -F 1.19.2-forge-43.1.1 
1.19.2-forge-43.1.1.jar		1.19.2-forge-43.1.1.json

場所はあってそうだが、他の人のブログに書かれているコピー先のmodフォルダがないのだが。。なかったら作ればいいのだろうか
Finderでmodsフォルダを作成して、、以下のような操作で、1.12.1用のModをコピー

% cd mods
% cp ~/Downloads/mods/1.12.2/RaspberryJamMod.jar .

mcpipyは展開したフォルダをまるごとforge管理フォルダにコピーするとのことで、cp -r でコピー

 % cp -r ~/Downloads/mcpipy  .
 % ls -F
1.19.2-forge-43.1.1.jar		mcpipy/
1.19.2-forge-43.1.1.json	mods/

こんな感じだが、、他の人のフォルダとかなり違っていて(configフォルダとかそういったのも無いのだが。。)、正しくForgeが入っているのかかなり疑問

Minecraftを起動して、Mod一覧を確認したが、RaspberryJamModは入っていない。Open mods folderからmodsフォルダを開いてもフォルダ内が空である。だから、、自分が入れたForgeが管理している場所は、上記ではない別の場所ではなかろうか。Finderで開かれているmodsフォルダはフルパスが表示されていないので、どこが正しい管理フォルダなのか特定できず。力業で、findコマンドでルートからmodsを探してみる。 Forgeを入れた後のMinecraft起動手順もちょっと抜けがあるように思える。MacOSは普段使っていないので作法がよくわからん。。
findで全検索した結果、もう一つのmodは以下であった。Open mods folderで開かれたフォルダも以下であった。こっちはconfigフォルダとか揃っていて、管理されているようだ。だが、Forgeが管理するフォルダではないので、Forgeがまともに動いていないということではないか。あるは、Forgeが動くようにMinecraftを起動していないか(起動時はModが動いているからリスクがあっても知らんとか言われたのだけど)

/Users/##_user_id_##/Library/Application Support/minecraft/mods

Forgeを入れた後にやるべきことを再確認したほうが良さそうだ。
よく分からんが、Forgeを選んでPlayを押してみる。
状況は変わらない

他人の記事を見ていると、Forgeの起動構成の編集から、ゲームディレクトリを指定する手順が書かれているので、Forgeが入っているフォルダを入力。自分の場合配下

/Users/##_user_id##/Library/Application Support/minecraft/versions/1.19.2-forge-43.1.1

上記設定でゲームを起動すると、他の人が書いてるようなフォルダ構成になったので(modフォルダが作成されて中が空)、この状態でもう一度コピーをして試す。

今気づいたのだが、、JamModが対応するバージョンは、1.12.2までなのだろうか? Pythonプログラミングする場合、Minecraftのバージョンを1.12.2まで下げる必要がある??

分かった事

  • PythonMinecraftを制御するには、Raspberry JAM MODが必要
  • Raspberry JAM MODはMinecraft 1.12.2に対応
  • 上記より新しいMinecraftには対応していない
  • MODとMinecraftのバージョンを合わせる必要あり(1.12.2)

ランチャーの起動構成で、1.12.2を指定することで、1.12.2をダウンロードして実行することができる。だが、、起動時にJavaRuntimeが無いと怒られる。やっぱりちゃんとJavaを入れないとだめなんだろう。そもそもJavaRuntimeって、java.exe的なやつでいいのか、それともJava一式が入ってるディレクトリを指定するのか。。その辺もよくわからん。FlutterでAndroid用にBuildもしていたので、自分のMacのどこかにJDKが入ってるはずなのだが。

Javaについてこれまで適当にごまかしてきたけど、自分で改めてJavaを入れてみる。ARM64用のJavaがAZULで提供されているとのことで、それを入れてみる。
Java Download | Java 7, Java 8, Java 11, Java 13, Java 15, Java 17, Java 19 - Linux, Windows & macOS

分かりやすいように、tar+gzip形式のパッケージを落として、/usr/local/java 等を作ってそこに入れてみる。
以下のように/usr/local/java配下に入れた。 で、、Runtimeが無いと怒られる時に何を指定するのが正しいのか・・

% cd /usr/local
% sudo tar xvfz ~/Downloads/zulu19.30.11-ca-jdk19.0.1-macosx_aarch64.tar.gz
% sudo ln -s zulu19.30.11-ca-jdk19.0.1-macosx_aarch64  ./java
 % /usr/local/java/bin/java --version
openjdk 19.0.1 2022-10-18
OpenJDK Runtime Environment Zulu19.30+11-CA (build 19.0.1+10)
OpenJDK 64-Bit Server VM Zulu19.30+11-CA (build 19.0.1+10, mixed mode, sharing)

% /usr/local/java/bin/java
使用方法: java [options] <mainclass> [args...]
           (クラスを実行する場合)
   または  java [options] -jar <jarfile> [args...]
           (jarファイルを実行する場合)
   または  java [options] -m <module>[/<mainclass>] [args...]
       java [options] --module <module>[/<mainclass>] [args...]
           (モジュールのメイン・クラスを実行する場合)
   または  java [options] <sourcefile> [args]
            *略*

どうやら、Javaランタイムとは、/usr/local/java/bin/java の実行形式を指すようであった。一方、それを指定して1.12.2を起動すると、ランタイムが無いと怒られることは無くなったが、MinecraftについてきているJavaと互換性がないと怒られた。だから、、環境設定では、ランチャーのJavaを指定する必要があるのか??

付属のJavaランタイムと言ってくるのだが、ランチャーのJavaを指定しても同じように怒られる。多分、、1.12.2に同梱されているJavaを使えということかと想像

$  ~/Library/Application\ Support/minecraft/runtime/java-runtime-gamma/mac-os-arm64/java-runtime-gamma/jre.bundle/Contents/Home/bin/java

Javaランタイムの欄を消すと、ファイルのDLに失敗しましたと怒られる。ただ、、メッセージが、valid version of the Java runtimeといってるので、、DLの時点でもバージョン不整合が起きている(本来必要となるバージョンのJavaが存在しない)ということか?? ちょっとぐぐると、Java8を入れろという書き込みが。Java8を入れてもパスはどうするのか?? 1.12.2のパス設定でJava8の bin/javaを指定するということ??

前回落としたのはJava19だったようで、同じサイトからJava8(TLS)が落とせるようであった。今回も/usr/local/に入れてみる。

%  cd /usr/local
%  sudo tar xvfz ~/Downloads/zulu8.66.0.15-ca-jdk8.0.352-macosx_aarch64.tar.gz
%  sudo ln -s zulu8.66.0.15-ca-jdk8.0.352-macosx_aarch64  ./java8
% /usr/local/java8/bin/java -version
openjdk version "1.8.0_352"
OpenJDK Runtime Environment (Zulu 8.66.0.15-CA-macos-aarch64) (build 1.8.0_352-b08)
OpenJDK 64-Bit Server VM (Zulu 8.66.0.15-CA-macos-aarch64) (build 25.352-b08, mixed mode)

環境設定のJavaRuntimeのところで、/usr/local/java8/bin/java を指定、起動してみる。。途中までは進むが落ちた。

Raspberry Jam MODを入れるために1.12.2を動かそうとしているが、クラッシュして動かない。Jam MODも数年前から更新が止まっている様だ。。だったら、、Forgeの上で動く小さい俺MODを作ったらどうだろうか。。MODを作るための言語が何なのか分からないが。。

Forge上で動くMODを作るにはJavaを使うようだ。
Tutorials/Creating Forge mods – Minecraft Wiki
Mod開発 - Minecraft with Code Project
[Java]MinecraftのModを作成しよう 1.14.4【入門編】 - Qiita
Gradleとは何者?インストール方法〜使い方までわかりやすく解説 | プログラミングを学ぶならトレノキャンプ(TRAINOCAMP)

Forge上で動作するMODを作るには、JDKと Forge SDK(?)とビルドするためのGradleが必要と分かった。まずは表示だけの素のMODをビルドしてみたい。IDEが苦手なので、できるだけCUIでビルドしたいのだが。

苦労なくPython / Minecraftを動かしたいなら、RaspberryPy上で稼働するJava版のMinecraftを使う手がある。このアプローチは面白いのだろうか。。

Minecraftにはサーバ版が用意されていて、マルチユーザの場合はサーバにつないでPlayするらしい。だとすると、世界を管理するデータはサーバ側で行われていると。だったら、、MODはサーバ側に入れるというか、、サーバ上で管理される世界(ワールド?)に手を加える方が、Client側は素のMinecraftで来られるからいいのでは?と思えるのであった。
サーバはAPIが用意されていて、サーバのメンテナンスが行えるらしい。mcrconというライブラリでMinecraftサーバと通信して制御できるらしい。この内容がブロックを並べたり地形を変えたりといったRaspberry Jam MODと同じような内容なら、無理くりClient側にMODを入れなくても済む。何ができるか?はMinecraftWiki にあるらしい。

分からないことだらけなのだが、、Minecraftはチートモードにするとコマンドが打ち込めるらしい。打ち込み方として、画面から打ち込む以外にファイルを作って読み込ませたり、TCPのポート接続でも送れるらしい。だったら、Python等のスクリプトでコマンド文字列を作成してTCP接続で送り込むことでPythonプログラミングと言えるのではなかろうか。。
mcrconとはMinecraftのリモート操作用Clientらしくmcrconを使うとマイクラサーバにコマンドを送れるらしい。この送れるってのが、Stop/Start等のサーバ管理用だけなのか、マイクラのチートコマンドまで送れるのか分からない。

C# で Minecraft プログラミングを始めよう!
Minecraft Japan Wiki
マイクラ(マインクラフト)攻略Wiki|ゲームエイト
C#でマイクラ統合版にコマンドを送信してみよう