Open11

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

NoboNoboNoboNobo
Dockerfile
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

ここを開いて、「試す!」を押す。
https://manaviva.github.io/scratch-gui/

左下の「拡張機能を追加」ボタンから、「Micraming」を追加。
あとはJava版MineCraftの1.12.2版を手元で起動し、
マルチプレイヤーにてサーバー127.0.0.1に接続する。

このあとはScratchにて

などしてみるとチャットメッセージが飛んでくる。

NoboNoboNoboNobo

バージョン指定のJava Editionの起動方法

Minecraft Launcherにて、
Java Editionの起動構成に新規追加で1.12.2を選択したものを用意する。

で、これを起動する(初回警告アリ)。

NoboNoboNoboNobo

構成について

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

NG手法

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

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のプロファイルを作ろう。

NoboNoboNoboNobo

RaspberryPi OSは64bits版を入れておけばDockerがインストール可能で、
必要なDockerイメージは公開済みなので以下のコマンドで動くかも?
arm64版のイメージもあとでpushしておこう。

docker run -it --rm -p 25565:25565 -p 14711:14711 \
    --name raspjam nobonobo/mc-forge
NoboNoboNoboNobo

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

NoboNoboNoboNobo

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

NoboNoboNoboNobo

https://qiita.com/panda531/items/a6dfd87bd68ba2601793
こちらの方が1.16.5まで対応してる!

Modはここ。「Remote Control from Scratch」で検索すれば見つかる。
https://www.curseforge.com/minecraft/mc-mods/remote-controller/files/3357426

  • 14711ポートが生ソケットによる制御用
  • 14712ポートがWebSocket用

後者はScratchからアクセスするためのもの。
Minecraft1.16.5専用のScratchはここで公開されています。
https://takecx.github.io/scratch-gui/1-16-5/

接続先を選択可能なので別のPCから制御もできる。
AllowInsecureWebsocketFromHTTPSOriginというフラグは廃止になったので無理。
なのでローカルで立てるしかなさそう。

https://github.com/takecx/scratch-gui