Pycraft mod for MinetestとPythonを使用してL型の家を作るには、以下の手順を実行します。
〇Pycraft mod for MinetestとPythonで作成したL型の家
作成方法
1. Pycraft mod for Minetestのインストール
Pycraft mod for Minetestをインストールしていない場合は、以下の記事を参考にしてインストールしてください。
Ubuntu20.04でPycraft mod for MinetestとPythonを使用して指定されたブロックの床を作成する
2. プログラミング
以下のコードで、L型の家を作ります。Thonnyの場合は、以下のコードを保存後、緑色の再生ボタンをクリックして実行してください。
import mcpi.minecraft as minecraft
import mcpi.block as block
def l_shaped_house(px, py, pz):
# 家の幅
house_xs = 10
# 家の高さ
house_ys = 5
# 家の奥行き
house_zs = 5
# 追加の部屋の幅
room_xs = 5
# 追加の部屋の奥行き
room_zs = 5
# 床
for dx in range(house_xs+2):
for dz in range(house_zs+2):
mc.setBlock( px+dx, py, pz+dz+room_zs, block.BRICK_BLOCK)
# 追加の部屋の床
for dx in range(room_xs+2):
for dz in range(room_zs+2):
mc.setBlock( px+dx+(house_xs-room_xs), py, pz+dz, block.BRICK_BLOCK)
# 壁
for dx in range(house_xs+2):
for dz in range(house_zs+2):
for dy in range(house_ys):
if dx == 0 or dz == 0 or dx == house_xs+1 or dz == house_zs+1:
mc.setBlock( px+dx, py+dy+1, pz+dz+room_zs, block.BRICK_BLOCK )
else:
mc.setBlock( px+dx, py+dy+1, pz+dz+room_zs, block.AIR )
# 追加の部屋の壁
for dx in range(room_xs+2):
for dz in range(room_zs+1):
for dy in range(house_ys):
if dx == 0 or dz == 0 or dx == room_xs+1 :
mc.setBlock( px+dx+(house_xs-room_xs), py+dy+1, pz+dz, block.BRICK_BLOCK )
else:
mc.setBlock( px+dx+(house_xs-room_xs), py+dy+1, pz+dz, block.AIR )
# ドアの穴
for dx in range(2):
for dy in range(house_ys-1):
mc.setBlock( px+dx+2, py+dy+1, pz+room_zs, block.AIR )
# 部屋への穴
for dx in range(3):
for dy in range(house_ys-1):
mc.setBlock( px+dx+2+(house_xs-room_xs), py+dy+1, pz+room_zs, block.AIR )
# 窓
mc.setBlock( px+6, py+2, pz+house_zs+1+room_zs, block.GLASS )
mc.setBlock( px+7, py+2, pz+house_zs+1+room_zs, block.GLASS )
mc.setBlock( px+8, py+2, pz+house_zs+1+room_zs, block.GLASS )
mc.setBlock( px+6, py+3, pz+house_zs+1+room_zs, block.GLASS )
mc.setBlock( px+7, py+3, pz+house_zs+1+room_zs, block.GLASS )
mc.setBlock( px+8, py+3, pz+house_zs+1+room_zs, block.GLASS )
# 追加の部屋の窓
mc.setBlock( px+(house_xs-room_xs)+2, py+2, pz, block.GLASS )
mc.setBlock( px+(house_xs-room_xs)+3, py+2, pz, block.GLASS )
mc.setBlock( px+(house_xs-room_xs)+2, py+3, pz, block.GLASS )
mc.setBlock( px+(house_xs-room_xs)+3, py+3, pz, block.GLASS )
# 屋根
for dy in range(3):
for dx in range(house_xs+2-dy*2):
for dz in range(house_zs+2-dy*2):
mc.setBlock( px+dx+dy, py+dy+house_ys, pz+dz+dy+room_zs, block.REDSTONE_BLOCK)
# 追加の部屋の屋根
for dy in range(3):
for dx in range(room_xs+2-dy*2):
for dz in range(room_zs+house_zs+2-dy*2):
mc.setBlock( px+dx+dy+(house_xs-room_xs), py+dy+house_ys, pz+dz+dy, block.REDSTONE_BLOCK)
# 明かり
mc.setBlock( px+10, py+1, pz+house_zs+room_zs, block.SEA_LANTERN)
# 本棚
mc.setBlock( px+10, py+1, pz+house_zs-2+room_zs, block.BOOKSHELF)
mc.setBlock( px+10, py+2, pz+house_zs-2+room_zs, block.BOOKSHELF)
# ローカルサーバに接続
mc = minecraft.Minecraft.create("127.0.0.1")
# プレイヤーの位置を取得
pos = mc.player.getPos()
print(pos)
l_shaped_house(pos.x, pos.y, pos.z+5)
関連情報
・Minetestに関する情報はこちらを参照してください。