見出し画像

Processing でマイクラ③ Processingからマイクラにデータを送信

Processing で「マイクラもどき」を作っています。マイクラ風の家やらせん階段、フラクタルツリーなどを作ってきました。テクスチャを貼ったブロックを使えば、かなりマイクラに近づけることがわかりました。
しかし「マイクラもどき」はどこまでいっても「もどき」なんですね。本物のマインクラフトには勝てません。スライムもいないし、スケルトン、ゾンビもいないし、そもそもスティーブがいないじゃないですか。建築できるだけでは寂しいです。
そこで今回は、Processingで作ったクラフトをマイクラにコピーする方法を考えました。「Rapsberry Jam Mod」を利用させていただきます。

Rapsberry Jam Mod

rapsberryjammod - GitHub

raspberryjammod
わたしがプログラミングにはまる原因の一つとなった記念すべき作品です。あのころはGitHubもPythonもなんにもわからなかったな。久しぶりに Rapsberry Jam Mod で遊びましたが、やっぱり面白いです。一日中遊んでいられる。作者の「arpruss」様、本当にありがとうございます。

Processingで作ったクラフトをマイクラに送信するため、コードの一部を利用させていただきます。GitHubのページに移動して、「Download Zip」をクリックして、zipファイルをダウンロードします。ダウンロードしたzipファイルは解凍しておきましょう。

ファイルの配置

processing_minecraft directory

Processing3 のスケッチのフォルダー(ディレクトリー)に、先ほどダウンロードしたModの一部をコピーして設置します。mcpi(minecraft pi の略)フォルダをそのまま、スケッチのファルダーにコピペしてください。ファイルの配置が次のようになっていることを確認してから、次に進みます。

processing_minecraft/
 ├ block_textures/  # ブロックのテクスチャを入れる
 │ └ 0-0.png
 │ └ 0-1.png
 │ └ …
 ├ frames/  # 動画用の出力画像を入れる
 ├ mcpi/  # ダウンロードしたModをコピー
 │ └ block.py
 │ └ connect.py
 │ └ minecraft.py
 │ └ …
 └ output_images/  # 出力した画像を入れる
 └ processing_minecraft.pyde  # processing のプログラム
 └ processing_util.py  # ユーティリティー(座標軸の表示など)
 └ vector_util.py  # ユーティリティー(ベクトルの計算用)
 └ …

クラフトを送信するプログラム

import mcpi.minecraft as minecraft

def keyPressed():
    if key == 'm':
        print('send data to minecraft')
        mc = minecraft.Minecraft.create()
        player_position = map(int, mc.player.getPos())
        for bp in block_positions:
            x = bp[2] + player_position[0]
            y = bp[1] + player_position[1]
            z = bp[0] + player_position[2]
            block_id = bp[3]
            if block_id == 35:
                sub_block_id = bp[4] if bp[4:] else 0
                mc.setBlock(x, y, z, block_id, sub_block_id)
            else:
                mc.setBlock(x, y, z, block_id)

「m」キーを押したときに、クラフトデータがマイクラに送信するようにしました。Block ID 35(羊毛)だけは、処理を分岐して、羊毛の色データを加えて送信するようにしてあります。
あれ、これだけ? と思われましたか。実際これだけ(実質12行)です。データの送信は「Rapsberry Jam Mod」が実行してくれます。我々は、クラフトデータを変換して setBlock 命令で送信するだけですべてがうまく行きます。前回作ったデータを送信してみましょう。

マイクラ風の家を送信

minecraftic house - processing
minecraftic house - minecraft

マインクラフトのバージョンは 12.2 です、「Rapsberry Jam Mod」を適用済みです。まだModを入れていない方はこちらのページを参照して、挑戦してみてください。
pythonでマインクラフトを制御できるMOD「Raspberry Jam Mod」その1

マイクラを起動してからprocessingのスケッチを開きます。「m」キーを押してください。
うまく送信できました。マイクラ風の家をマイクラの世界にコピーしてみると、リアルさがアップします(当たり前か)。モブが周りで遊んでいるのも楽しいです。

チェック模様の床を送信

checked floor - processing
checked floor - minecraft

チェック模様の床も完璧にコピーできました。テクスチャがほとんど同じなので見た目を同じにできるのです。

らせん階段を送信

spiral steps - processing
spiral steps - minecraft

らせん階段をコピーすると、その大きさに驚きます。Processing だと比較する物体がないので、サイズ感がいまいちつかめません。サイズ感のあるマイクラの世界が勝っているところです。
階段の上まで駆け上る競争をやっても楽しいかもしれませんね。アスレチックを作るときに使えそうです。

鳥かごを送信

bird cage - processing
bird cage -minecraft

鳥かごをコピーすると、スティーブが中に閉じ込められていました! 隙間が大きいのですぐに出られましたが。スライムと比べて、その大きさがよく理解できます。

フラクタルツリーを送信

# フラクタルツリー
tree_num = 10
for i in range(tree_num):
    branch_count = 5
    branch_length = 20
    t = Turtle()
    t.setpos(i * 50, 0, i * 20)
    t.pencolor(12)
    t.tilt(90)
    t.forward(branch_length)
    branch(t, branch_length, branch_count)

前回のコードを少しだけ修正しました。ツリーを10本並べて設置します。for文で10回繰り返し、setposコマンドでタートルを指定の位置に移動させてからツリーを描きます。

fractal tree - processing
fractal tree - minecraft

遠方は霧で見えなくなりますが、ちゃんと10本フラクタルツリーを送信できていることを確認しました。プログラムの素晴らしいところは、一つプログラムを作ると、それを何度でも利用できることです。フラクタルツリーを100本でも1000本でも植えることができます。
プログラムにランダム要素を入れて、一本一本のツリーに変化をつけることも簡単ですが、それは読者の皆様にお任せすることにいたします。
Processing x Minecraft = Processincraft の世界をようこそ!


前の記事
Processing でマイクラ② マイクラ建築を自動化してみよう
次の記事
Processing でマイクラ④ 村を自動生成する

その他のタイトルはこちら


この記事が気に入ったらサポートをしてみませんか?