MinecraftとScratchを連携させる

小学校３年生の息子がマインクラフトとスクラッチにはまっているので、マインクラフトとスクラッチを連携させてもう少しプログラミングに興味を持ってもらおうと思います。

#まずは、ざっと連携のイメージ
マインクラフトはゲームで、スクラッチは子供向けのプログラミングツール？言語？なので、なかなか連携のイメージが分かりにくいと思いますが、この動画を見ると結構簡単に説明しています。
> 6歳からのプログラミング　#1 〜minecraft×scratch〜 CraftBukkitとRaspberryJuice
> https://www.youtube.com/watch?v=y4X3m4m9J_A

このサイトは全２回に分かれています。
まず、この動画を見ながら、この動画に沿ってやってみたのですが、いろいろと問題が起きました。
この動画が公開されているのが2013年で、今はすでに2016年なので、各プラグインなどのバージョンが古くなっていたりサービスが停止されていたりします。
なので、とりあえずこの動画からは簡単な連携のイメージを参考にさせていただくことにしました。
今回の連携のイメージは次の感じ
***
1. MODを導入するためにローカルにサーバを建てる
2. マインクラフトをpythonで動かせるようにMODを入れる
3. pythonとマインクラフトが連携できたら、pythonとスクラッチを連携
4. 「３」で連携できれば、マインクラフトとスクラッチが連携完了

***
ちなみに、この記事はMacが対象です。
ただ、多分、windowsも同じような感じだと思います。

##参考動画との乖離
参考にさせていただいた動画では、まず、CraftBukkitサーバを建てることになっていますが、craftBukitt自体がよくわかりませんでした。さらにMODを使ってpythonをマインクラフト上で動かせることが重要なので、次のサイトを参考にpython連携を設定しました。

>　Python coding for Minecraft
>　http://www.instructables.com/id/Python-coding-for-Minecraft/

#Forgeを導入
前記のサイトを見るとまずはForgeサーバをインストールする必要があるようです。
サイト内にではForge1.9までしか書いてないですが、すでに。1.10まで出ています。とりあえず、最新のバージョンをインストールしました。

##マインクラフト上のForgeを設定
[Forgeのダウンロード](http://files.minecraftforge.net/)をすると、インストラーがあるので、すかさずインストールします。
インストールが完了してマインクラフトを立ち上げて、プロフィールの設定を行います。新しくプロフィールを設定し、「Use version」から「release 1.8.9-forge1.8.9-11.15.1.1722」を選択します。マインクラフトの1.8.9が結構安定しているし、MODが一番対応しているのが1.8.9ぽいです。
この辺が紹介した動画と乖離が起きている点です。
さらに、「Game Directory」にチェックを入れてください。

> Forge Download
> http://files.minecraftforge.net/

#Pythonとの連携
サーバが立ち上がったところで次にPythonとマインクラフトを連携させたいと思います。
##Pythonのインストール
まずは、お使いのMacにPythonをインストールします。これは設定とかいらなかったと思うので、とても簡単です。
こちらから、Pythonのインストーラーをダウンロードして下さい。

>　Python download
>　https://www.python.org/downloads/mac-osx/

適当に一度くらいランチャーを立ち上げても良いかもしれないです。

##MODをインストール
次にマインクラフトとpythonを連携させます。これには「[Raspberry Jam Mod](https://github.com/arpruss/raspberryjammod/releases)」が必要ぽいです。このRaspberry Jamといのは何かと言うと実は、Raspberry piで動くマインクラフト（[Minecraft pi](http://pi.minecraft.net/)）が存在しているぽいです。というか、最初からマインクラフトとスクラッチがインストールされているぽいです。
てなわけで、もともとRaspberry Piではマインクラフトとスクラッチの連携が頻繁に行われていたようです。
ということで、Githubのサイトから「mods.zip」をダウンロードします。（多分、0.75.2がいいかもしれないです。0.75は「may not work great in 1.8」って書いてあるので、1.8ではあまりよく動かないポイです。
mod.zipを解凍してフォルダーを見ていくと、いろいろととバージョンが分かれています。そして、マインクラフトのバージョンにあった、フォルダーから「raspberryjammod.jar」をローカル内の「mods」フォルダーにコピペします。

###「mods」フォルダーはどこにある？
確か、最初の「Forge」を導入すると、このmodsフォルダーが次の場所にできたと思います。（あくまでも、Macの場合になります。）

>　ライブラリ/Application Support/minecraft/mods/

このフォルダ内に先述したファイルを入れます。
これで、pythonとマインクラフトが連携されたことになります。

##連携の確認
では、連携の確認をします。
「mods.zip」をダウンロードしたGithubから今度は「python3-scripts.zip」というファイルをダウンロードします。

> https://github.com/arpruss/raspberryjammod/releases
> python3-scripts.zipのダウンロード

解凍すると、「mcpipy」というフォルダが現れます。これを先ほどの「mods」フォルダにこのまま入れます。
これで確認の準備ができました。

マインクラフト上で確認するため、一番さいしょに作成したマインクラフトのプロフィールをForgeに設定して起動します。
起動後新規にワールドを作成します。わかりやすいように、クリエイティブモードでフラットな世界を作成してください。さらに、マインクラフトで「F3+p」を押します。これで、ゲームから離れた際の一時停止を制御します。
その他、便利な機能はこちらのページで紹介されています。

[PC版マインクラフト操作方法・小技まとめ](http://n5v.net/pc-technique-303/)

ターミナルを起動して、今格納したmcpipyフォルダに遷移します。

```
 〜$　cd ライブラリ/Application Support/minecraft/mods/mcpipy/
 [enter]
```
この際にcd以降フォルダまでのパスを記述しますが、間違えやすいので、mcpipyのフォルダアイコンをドラック＆ドロップでパスが表示されます。これで、ターミナルからフォルダ内のファイルにアクセスすることが可能になります。
ちなみに、「〜$」の「〜」の部分はユーザーごとに異なります。
さらに、次のコマンドを入力します。

```
 〜$　python egg.py
 [enter]
```
これで、マインクラフト上に巨大な卵が出現します。
この「python」のコマンドは「pythonを起動しますよ」という命令で、「mcipy」フォルダ内の「egg.py」を起動することになります。巨大な卵が出現したらpythonとマインクラフトが連携されたことになります。
あとは、Scratchとの連携を図ります。

#Scratchとの連携
ここから、冒頭で取り上げたyouTubeを参考にしたいと思います。
ちなみに、ここからは後編の#2になります。
> 6歳からのプログラミング　#2 〜minecraft×scratch〜 CraftBukkitとRaspberryJuice
> https://www.youtube.com/watch?v=0PmUlsufwps

この動画の2分あたりから始まる「scratch2mcpi」を導入していきます。

##scratch2mcpiとscracth.pyをセッティング
動画では、先ほど作成したmodsフォルダの中に、「scratch2mcpi.py」と「mcpi」、「scratch.py」を入れるだけと書いてあります。
まずはわかりやすいように、modsフォルダ内に、「scratch2mcpi」フォルダを作成します。[こちらのサイト](http://blog.champierre.com/1020)で紹介されているダウンロード先からscratch2mcpi.pyをダウンロードしてきます。
> scracth2mcpi.py
> https://github.com/scratch2mcpi/scratch2mcpi

ダウンロードしたら、さっき作った「scratch2mcpi」フォルダ内に格納します。
次のところから「scratch.py」をダウンロードし、同じフォルダに格納します。
> scracth.py
> https://github.com/pilliq/scratchpy/tree/master/scratch

#mcpiの導入
次に、「mcpi」フォルダを格納します。
mcpiフォルダ内にはscratchで出した命令をpython風にするようなファイルが、いくつか格納されているフォルダです。

#起動と確認
では、早速連結ができているか確認したいと思いますが、その前にスクラッチでコネクトの準備をする必要があります。
##スクラッチの遠隔センサーを有効に
スクラッチを起動してメニュー内の「調べる」の中にある「スライダーセンサーの」という項目で右クリックをします。
右クリックのメニューで「遠隔センサー接続を有効にする」を選択してセンサーを有効にします。これで、スクラッチから値が投げられるようになります。

##Scratch2mcpi.pyを起動
これで、準備が完了だと思います。では、マインクラフトを起動します。先ほど、pythonの確認を行ったワールドを起動します。この状態で、ターミナルを起動し「scratch2mcpi」のフォルダに移動します。

```
 〜$　cd ライブラリ/Application Support/minecraft/mods/mcpipy/
[enter]
```

この状態で「scratch2mcpi.py」を起動します。

```
〜$ python scratch2mcpi.py
[enter]
```

これで、ターミナル内に「プロセス完了」と表示され、マインクラフトのメッセージでconnectが表示されたらコネクトされているはずですが、エラーが表示されます。

##minecraftturtle.pyのダウンロード
ターミナルにエラーが表示されます。どうも、この動画のバージョンでは発生しなかったエラーがあるようです。「mcturtle/minecraftturtle.py」が見つからないというようなエラーです。
検索すると[こちら](https://github.com/martinohanlon/minecraft-turtle)のサイトが見つかり、ダウンロードできます。ダウンロードしたら「scratch2mcpi」内に「mcturtle」というフォルダを作成して、その中にファイルを格納します。
> minecraftturtle.pyのダウンロード
> https://github.com/martinohanlon/minecraft-turtle

##minecraftstuff.pyのダウンロード
さらに、「mcstuff/minecraftstuff.py」がないというエラーが表示されます。これも同じようにファイルが足りないので、ファイルをダウンロードし「mcstuff」フォルダを作成して格納します。
> minecraftstuff.pyのダウンロード
> https://github.com/martinohanlon/minecraft-stuff

このsutffファイルには「_int_.py」がないので、それも一緒に格納します。
「_int_.py」ファイルは、先ほど格納した「minecraft-turtle」のフォルダ内にあるものをコピペします。
これで、再度ターミナルからscratch2mcpi.pyを起動します。

##Scrathの変数を作成
ターミナルでscrath2mcpi.pyを起動し、ターミナルに「Connected to Scratch」と表示されたら、scrathとマイクラが繋がったことになります。
しかし、これだけだと繋がっただけになるので、最後に変数を作る必要があるようです。
冒頭の動画の続編をご覧になってください。

>6歳からのプログラミング　#2 〜minecraft×scratch〜　scratch2mcpiとscratchpy
>https://www.youtube.com/watch?v=0PmUlsufwps
>7分30秒くらいを閲覧ください。

こちらの動画の7分30秒あたりをご覧になると、変数の作り方が載っています。
これで、Scrathからマインクラフトが操作できます。
ちょっと、ターミナルを起動しなくてはいけないので、少し、子供には難しいかもです。