マイクラ・転落防止柵付き落とし穴

以前、作成した落とし穴mod を懲りずに改良してみました。
今回は、敵性mob に殴られているときに有効な転落防止柵付きマイナー版です。

from mcpi.minecraft import Minecraft
from mcpi.block import *
mc = Minecraft.create()
pos = mc.player.getTilePos()

for i in range(2):
    mc.setBlock(pos.x+1,pos.y+i,pos.z,DIAMOND_BLOCK)
    mc.setBlock(pos.x,pos.y+i,pos.z-1,DIAMOND_BLOCK)
    mc.setBlock(pos.x-1,pos.y+i,pos.z,DIAMOND_BLOCK)
    mc.setBlock(pos.x,pos.y+i,pos.z+1,DIAMOND_BLOCK)
    
for posX in range(20):
    for posZ in range(20):
        for posY in range(20):
            mc.setBlock(pos.x+posX,pos.y-posY,pos.z+posZ+1,AIR)
            mc.setBlock(pos.x+posX+1,pos.y-posY,pos.z-posZ,AIR)
            mc.setBlock(pos.x-posX,pos.y-posY,pos.z+posZ+1,AIR)
            mc.setBlock(pos.x-posX-1,pos.y-posY,pos.z-posZ,AIR)

for posX in range(21):
    for posZ in range(21):
        for posY in range(21):
            mc.setBlock(pos.x+posX,pos.y-posY-1,pos.z+posZ,DIAMOND_BLOCK)
            mc.setBlock(pos.x+posX,pos.y-posY-1,pos.z-posZ,DIAMOND_BLOCK)
            mc.setBlock(pos.x-posX,pos.y-posY-1,pos.z+posZ,DIAMOND_BLOCK)
            mc.setBlock(pos.x-posX,pos.y-posY-1,pos.z-posZ,DIAMOND_BLOCK)
                
for i in range(2):
    mc.setBlock(pos.x+1,pos.y+i,pos.z,AIR)
    mc.setBlock(pos.x,pos.y+i,pos.z-1,AIR)
    mc.setBlock(pos.x-1,pos.y+i,pos.z,AIR)
    mc.setBlock(pos.x,pos.y+i,pos.z+1,AIR)

敵に殴り殺される前までに・・・、「天空の城、ラピュタ」のムスカ大佐よろしく、「死ねぇーーーい!」と言いつつコマンド入力、エンターキーを押すのも一興ですね。 

マイクラ・転落防止柵付き階段 Ver.2

前回からの改良点は踊り場を設けて、高さを関数化した所です。

踊り場付近のコードがごちゃごちゃしてて汚いです。

from mcpi.minecraft import Minecraft
from mcpi.block import *
def loop3(height):
    mc = Minecraft.create()
    pos = mc.player.getTilePos()

    for i in range(height):
# +x 方向の階段と転落防止柵
        mc.setBlock(pos.x+i+1,pos.y+i,pos.z,DIAMOND_BLOCK)
        mc.setBlock(pos.x+i+1,pos.y+i+1,pos.z-1,DIAMOND_BLOCK)
    for i in range(1,height):
        mc.setBlock(pos.x+i+1,pos.y+i+1,pos.z+1,DIAMOND_BLOCK)
# -x 方向の階段と転落防止柵
        mc.setBlock(pos.x-i+height,pos.y+i+height-1,pos.z+1,DIAMOND_BLOCK)
        mc.setBlock(pos.x-i+height,pos.y+i+height,pos.z+2,DIAMOND_BLOCK)
# -x 方向の内側の転落防止柵
    for i in range(height-2):
        mc.setBlock(pos.x-i+height-2,pos.y+i+height+2,pos.z,DIAMOND_BLOCK)
# ループでできた不要なブロック削除        
    mc.setBlock(pos.x+height,pos.y+height,pos.z+1,AIR)    
# z 踊り場の転落防止柵
    mc.setBlock(pos.x+height+1,pos.y+height,pos.z-1,DIAMOND_BLOCK)
    mc.setBlock(pos.x+height+1,pos.y+height,pos.z+2,DIAMOND_BLOCK)
# 踊り場の床とz 方向の転落防止柵
    for i in range(4):
        mc.setBlock(pos.x+height+2,pos.y+height,pos.z+i-1,DIAMOND_BLOCK)
        mc.setBlock(pos.x+height+1,pos.y+height-1,pos.z+i-1,DIAMOND_BLOCK)
# 2階の踊り場とz 方向の転落防止柵
    for i in range(4):
        mc.setBlock(pos.x-2,pos.y+height*2,pos.z+i-1,DIAMOND_BLOCK)
        mc.setBlock(pos.x-1,pos.y+height*2-1,pos.z+i-1,DIAMOND_BLOCK)
        mc.setBlock(pos.x,pos.y+height*2-1,pos.z+i-1,DIAMOND_BLOCK)
# 2階の踊り場と転落防止柵
    mc.setBlock(pos.x-1,pos.y+height*2,pos.z-1,DIAMOND_BLOCK)
    mc.setBlock(pos.x,pos.y+height*2,pos.z-1,DIAMOND_BLOCK)
    mc.setBlock(pos.x-1,pos.y+height*2,pos.z+2,DIAMOND_BLOCK)
    mc.setBlock(pos.x,pos.y+height*2,pos.z+2,DIAMOND_BLOCK)
    mc.setBlock(pos.x+1,pos.y+height*2,pos.z+2,DIAMOND_BLOCK)

# 関数化した引数付きの階段を作成
loop3(10)

需要があるかと言われれば、疑問?

訂正)関数定義の位置を正しい場所に移しました。

マイクラ・転落防止柵付き階段

マイクラの階段mod に転落防止柵を付けたマイナーヴァージョン。

from mcpi.minecraft import Minecraft
from mcpi.block import *
mc = Minecraft.create()
pos = mc.player.getTilePos()

for i in range(20):
    mc.setBlock(pos.x+i+1,pos.y+i,pos.z,DIAMOND_BLOCK)
    mc.setBlock(pos.x+i+1,pos.y+i+1,pos.z+1,DIAMOND_BLOCK) ← New!
    mc.setBlock(pos.x+i+1,pos.y+i+1,pos.z-1,DIAMOND_BLOCK) ← New!


そろそろ、自分の家が欲しいですね。

 

tar 空のアーカイブ作成はご容赦願います

マインクラフトでマルチプレイヤーのForge サーバーをtar コマンドでバックアップしようとすると件のエラーで怒られた。

コマンドは以下。相対ディレクトリでforge/ だけバックアップしようと -C オプションを使ったのが原因らしい。

# tar cfvz minecraft_forge_`date +%Y%m%d-%H%M%S`.tar.gz -C /usr/local/minecraft/forge

ちなみにバグではなくアイテムで空を飛べる「エリトラ」をゲットするコマンドはこちら。

give @p minecraft:elytra

エリトラをチェストプレートの代わりに装備して、ジャンプボタンを連打すると空中滑空できました。

マイクラで落とし穴

Python で自分の立ち位置の周りを空気ブロックに変えて敵を落としてダイアモンドブロックに変えるプログラムを作ってみた。

pitfall.py

from mcpi.minecraft import Minecraft
from mcpi.block import *
mc = Minecraft.create()
pos = mc.player.getTilePos()

for posX in range(20):
    for posZ in range(20):
        for posY in range(20):
            mc.setBlock(pos.x+posX,pos.y-posY,pos.z+posZ+1,AIR)
            mc.setBlock(pos.x+posX+1,pos.y-posY,pos.z-posZ,AIR)
            mc.setBlock(pos.x-posX,pos.y-posY,pos.z+posZ+1,AIR)
            mc.setBlock(pos.x-posX-1,pos.y-posY,pos.z-posZ,AIR)
for posX in range(20):
    for posZ in range(20):
        for posY in range(20):
            mc.setBlock(pos.x+posX,pos.y-posY,pos.z+posZ,DIAMOND_BLOCK)
            mc.setBlock(pos.x+posX,pos.y-posY,pos.z-posZ,DIAMOND_BLOCK)
            mc.setBlock(pos.x-posX,pos.y-posY,pos.z+posZ,DIAMOND_BLOCK)
            mc.setBlock(pos.x-posX,pos.y-posY,pos.z-posZ,DIAMOND_BLOCK)
                

敵に攻撃されているときに使っても敵は落ちない、というバグがあります。近寄られる前に打つべし。
 

マイクラ・ポーション

牛乳で解毒できるとは・・・。

give @p minecraft:potion 1 0 {Potion:long_invisibility} (暗視)
give @p minecraft:potion 1 0 {Potion:strong_regeneration} (再生)
give @p minecraft:potion 1 0 {Potion:strong_instant_health} (治癒)
give @p minecraft:milk_bucket (牛乳)解毒用
minecraft:speckled_melon (きらめくスイカ)
minecraft:blaze_powder (ブレイズパウダー)
minecraft:cobblestone (丸石)
minecraft:blaze_rod (ブレイズロッド)

きらめくスイカは治癒のポーション用に。ブレイズロッドと丸石は醸造台をクラフト。ブレイズパウダーはパワーアップなんですと。備えあれば患いなし、ですね。

追記)治癒のポーションはゾンビやスケルトンに投げると倒せるらしい。

give @p minecraft:gunpowder (火薬)

火薬とポーションをクラフトするとスプラッシュポーションになり攻撃もできますぜ。

マイクラでピラミッド

Python で黄金のピラミッドを作ってみた。以下のソースを/usr/local/minecraft/forge/mcpipy/ にpyramid.py として保存。

from mcpi.minecraft import Minecraft
from mcpi.block import *
mc = Minecraft.create()
pos = mc.player.getTilePos()

height = 51
A = ((height*2)-1)

for i in range(height):
    mc.setBlocks(pos.x+i,pos.y+i,pos.z+i,pos.x+(A-(i+1)),pos.y+i,pos.z+(A-(i+1)),Block(41))

ブロックIDリストから、Block(41) と番号で指定します。

http://minecraft-ids.grahamedgecombe.com/

https://n5v.net/block-item-id-6876/

チャットウィンドウ「/」から

python pyramid.py

と入力すると目の前に黄金のピラミッドが出現しました。

ローストビーフや回復ポーションなど欲しいアイテムもゲットし放題ですね。

マイクラのForge Server建てた

マイクラのサバイバルモードが、バニラだと死にげーと気づいてしばらく遠ざかっていました。・・・が、何か攻略本はないかとAmazon.co.jp を探してみると面白そうな本がありました。

Minecraftで楽しく学べる Pythonプログラミング – Amazon.co.jp

Python かぁ~、死にげーよりはまあ楽しそうだしやってみるか!のノリで手に取るととても楽しそうでした。

一部抜粋)Minecraft には「Mod」という拡張プログラムがあります。通常ではありえないアイテムを追加したり、プログラミング環境を導入できたりと様々な機能を追加できるのがModです。Minecraft をPython で制御するためにも、Modの導入が欠かせません。ここではほとんどのModをMinecraft 内に追加できる「Forge」の導入方法を、Windows とMac に分けて解説します。

つまり、Linux のMultiPlayer サーバーをPython を使ってプログラミングしたWorld でプレイできるということです。

詳細は当該書籍に譲りますが、ここではForge の導入方法を紹介したWebページのリンクを貼っておきます。

CentOS 5のcui環境にMinecraft Forge 1.8を入れる – Qiita

Windows クライアントの%UserProfile%\AppData\Roaming\.minecraft\forgeとサーバーのminecraft/forge/ ディレクトリ両方にhttps://github.com/arpruss/RaspberryJamMod/releases (公式)からダウンロードしたMods.zip, python-script.zip を解凍してできた、RaspberryJamMod.jar とmcpipyフォルダを新規作成したゲームディレクトリ(ここでは、./forge/)にコピペすると、Modの導入に成功しました。

[ゲームディレクトリ]┳[mcpipy]
‘                            ┠[mods]-RaspberryJamMod.jar


起動・停止コードは、

# java -Xmx2048M -Xms1024M -jar forge-1.12.2-14.23.0.2491-universal.jar nogui (起動
# screen -S minecraft-server -p 0 -X eval 'stuff stop\015' (停止
# screen -ls (ソケット確認

チャットウィンドウ「/」から、

python helloworld.py

と入力すると、「Hello world!」と返され足元のブロックが変化しました。

それでは、楽しいModライフを!

マイクラのヴァージョンアップ

マイクラのクライアントが1.12 にヴァージョンアップしました。

MultiPlayer ではクライアントとサーバーのヴァージョンが同じでないと接続できないようなので早速、鯖のヴァージョンアップ。

# wget https://s3.amazonaws.com/Minecraft.Download/versions/1.12/minecraft_server.1.12.jar
# mv minecraft_server.1.12.jar minecraft_server.jar 

現在のレベルは4ですがライフ回復しないと死にそうです。何か食べないと。死ぬとアイテムをドロップしてしまうので、ドロップは避けたいですね。

マイクラ・World のバックアップ

久しぶりに、掃除機で鯖の掃除をしてみました。

話は変わりますが、先週は空中浮遊バグで地上に降りれずセーブデータが詰みました。そんな時のためにMultiPlayerでWorldをバックアップしてみました。

CentOSでのminecraft_server(マルチサーバ)バックアップ | server-memo.net

を参考にしてマイクラのMultiPlayer でのWorld(ゲームデータ)のバックアップを停止スクリプトに追加しました。

# mkdir /usr/local/minecraft/mc_backup
#!/bin/sh
screen -S minecraft-server -p 0 -X eval 'stuff stop\015'
cd /usr/local/minecraft/mc_backup
tar cfvz minecraft_`date +%Y%m%d-%H%M%S`.tar.gz /usr/local/minecraft/

これでサーバーを停止するたびに自動でゲームデータのバックアップファイルを作成してくれるようになりました。