マインクラフトでPythonプログラムを動かすための「Raspberry Jam Mod」を使った、プログラミングサンプルの紹介と解説をしています。
Pythonのバージョンは 3.7.1
今回はマイクラプログラミングで空き地をつくる方法を解説してゆきます。
空き地の準備は建築の前作業として必要ですからね。
そしてマイクラの地形には、山や谷などのデコボコした場所が多くありますが、整地作業は面倒なのでPythonプログラミングで自動でやってしまう事が今回の目的です。
空気でブロックを消すという考え方
マインクラフトは様々なブロックが準備されていますが、実は「空気」というブロックも用意されているのです。
ブロックを消すということは、元々あったブロックを「空気」ブロックに置き換えるということ。
以前にブロックを設置するプログラムを解説しましたが、そのプログラムと全く同じ方法で「空気」ブロックを設置すれば、地形にあるブロックを消して平らな場所を作成することができます。
サンプルのPythonプログラムはこちら
1 2 3 4 5 6 7 8 |
# 空気ブロックを1個設置する mc.setBlock(x, y , z, 0) # 空気ブロックを複数設置する to_x = x+5 to_y = y+5 to_z = z+5 mc.setBlocks(x, y, z, to_x, to_y, to_z, 0) |
x = 東西の座標を指定する数値
y = 高さの座標を指定する数値
z = 南北の座標を指定する数値
でしたよね。
カッコ内の最後にある「0」と設定している値が、「空気」のブロック番号がです。
単純に空き地を作るPythonプログラム
今回は setBlocks を使って、プレーヤのまわりにある複数のブロックを空気ブロックに置き換えて平らな場所を作成してみましょう。
実際のプログラミング例はこちら。
ご自身の環境で動かしてみたい場合は、以下の場所に保存してください。
ファイルパス(Macの場合)
/Users/ユーザ名/Library/Application Support/minecraft/mcpipy/flat.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# coding: UTF-8 # 上のコードを書くことで、日本語のコメントを有効にします # マインクラフト用のプログラムを読み込みます from mine import * # マインクラフト用のプログラムを、すぐに使えるように「mc」として準備します mc = Minecraft() # チャットメッセージを出力します mc.postToChat("flat.py の処理を開始します") # 自分の位置情報を取得します # 取得してきた位置情報は、それぞれ変数 x, y, z に保存されます x,y,z = mc.player.getPos() # チャットメッセージを出力します mc.postToChat("現在はのX(東西)座標は" + str(x)) mc.postToChat("現在はのY(上下)座標は" + str(y)) mc.postToChat("現在はのZ(南北)座標は" + str(z)) # 空き地を作るマスの数を設定 num = 10 # 空き地の終点となる座標を設定 width = x + num - 1 # 東西の座標設定 height = y + num - 1 # 上下の座標設定 depth = z + num - 1 # 南北の座標設定 # -1 としている理由は、setBlocks を実行した結果が計画よりも1マスぶん多くなってしまうため # チャットメッセージを出力します mc.postToChat("プレーヤを始点に、東側に" + str(num) + "ブロックぶんの空き地を作ります") # 空気ブロックを範囲で設置 mc.setBlocks(x, y, z, width, height, depth, 0) # mc.postToChat(i) mc.postToChat("実行が終了しました”) |
これでプレーヤの東側に10マス ☓ 10マスの空き地ができました。
しかし、たまたま空き地を作った場所に洞窟があって、平たい場所にポッカリと穴が空いてしまうことも考えられますよね。
なのでプレーヤの足元に石の土台を作ってあげたほうが良さそうです。
空き地と土台を作り、真ん中にテレポートするPythonプログラム
「空き地作り」と「土台作り」の2つの事を同時におこなうプログラミング例はこちら。
ご自身の環境で動かしてみたい場合は、以下の場所に保存してください。
ファイルパス(Macの場合)
/Users/ユーザ名/Library/Application Support/minecraft/mcpipy/flat2.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# coding: UTF-8 # 上のコードを書くことで、日本語のコメントを有効にします # マインクラフト用のプログラムを読み込みます from mine import * # マインクラフト用のプログラムを、すぐに使えるように「mc」として準備します mc = Minecraft() # チャットメッセージを出力します mc.postToChat("flat2.py の処理を開始します") # 自分の位置情報を取得します # 取得してきた位置情報は、それぞれ変数 x, y, z に保存されます x,y,z = mc.player.getPos() # チャットメッセージを出力します mc.postToChat("現在はのX(東西)座標は" + str(x)) mc.postToChat("現在はのY(上下)座標は" + str(y)) mc.postToChat("現在はのZ(南北)座標は" + str(z)) # 空き地を作るマスの数を設定 num = 10 # 空き地の終点となる座標を設定 width = x + num - 1 # 東西の座標設定 height = y + num - 1 # 上下の座標設定 depth = z + num - 1 # 南北の座標設定 # -1 としている理由は、setBlocks を実行した結果が計画よりも1マスぶん多くなってしまうため # チャットメッセージを出力します mc.postToChat("プレーヤを始点に、東側に" + str(num) + "ブロックぶんの空き地を作ります") # 空気ブロックを範囲で配置 mc.setBlocks(x, y, z, width, height, depth, 0) # チャットメッセージを出力します mc.postToChat("プレーヤの足元を始点に、東側に" + str(num) + "ブロックぶんの石の土台を作ります") # 石ブロックを土台に配置 mc.setBlocks(x, y-1, z, width, y-1, depth, 1) # チャットメッセージを出力します mc.postToChat("作った空き地の真ん中にテレポートします") # 空き地のだいたい真ん中にテレポート mc.player.setPos(x + (num/2), y, z + (num/2)) # mc.postToChat(i) mc.postToChat("実行が終了しました”) |
最初に紹介したプログラム「flat.py」と変わった点は、36行めから44行めにある「土台づくり」と「真ん中にテレポート」という部分です。
これでもし洞窟やマグマを掘り当てたとしても、石で整地しますので何ら問題はありません。
実行の結果は以下の画像でご確認ください。
もう少し使いやすく改造してみましょう。
自分を中心に空き地と土台をつくるPythonプログラム
自分がいま立っている足元を中心として、まわりを空き地にするプログラミングです。
ご自身の環境で動かしてみたい場合は、以下の場所に保存してください。
ファイルパス(Macの場合)
/Users/ユーザ名/Library/Application Support/minecraft/mcpipy/flat3.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# coding: UTF-8 # 上のコードを書くことで、日本語のコメントを有効にします # マインクラフト用のプログラムを読み込みます from mine import * # マインクラフト用のプログラムを、すぐに使えるように「mc」として準備します mc = Minecraft() # チャットメッセージを出力します mc.postToChat("flat3.py の処理を開始します") # 自分の位置情報を取得します # 取得してきた位置情報は、それぞれ変数 x, y, z に保存されます x,y,z = mc.player.getPos() # チャットメッセージを出力します mc.postToChat("現在はのX(東西)座標は" + str(x)) mc.postToChat("現在はのY(上下)座標は" + str(y)) mc.postToChat("現在はのZ(南北)座標は" + str(z)) # 空き地を作るマスの数を設定 num = 10 # プレーヤが空き地の中心となるよう、座標の始点を調整 x = x - (num/2) z = z - (num/2) # 空き地の終点となる座標を設定 width = x + num - 1 # 東西の座標設定 height = y + num - 1 # 上下の座標設定 depth = z + num - 1 # 南北の座標設定 # -1 としている理由は、setBlocks を実行した結果が計画よりも1マスぶん多くなってしまうため # チャットメッセージを出力します mc.postToChat("プレーヤを中心に、" + str(num) + "ブロックぶんの空き地を作ります") # 空気ブロックを範囲で配置 mc.setBlocks(x, y, z, width, height, depth, 0) # チャットメッセージを出力します mc.postToChat("プレーヤの足元を中心に、" + str(num) + "ブロックぶんの石の土台を作ります") # 石ブロックを基礎に配置 mc.setBlocks(x, y-1, z, width, y-1, depth, 1) # mc.postToChat(i) mc.postToChat("実行が終了しました") |
上記プログラムでは、いったん
x,y,z = mc.player.getPos()
で自分の位置情報を取得してきていますが、25行めから27行めにあるように
x = x – (num/2)
z = z – (num/2)
で東西位置の座標・南北位置の座標を、自分が中心となるよう調整しています。
その後、調整した座標にしたがって空き地を作った結果、自分が中心となる場所ができたわけです。
数値をちょっと工夫するだけで、とても使い勝手が良くなりましたね。
土台を自動で作ってくれるプログラムですので、空中に空き地を作る事だって可能なのです。
このPythonプログラムを使えば空中庭園も簡単に実現しますね(笑)