マインクラフトをScratchでコントロールするための環境構築手順

FROM openjdk:8u342-jre
# Update packages and install prerequisites
RUN apt update
RUN apt -y install unzip curl
# Download and install Minecraft Forge
RUN mkdir /bin/forge
WORKDIR /bin/forge
RUN curl -L https://maven.minecraftforge.net/net/minecraftforge/forge/1.12.2-14.23.5.2860/forge-1.12.2-14.23.5.2860-installer.jar -o /bin/forge/forge-installer.jar
RUN java -jar forge-installer.jar --installServer
RUN printf "#%s\neula=true" "\$(date)" > /bin/forge/eula.txt
# Download and install Raspberry Jam
RUN mkdir /tmp/RaspberryJamMod
RUN curl -L https://github.com/arpruss/raspberryjammod/releases/download/0.94/mods.zip -o /tmp/RaspberryJamMod/mods.zip
RUN unzip /tmp/RaspberryJamMod/mods.zip -d /tmp/RaspberryJamMod
RUN mkdir /bin/forge/mods
RUN cp /tmp/RaspberryJamMod/1.12.2/*.jar /bin/forge/mods/
EXPOSE 25565 14711
CMD ["java", "-jar", "forge-1.12.2-14.23.5.2860.jar"]
docker build --rm -t nobonobo/mc-forge .
docker run -it --rm -p 25565:25565 -p 14711:14711 --name mc-forge nobonobo/mc-forge
ここを開いて、「試す!」を押す。
左下の「拡張機能を追加」ボタンから、「Micraming」を追加。
あとはJava版MineCraftの1.12.2版を手元で起動し、
マルチプレイヤーにてサーバー127.0.0.1に接続する。
このあとはScratchにて
などしてみるとチャットメッセージが飛んでくる。

バージョン指定のJava Editionの起動方法
Minecraft Launcherにて、
Java Editionの起動構成に新規追加で1.12.2を選択したものを用意する。
で、これを起動する(初回警告アリ)。

構成について
- RaspberryJamModを含むMinecraftサーバーをDockerを使って起動しておく
- Minecraftサーバーは4711ポートからコントロール可能(Minecraft-Piの接続先)
- RaspberryJamModは14711ポートをリッスンし、4711ポートのTCP接続に中継する
- 指定バージョンのクライアントを手元にインストール
- クライアントからサーバーに接続してワールドに参加
- ScratchのWeb版はWebSocketを127.0.0.1:14711につなごうとする

NG手法
- 「Code Connection」は2023/11に配布終了のため利用できなくなりました
- 事実上BREでリモートコントロールはできない
- 公式のものは「Minecraft Education Edition」を利用することになるが360アカウント+年額5.04ドルが必要
- Minecraftのラズパイ向けはあるがMinecraftPi機能のみ提供(RaspberryJamModを入れられない?)

RaspberryPiにJava Editionインストールする手順
Pi-Appsというアプリをインストール。
wget -qO- https://raw.githubusercontent.com/Botspot/pi-apps/master/install | bash
Pi-AppsからMinecraft Java GDLauncherをインストール
起動して「Manual Setup」からJava8をいれて、Minecraft1.12.2のプロファイルを作ろう。

RaspberryPi OSは64bits版を入れておけばDockerがインストール可能で、
必要なDockerイメージは公開済みなので以下のコマンドで動くかも?
arm64版のイメージもあとでpushしておこう。
docker run -it --rm -p 25565:25565 -p 14711:14711 \
--name raspjam nobonobo/mc-forge

あれ、GDLauncherからバージョン指定でForge入れて、RaspberryJamMod.jarをmodsフォルダに投げ込むことでできちゃったかもしれん。
大事なのはJavaのバージョンを8u、mcのバージョン、RaspberryJamModそれぞれを1.12.2に合わせるというところだった。

あとRaspberryJamModは1.12.2対応を最後にその後アップデートが追従できていないのに注意。

こちらの方が1.16.5まで対応してる!
Modはここ。「Remote Control from Scratch」で検索すれば見つかる。
- 14711ポートが生ソケットによる制御用
- 14712ポートがWebSocket用
後者はScratchからアクセスするためのもの。
Minecraft1.16.5専用のScratchはここで公開されています。
接続先を選択可能なので別のPCから制御もできる。
AllowInsecureWebsocketFromHTTPSOriginというフラグは廃止になったので無理。
なのでローカルで立てるしかなさそう。

localhostオリジン相当のブラウザで動くGUIアプリを作った。
これなら別PCで動いてる「Remote Control from Scratch」に接続できる。
Modのリッスンポートが「localhost」なので繋がらないということが判明。
結局、Mod側にも手を入れました。