[Minecraft] Pythonスクリプトを動かしてみよう!

Minecraft

Minecraft上でPythonスクリプトを動かすための準備をまとめています。
使用するModのバージョン縛りがあったり、Pythonバージョンによってエラーになってしまったりと
色々試したところもありますので、そのあたりも含めていますので参考になればと思います。

はじめに

本ページは2024年10月時点での情報となります。
各ソフトウェアのバージョンを記載しておきますが、バージョンによっては対応方法が異なりますので、ご注意ください。
Modを利用する関係から、PC版のJavaエディションでのみしか動作せず、Nintendo SwitchなどのBedrockエディション(統合版)には対応していません。

  • OS:Windows 11
  • Pythonバージョン:3.13.0
  • Minecraftバージョン:1.21.1 (実際にはMinecraft Forgeバージョンに依存して1.12.2で動作)
  • Javaバージョン:1.8.0_431
  • Minecraft Forgeバージョン:1.12.2 (Raspberry Jam Modバージョンに依存)
  • Raspberry Jam Modバージョン:0.94 (2018年で開発が止まっており、対応しているMincraftバージョンが1.12.2までとなっている)

Pythonコードを動かすための準備

Minecraft上でPythonコードを動作させるために以下のインストールが必要です。

Pythonインストール

Minecraft上からPythonを実行するため、事前にPythonをインストールしておく必要があります。
こちらからWindows版のPythonをダウンロード、および、インストールします。

現時点では3.12よりも前のバージョンはインストールすることができなくなっています。

python-3.13.0-amd64.exeがダウンロードされますので、ダブルクリックしてインストール画面を起動します。
インストール画面の「Add python.exe to PATH」にチェックを入れ、Install Nowをクリックします。

インストールが完了したら、Closeをリックします。

Windowsメニューにあるターミナルから意図したPythonバージョンになっているかを確認します。
ここでは3.13.0が出力されれば問題ありません。

PS C:\Users\xxxxxxxx> python
Python 3.13.0 (tags/v3.13.0:60403a5, Oct  7 2024, 09:38:07) [MSC v.1941 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

Minecraft Java Editionインストール

Minecraftをインストールします。
Windowsの場合はこちらの画面に従ってインストールできます。

Javaインストール

Minecraft Forgeを動作させるためにJavaが必要となります。
Javaがインストールされているかは、Windowsメニューにあるターミナルから以下で確認可能です。
CommandNotFoundExceptionが発生した場合はインストールされていません。

PS C:\Users\xxxxxxxx> java -version
java : 用語 'java' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません
。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してくださ
い。
発生場所 行:1 文字:1
+ java -version
+ ~~~~
    + CategoryInfo          : ObjectNotFound: (java:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

インストールされていない場合は、こちらからダウンロード&インストールを行います。
下記の画面からDownload Javaをリックします。

jre-8u431-windows-x64.exe といったファイルがダウンロードされますので、ダブルクリックで実行します。
インストーラが起動しますので、インストールをクリックします。

正常にインストールが完了したことを確認して、閉じるをクリックします。

正しくインストールされたことをWindowsメニューにあるターミナルからも確認します。

PS C:\Users\xxxxxxxx> java -version
java version "1.8.0_431"
Java(TM) SE Runtime Environment (build 1.8.0_431-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.431-b10, mixed mode)

Minecraft Forgeインストール

Minecraft ForgはRaspberry Jam Modを動かすための前提となるModです。
まずはこちらからソフトウェアをダウンロードします。
1.12.2のバージョンは2種類ありますが、Recommendedの方のInstallerをクリックします。

ダウンロードページが分かりづらいですが、少し時間が経つと画面右上にSKIPが表示されますので、こちらをクリックします。
画面下部のDownloadリンクなどをクリックすると関係ないソフトウェアがダウンロードされますのでご注意ください。

forge-1.12.2-14.23.5.2859-installer.jar がダウンロードされますので、ダブルクリックします。
Install clientにチェックを入れ、OKをクリックします。

インストールが完了したことを確認してOKをクリックします。

Raspberry Jam Modインストール

こちらからRaspberry Jam Modをダウンロードサイトにアクセスします。
mods.zip(Mod本体)とpython-scripts.zip(Minecraft上で実行できるPythonコード集)をダウンロードします。

mods.zipを展開するとバージョン毎のRaspberryJamMod.jarが存在します。
今回は1.12.2フォルダ配下のRaspberryJamMod.jarをMinecraftフォルダにコピーします。

コピー先については、まずWindowsキー+Rキーで「ファイル名を指定して実行」から、「%appdata%\.minecraft」を指定して実行します。
(デフォルトだとC:\Users\xxxxxxxx\AppData\Roaming\.minecraftになっていると思います)

対象のフォルダが表示されますので、そのフォルダ内の「mods」フォルダにコピーします。
「mods」というディレクトリが存在しなければ、作成した上でRaspberryJamMod.jarをコピーします。

次にpython-scripts.zipについては、展開するとmcpipyフォルダが作成されます。
このフォルダ内にサンプルスクリプトが格納されています。
こちらも「%appdata%\.minecraft」を指定したフォルダ(デフォルトではC:\Users\xxxxxxxx\AppData\Roaming\.minecraft)に、フォルダごとコピーします。

Minecraft起動

Minecraft Launcherを実行すると、Javaエディションの起動構成タブにforgeが現れますので、プレイをクリックします。

警告が表示されますが、プレイをクリックします。
二度と警告をさせない場合はチェックボックスにチェックします。

Minecraftが起動しますので、Singleplayer→Create New Worldと進んでワールドを作成しておきます。

スクリプト改修

Python 3.10リリース時にビルトインパッケージに変更が加わっており、サンプルのPythonコードでエラーが発生する事象に遭遇しました。
原因としては、Python 3.9まではcollectionsモジュールにIterable属性が存在していたのですが、3.10からは互換性がなくなってしまい、エラーが発生している状況でした。

Minecraftの実行ログから確認しています。

[Server thread/INFO] [STDOUT]: [mobi.omegacentauri.raspberryjammod.ScriptExternalCommand:func_184881_a:275]: Running mcpipy\helloworld.py
  :
[Client thread/INFO] [net.minecraft.client.gui.GuiNewChat]: [CHAT] [ERR]   File "C:\Users\rmatsush\AppData\Roaming\.minecraft\mcpipy\mcpi\util.py", line 12, in flatten
[Client thread/INFO] [net.minecraft.client.gui.GuiNewChat]: [CHAT] [ERR]     if isinstance(e, collections.Iterable) and not isinstance(e, basestring):
[Client thread/INFO] [net.minecraft.client.gui.GuiNewChat]: [CHAT] [ERR]                      ^^^^^^^^^^^^^^^^^^^^
[Client thread/INFO] [net.minecraft.client.gui.GuiNewChat]: [CHAT] [ERR] AttributeError: module 'collections' has no attribute 'Iterable'

以下のサイトに「Iterator was moved from collections to collections.abc」という記載があり、サンプルのコードを修正することで対応可能です。

AttributeError: module 'collections' has no attribute 'Iterator' python 3.10 django 2.0
Hello its a clone project but when ı try "python manage.py makemigrations" ım getting this error how can ı fix it? requirements django==2.0 django-cke...

修正するスクリプトは%appdata%\.minecraftフォルダ配下の

  • mcpipy\mcpi\util.py
  • mcpipy\mcpi\vec3.py

この2ファイルです。
修正するまえにファイルをコピーしてバックアップを作成しておきましょう。

util.py修正

修正は単純でcollectionscollections.abcに置換するだけです。
2箇所存在します。

import collections.abc
import math
from sys import version_info

try:
    basestring
except NameError:
    basestring = str  # compatibility for Python 3

def flatten(l):
    for e in l:
        if isinstance(e, collections.abc.Iterable) and not isinstance(e, basestring):
            for ee in flatten(e): yield ee
  :

vec3.py修正

こちらもcollectionscollections.abcに置換するだけです。
2箇所存在します。

import collections.abc

class Vec3:
    def __init__(self, x=0, y=0, z=0):
        if isinstance(x, collections.abc.Iterable):
            self.x, self.y, self.z = tuple(x)
        else:
            self.x = x
  :

Pythonスクリプト実行

作成したワールドに入って「/py」を入力することでPythonスクリプトを実行することができます。

helloworld.py

%appdata%\.minecraft\mcpipyに含まれているhelloworld.pyを実行する場合は、「/py helloworld」と入力します。

画面上にメッセージとしてHello World!が表示されます。

castle.py

城を作る場合は「/py castle」と入力します。
自動でかなり大きな城が生成されます。

まとめ

いくつかのサイトを参考にして試してみたのですが準備が少し大変でした。
ただ、実行できるようになればMinecraftの世界でPythonを使えるようになりますので、実現したいことの幅が広がります。

コメント

タイトルとURLをコピーしました