剣で空を飛ぶ!

ホーム / ツール紹介 / 剣で空を飛ぶ!

今回はpollBlockHitsという、触ったブロックを検出するプログラムを使って空を飛でみます。まずは、こんなコードを実行してみます。

import mcpi.minecraft as minecraft
import time
mc = minecraft.Minecraft()

while True:
    hits = mc.events.pollBlockHits()
    if hits:
        for h in hits:
            mc.postToChat(h.pos.x)
            mc.postToChat(h.pos.y)
            mc.postToChat(h.pos.z)
            mc.postToChat(h.face)
            mc.postToChat(h.type)
            mc.postToChat(h.entityId)
    time.sleep(0.1)

whileループで繰り返しながら、pollBlockHitsをしています。
このpollBlockHits、利き手に剣を持った状態で、右クリック(ブロックを置くのと同じ操作)すると、そのイベントが記録されます。どんな感じに記録されるかと言うと、

チャットに出力したように、
-93 
1 
55 
7 
0 
216

こんな感じで記録されます。これは順番に触ったブロックの

  • x座標
  • y座標
  • z座標
  • 方向
  • イベントタイプ(いつも0)
  • エンティティID(今度詳しく)

です。

さて、このpollBlockHitsを使って、何回かに渡って面白いことをやってみましょう。今日は飛んでみます。コードはこんな感じ。

import mcpi.minecraft as minecraft
import time
import mcpi.block as block
from mcpi.vec3 import Vec3
mc = minecraft.Minecraft()

def fly():
    while True:
        if len(mc.events.pollBlockHits()):
           mc.player.setPos(mc.player.getPos() + Vec3(0,3,0)) 
        time.sleep(0.1)
fly()

pollBlockHitsのイベントの中身は見ていませんが、イベントがあったか(右クリックしたかどうか)だけをみて、あったら主人公を上に飛ばしています。右クリックしたら飛ぶってことですね。飛んでみると、

おぉー飛んだ。まだまだ飛んだ!

飛びすぎかな~~、あ、落ちた!

あ~あ、死んじゃいました。飛びすぎには注意ですね。着地は水の上がいいかもしれません。

Translate »