このページでは、世界的に人気なゲーム「Minecraft」の内部でスクリプトを実行する方法についてまとめています(PCのJava版を想定)。
Minecraft内でスクリプトやプログラムを実行する方法
・はじめに
・方法①:function機能を用いる
☞フォルダのパスが分からない時
・functionファイルを作成~実行
・方法②:Raspberry Jam Modを利用する
・方法③:GUI制御
はじめに
Minecraftでは「コマンド」という操作が可能です。これはコマンドライン(チャット欄)でスラッシュから始まる一連のコマンドを実行できる機能です。これを上手く使えば建築や整地が大幅に省力化できます。ただ、複数のコマンドをいちいち入力するのは面倒なので、スクリプトとしてまとめて実行できると便利です。そこで、Minecraft内でスクリプトを呼び出して実行する方法について考えてみます。
まず、MODを利用するかしないかで大きく2つの方法に分けられます。
方法①:function機能を用いる
方法②:Raspberry Jam Modを利用する
方法③:GUI制御(非推奨)
function機能というのはMinecraftに標準搭載されている機能で、スクリプトを呼び出して実行することのできる機能です。まさに今、私たちが求めている機能ですね。
「Raspberry Jam Mod」は拡張MODの一つで、Minecraft内部からPythonのスクリプトを実行できるというものです。これを利用するにはForgeを導入してMOD環境を整える必要があります。また「Raspberry Jam Mod」は2021年現在、1.13以上のバージョンに対応していません。これはやや難点と言えます。
それから、最終手段としては別プログラムによるGUI制御でコマンドのタイピングを自動化するというのも考えられます。ただ、これは色々と遠回りなので今回は詳しく紹介しません…。
方法①:function機能を用いる
現在知られている最も素直な方法は「function機能」を用いる方法です。準備のためにfunction機能を使いたいワールドのフォルダを開いて下さい。minecraftフォルダの階層構造は以下のようになっています。
» フォルダのパスが分からない時
MinecraftのフォルダはWindowsの場合だと [C:\Users\(ユーザー名)\AppData\Roaming\.minecraft\] といったパスになっているはずです。
なお、フォルダのパスは以下のように [設定] > [リソースパック] > [パックフォルダーを開く] としてMinecraftのゲーム起動後に確かめることもできます。
[パックフォルダーを開く] をクリックすると該当するフォルダのエクスプローラーウィンドウが立ち上がります。
» 閉じる
ワールドのフォルダ以下に次のような階層構造になるようフォルダを作成していきます。
まず、ワールドのフォルダ内にある「datapacks」の中に適当な名前のフォルダを作成します。今回は例として「script」という名前のフォルダを作成することにします。名前は「script」でなくても適当でOKです。
その中に「pack.mcmeta」という名前のファイルを作成し、以下の中身をコピペして下さい。メモ帳で作成する場合はファイルの種類を「すべてのファイル」にしてから保存しましょう。
{ "pack": { "pack_format": 1, "description": "datapack" } }
※拡張子が「.txt」ではなくちゃんと「.mcmeta」になっていることを確認すること。
これが終わったら、「scriptpacks」という名前のフォルダ(この名前も適当でOK)を作成して、さらにその中に「functions」というフォルダを作成します。
functionファイルを作成~実行
例として次のようなfunctionファイルを作成し、「test.mcfunction」という名前で functions フォルダ内に保存して下さい。コマンドの先頭にはスラッシュを付けますが、スクリプトの中ではスラッシュは不要です。
say Hello! say I'm happy to see you! say How are you today?
※なお、既にMinecraftを起動してワールドに入った後にfunctionを編集した場合は、\reload コマンドを実行すれば functions フォルダが再読み込みされます。
それでは実際に実行してみましょう。ワールドに入って
/function [④で作ったフォルダ名]:[functionファイル名]
とすればスクリプトを実行できます。今回は
/function scriptpacks:test
のようになります。拡張子の「.mcfunction」の部分は不要です。
ちゃんと実行できていますね!
他にも例えば、以下のスクリプトを実行すると「x方向、z方向に10マス、高さ3マスのブロックを破壊(アイテム化)してプレイヤーの座標にテレポートさせる」という一連の操作が一回のコマンドで実行できます。
fill ~ ~ ~ ~10 ~3 ~10 minecraft:air destroy tp @e[distance=..15,type=item] @p
また、次のようなfunctionでは(x方向に)ゴーレム10体を一瞬で作成できます。
fill ~1 ~ ~ ~10 ~1 ~ minecraft:iron_block fill ~1 ~1 ~1 ~10 ~1 ~1 minecraft:iron_block fill ~1 ~1 ~-1 ~10 ~1 ~-1 minecraft:iron_block fill ~1 ~2 ~ ~10 ~2 ~ minecraft:carved_pumpkin
このようにして様々な処理を連続的に、かつ一瞬で実行できるのがスクリプトの魅力です。整地やアイテム回収だけでなく建築などにも応用できます。
方法②:Raspberry Jam Modを利用する
Pythonのスクリプトを実行するには「Raspberry Jam Mod」というMODを導入します。このMODはGitHubで公開されており、こちらのページからダウンロードすることができます(最新版は0.94)。他のMODと同じようにmodsフォルダに入れれば利用できます。MODの入れ方については「MinecraftにMODを入れる方法」のページを参照して下さい。
ただし注意点として、このMODはMinecraft1.12.2までしか対応していません。より新しいバージョンのMinecraftでスクリプトを実行したい場合は、この方法が使えないので注意する必要があります。1.13以降のバージョンについては正規の方法である方法①がお勧めです。
ネット上に解説記事が多数転がっているので、どれかを適宜参考にして頂ければと思います。MODを入れる手順自体は普通のMODと変わりません。
方法③:GUI制御
最終手段として、MinecraftのウィンドウをGUI制御する方法があります。例えばPythonの環境がある場合、「PyAutoGui」というPythonのGUI操作自動化モジュールを使ってキーボードやマウスの操作をプログラムから実行できます。
管理人は以前、PyAutoGuiを使ってとある放置型オンラインゲームの日課(ログインボーナスなど)を自動化したことがあります。しかし画像処理やウィンドウ幅、スクロールの制御など色々と設定が面倒なのでお勧めできる方法ではありませんし、慣れていないとプログラムのコーディングに時間が掛かるため確実に不毛な作業を強制されます。もし挑戦されるという方は止めませんのでどうぞ頑張って下さい…。