僕は発展途上技術者

Scratch で Minecraft を動かす(その2) - Scrath と Minecraft をつなげよう

Scratch で Minecraft を動かす方法を何回かに分けて解説していきます。

前回のエントリーは、

» Scratch で Minecraft を動かす(その1) - Raspberry Pi なしで Minecraft API を使ってプログラミング

です。

[2016/2/21 追記] 現在 CraftBukkit はメンテナンスされなくなっており、下記リンク先からはダウンロードはできないのですが、アーカイブなどを保存しているサイトが他にあります。あくまで自己責任でこれらからダウンロードして利用する方法を含め、他の手順についても詳しく次の YouTube 動画で紹介されていますので良かったら参考にしてください。 → 6歳からのプログラミング #1 〜minecraft×scratch〜 CraftBukkitとRaspberryJuice

scratch2minecraft をダウンロード



Scratch と Minecraft をつなぐブリッジプログラム scratch2minecraft を書いたので、それをダウンロードします。

作業フォルダ(~/python)以下で


git clone git@github.com:champierre/scratch2minecraft.git


と実行してソースコードをダウンロードしてください。

git が使えない方は https://github.com/champierre/scratch2minecraft の右下の Download ZIP ボタンを押してダウンロードできる scratch2minecraft-master.zip を解凍してください。

なお scratch2minecraft はまだ絶賛開発中です。いまのところマインクラフト内のプレイヤーを任意の位置に移動させるのと、任意の位置にブロックを作ったり消したりしかできないですが、順次できることを増やしていくつもりです。

minecraft api のフォルダ mcpi をコピーする



前回のエントリーで用意した mcpi フォルダを scratch2minecraft フォルダ以下にコピーします。

mcpi は ~/python/minecraft 以下にあると思うので、ターミナルより


cp -r ~/python/minecraft/mcpi ~/python/scratch2minecraft/


と実行することで、コピーできます。

Scratch から Minecraft へ Hello World



いよいよ Scratch と Minecraft とをつなげてみます。

起動していなかったら、CraftBukkit サーバーを起動し、Minecraft を CraftBukkit に接続します。(前回のエントリー参照)

Scratch を起動し、遠隔センサー接続を有効にします。



scratch2minecraft のフォルダに移動し、


python main.py


を実行して、 scratch2minecraft を起動します。

このとき、Scratra -> Connected と表示されれば Scratch との接続成功ですが、Scratch で遠隔センサー接続を有効にし忘れたり、あるいは Scratch を起動する前に scratch2minecraft の方を先に起動してしまったりすると接続に失敗して無反応となってしまいます。

その場合は Ctrl + Z で suspend させてから、


ps auwx | grep main.py


で main.py のプロセス番号を調べて、そのプロセス番号を kill してからやり直してください。

接続が成功していれば、Scratch から Minecraft にメッセージを送ることができます。

Scratch で「hi を送る」ブロックを作り、クリックしてみましょう。



Minecraft のチャットウィンドウに hi minecraft と表示されれば成功です。



Scratch からの命令でブロックを積み上げる



次に Scratch からの命令でブロックを一つ置いてみます。

「setBlock を送る」ブロックを作り、クリックしてみましょう。



すると、プレーヤーが立っていた場所にブロックが一つ置かれます。

今度は、塔の形になるようブロックを縦に積み上げてみましょう。

その前に Minecraft の世界の座標系について簡単に説明しておきます。Minecraft の世界では平面上の位置はx軸とz軸との座標で表され、高さはy軸の値で表されます。たとえば、x=0 y=0 z=0 の位置にブロックが置いてあったとして、そのすぐ上にブロックを置きたければ x=0 y=1 z=0 の位置にブロックを置きます。そのすぐ真上に置きたれば x=0 y=2 z=0 という具合です。

つまり、縦にブロックを積み上げたければ、y の値をどんどん大きくしていきながらブロックを置き続ければいいのです。

さきほど Scratch からブロックを置くときには、「setBlock を送る」をおこなっただけでしたが、その前に Scratch の変数の x、y、z に値をいれれば、指定された値の座標にブロックを置くことができます。

座標を指定しながらブロックを積み上げるとして、まずはプレーヤーが今いる場所の座標を知っておく必要があります。

「getPos を送る」とプレーヤーの現在位置の座標がチャットウィンドウに表示されます。





x=24 y=8 z=13 ということなので、その場所にブロック100個分の高さの塔をつくるには、以下の通り Scratch でプログラムを組みます。

ここで少し注意が必要なのですが、「setBlock を送る」の後に少しの時間待つようにしないとうまく命令を送ることができません。ここでは「0.1秒待つ」のブロックを置いています。



実行してみましょう。

一瞬のうちに塔が。。



あまりに高いので少し遠くから眺めます。



手作業で積み上げるよりもずっと楽です。

ここまでの一連の作業を動画で記録しました。



次のエントリーではもう少し複雑なプログラムを作ってみます。

Scratch で Minecraft を動かす(その1) - Raspberry Pi なしで Minecraft API を使ってプログラミング

これから何回かに分けて Scratch で Minecraft を動かす方法を解説します。

まずは Mac 上で Python で動かすまでです。

API がオープンになっていて、Python でプログラミングできるのは Raspberry Pi 版の Minecraft のみなのですが、調べてみたら MOD を使うことによって Raspberry Pi 以外でもできることがわかりました。

» Running Python Programs without a Raspberry Pi…

に書かれているままではあるのですが、英語であるのと、あちこちリンク先の情報を参照しながら進めていかなければならなくて若干わかりにくいので、以下に各手順を示します。

なお、環境は MacOS 10.8.5 です。Windows あるいは Linux でもできるようですが、ここでは解説しません。

[2016/2/21 追記] 現在 CraftBukkit はメンテナンスされなくなっており、下記リンク先からはダウンロードはできないのですが、アーカイブなどを保存しているサイトが他にあります。あくまで自己責任でこれらからダウンロードして利用する方法を含め、他の手順についても詳しく次の YouTube 動画で紹介されていますので良かったら参考にしてください。 → 6歳からのプログラミング #1 〜minecraft×scratch〜 CraftBukkitとRaspberryJuice

必要なもの



- Minecraft と minecraft.net より購入した有料アカウント
- CraftBukkit サーバー
- Raspberry Juice プラグイン

CraftBukkit サーバーのインストール



- CraftBukkit サーバーのダウンロードページより CraftBukkit サーバーをダウンロードします。このとき、Minecraft のバージョン番号にあった Build を選ぶ必要があります。



- ダウンロードしたファイルの名前を craftbukkit.jar に変更します。

- CraftBukkit という名前でホームディレクトリなどにフォルダを作成し、craftbukkit.jar をその下に移動します。

- 同じフォルダ内に以下の内容で start_server.command という名前のファイルを作ります。



- ターミナルより chmod a+x を実行して実行権限を与えます。
- 必要なフォルダや設定ファイルが準備されるように、一度 start_server.command を実行しておきます。

Raspberry Juice プラグインのインストール



Raspberry Juice プラグインを CraftBukkit サーバーに入れることで、Minecraft をプログラムで動かせるようになります。

- Raspberry Juice プラグインのページの右メニューにある Download リンクよりたどっていって、最新版をダウンロードします。(このエントリーを書いた時点での最新版は v1.2)

- 先ほど起動した CraftBukkit サーバーを停止します。停止するには、CraftBukkit のコンソール上で stop と入力します

- CraftBukkit/plugins 以下にダウンロードした Raspberry Juice プラグインのファイル(raspberryjuice-1.2.jar) を移動します。

- もう一度 CraftBukkit サーバーを起動します。(start_server.command を実行)

- CraftBukkit のコンソール上で plugins と入力します。


>plugins
16:19:51 [???] Plugins (1): RaspberryJuice


のように RaspberryJuice が表示されていればインストール成功です。

Minecraft を CraftBukkit サーバーに接続する



- Minecraft を起動します。
- マルチプレイを選択します。
- CraftBukkit サーバーを登録するために、Add Server ボタンを押します。Server Name に CraftBukkit、Server Address には localhost と入力し、Done ボタンを押します。
- CraftBukkit サーバーが起動していれば、登録したばかりの CraftBukkit が選択できるようになっています。選択して「サーバーに接続」ボタンを押します。



- 正常に接続できれば、CraftBukkit サーバーのコンソールにログインした旨のメッセージが表示されます。

Python で書いたプログラムを実行する



- Minecraft API のライブラリが必要なので、Minecraft Pi Edition のページより Minecraft Pi をダウンロードします。



- ダウンロードしたファイルを解凍するため、ターミナルより tar zxvf minecraft-pi-0.1.1.tar.gz を実行します。

- 解凍したフォルダ内の mcpi/api/python/ 以下にある mcpi フォルダを作業フォルダの下にまるごとコピーします。(作業フォルダを ~/python/minecraft としたら ~/python/minecraft/mcpi)

- 以下のコードを ~/python/minecraft の下にコピーします(mcpi フォルダと同じ階層) 。ファイル名は sample.py にします。



- ターミナルより python sample.py と実行します。

- このプログラムは、minecraft の世界の中のプレイヤーが今いる場所の目の前にブロックを置く簡単なサンプルプログラムです。プロックが目の前に現れたら成功です。


以上、簡単なサンプルですが、Python でプログラムを書いて Minecraft を動かすところまでの手順です。

プログラムが書ければ、複雑な構造物なども一瞬で作れてしまいます。

また、ブリッジプログラムを書けば、Scratch から Minecraft を操作するといったこともできます。

それらの方法などもこれから順次紹介していきたいと思います。

2度目以降の vagrant up で chef-solo のレシピを実行する

vagrant のバージョンを 1.1.4 から 1.3.1 に上げたところ、どうも vagrant up のときの挙動が違う。

いままでは vagrant up するたびに chef-solo のレシピが実行されていたのが、1.3.1 になって最初の vagrant up のときにしか実行されなくなっている。

CHANGELOG を調べてみたら、1.3.0 よりそのように変更されていて、2度目以降でもあえてレシピを実行したい場合は


vagrant up --provision


のように --provision オプションをつけて vagrant up を実行するようになっていた。

レシピをいろいろいじっているうちは、頻繁にレシピをを実行する必要があるけれど、レシピが出来上がったあとは、そうそう実行する必要がないのでこの方が自然ということで納得。

プロフィール

株式会社まちクエスト代表、つくる社LLC代表。

Raspberry Piではじめる どきどきプログラミングを書きました。

Amazonから図書館検索 Libron、iPhoneアプリ ひらがなゲーム かなぶん を作っています。

Twitter @jishiha

最近のエントリー

アーカイブ