マインクラフトで再現する中世城郭#5-1
(4)マインクラフトのPython Modで標高データから地形を作成(前半)
<MODの導入>
用意した地理情報をマインクラフトに取り込むため、マインクラフト上から外部のプログラムを呼び出すためのMOD(Raspberry Jam Mod)を事前に導入します。Raspberry Jam Modの最新版が、マインクラフト1.12.2にしか対応していないため、いったん古いバージョンに導入します(ここからダウンロード)。
<データファイルのコピー>
Raspberry Jam Modを導入すると、マインクラフトのフォルダに新しく「mcpipy」というフォルダが作成されます。ここに(2)で作成したデータファイル「npy_5x5-5339-31-72.npy(例)」をコピーします。
<ブロック配置のプログラム>
マインクラフト上から実行するブロック配置のPythonプログラム「loadnpy.py」を同じ「mcpipy」フォルダ内に配置します。
loadnpy.py
# coding: utf-8
import mcpi.minecraft as minecraft
import mcpi.block as block
import numpy as np
import sys
from time import sleep
NPY_DIR = "./"
NPY_FILE = "npydata-{0:04d}-{1:02d}-{2:02d}.npy"
mc = minecraft.Minecraft()
mc.postToChat("Loadnpy.py Start!")
if len(sys.argv) < 4:
print("loadnpy.py mesh1 mesh2 mesh3")
exit(-1)
mesh1 = int(sys.argv[1])
mesh2 = int(sys.argv[2])
mesh3 = int(sys.argv[3])
array = np.load(NPY_DIR+"/"+NPY_FILE.format(mesh1, mesh2, mesh3))
(zshape, xshape) = array.shape
for z in range(zshape):
sleep(0.01) # sleep1
for x in range(xshape):
hval = array[z][x]
mc.setBlocks(x, hval-1, z, x, hval-5, z, block.DIRT)
mc.setBlock(x, hval, z, block.GRASS)
sleep(0.001) # sleep2
mc.postToChat("Loadnpy.py Finish!!!")
配置が終わったら、改めてバージョン1.12.2のマインクラフトに入りなおします。MODを確認しRaspberry Jam Modが有効になっていることを確認します。最初の画面で「Mods」を選択します。
左側のMOD一覧の一番下を見ると、Raspberry Jam Modが導入されていることが確認できます。
これで準備は終わりです。