この記事では、Minecraft Java Edition(バージョン1.17.1)の情報をもとに執筆しています。
そのほかのバージョンや機種などでの動作は保証できません。
ドアの前に立ったことをコマンドで感知したいマインクラフター
「ドアの前に立ったことを感知して、ドアを開けたい……。しっかり鍵も使ったことにしたいな。どうやったらできるの?」
こんな疑問を解決します!
- 距離を感知するにはexecuteコマンド
- ドアを開けるにはsetblock
こんにちは! マインクラフターのナツメ(@natsume_717b)です。
普段は脱出マップを配布・制作しています!
→配布マップ・ダウンロードページ
今回はコマンドを使って鍵付きドアを作っていきます。
鍵付きドアには幾つか種類がありますが、この記事では「鍵を持っている時にドアの前に立つと、勝手に扉が開くようになるコマンド」を紹介します。
このコマンドは脱出マップでなくとも、特定の条件を満たさないと先に進めないといったギミックを採用したいときに使われるコマンドです。
なので、かなり汎用性は高いですね。
自分もよくお世話になっています。
まず初めにドアの前に立っていることをどのように感知するのかを解説し、その後にドアを開錠するギミックについて解説しています。
この記事を読めば、鍵付きドアが作れるようになりますよ!
どのようにやるのか、さっそく見ていきましょう!
距離を感知するにはexecuteコマンド
鍵付きドアを作るためには、まずはじめに、ドアの前に立ったことを感知しなければなりません。
なので、ドアとの距離をコマンドで感知するようにしましょう。
そのためにはexecuteコマンドを利用します。
executeコマンドでは、「プレイヤーがどこそこにいる時に~」という仮定の条件を通常のコマンドに付与できます。
なので、ドアの前に立っている時にだけ、該当する鍵を消すコマンドを実行するようにします。
具体的には以下のようなコマンドになります。
/execute if entity @p[x=0,y=60,z=0,dx=0,dy=0,dz=0] run clear @a minecraft:tripwire_hook 1
上記のコマンドではトリップワイヤーフックが鍵だとして、ドアの前の座標がX=0、Y=60、Z=0の地点だとしています。
なので、ドアの地点が異なる場合はX,Y,Zの値を変更すれば問題ありません。
dx,dy,dzはx,y,zの値からどれだけ離れているかをそれぞれ指定するものなので、0を指定すればOKです。
もしいくつものトリップワイヤーフックを鍵と見立てて、それぞれ名前(使用する箇所)が異なる場合は、clearコマンドで消すアイテムをさらに細かく指定しましょう。
例えば、屋上の鍵という名前の鍵を消したい場合のアイテム指定は
minecraft:tripwire_hook{display:{Name:'[{"text":"屋上の鍵"}]',Lore:['[{"text":"屋上を開けるための鍵"}]']}}
といった感じで指定すればOK。
もしアイテムに名前をつけたり説明文をつける方法が分からない、もっと知りたいという方は、【Java版】名前や説明文のついたアイテムの出し方【テンプレ文あり】を参考にしてくださいね。
上記のコマンドと合わせると以下のような感じになります。
/execute if entity @p[x=0,y=60,z=0,dx=0,dy=0,dz=0] run clear @a minecraft:tripwire_hook{display:{Name:'[{"text":"屋上の鍵"}]',Lore:['[{"text":"屋上を開けるための鍵"}]']}} 1
これで該当するドアの前に立つことで鍵を消費するコマンドが組めました。
次は鍵を消費したことをきっかけにドアを開けるためのコマンドを用意します。
ドアを開けるにはsetblock
ドアを開けるためには、赤石信号をドアに伝えなければなりません。
赤石信号を伝える方法は幾つもあるのですが、今回はドアの下のブロックにレッドストーントーチを設置して赤石信号を伝える方法を紹介します。
まずは画像で位置関係を整理しましょう。
(説明のためにブロックを設置したので、実際の座標とは異なります)
レッドストーントーチを置く場所は方向によって異なりますので、各自F3キーを押して座標を確認してください。
今回はレッドストーントーチを置きたい座標がX=1、Y=58、Z=0とします。
使うコマンドは設置することが目的なので、使うコマンドはsetblockコマンドです。
上記の座標でコマンドを打っていくと
/setblock 1 58 0 minecraft:redstone_torch
となります。
座標を変更したい場合は、「1 58 0」の部分を各自設置したい座標の数値に変更してくださいね。
さて、鍵を消費したかどうかでドアを開錠させたいので初めに紹介したexecuteコマンドが成功を感知する必要があります。
とはいえ、この感知に関してはチェーンコマンドブロックを活用すれば非常に簡単です。
どういうことかというと、条件付きのチェーンコマンドブロックを用意します。
実際にコマンドブロックを置いてみると以下の通りになります。
リピートコマンドブロックにはexecuteコマンドを入力して、ドアの前に立っているのかを常に監視します。
そして該当する鍵を持っていれば鍵を消すコマンドが起動したことになり、チェーンコマンドブロックに入っているsetblockコマンドによって、ドアに赤石信号が伝わり解錠されることとなります。
鍵を持っていなければ、鍵を1つ消すコマンドが成功しないのでチェーンコマンドブロックも機能しません。
というわけで、これで鍵付きドアの完成です!
お疲れ様でした。
まとめ
というわけで、今回のまとめです。
今回使ったコマンドはこちら。
- ドアの前に立っていることを感知しつつ、鍵を消費するコマンド
(必要に応じて鍵の名前など変更してください)
/execute if entity @p[x=0,y=60,z=0,dx=0,dy=0,dz=0] run clear @a minecraft:tripwire_hook{display:{Name:'[{"text":"屋上の鍵"}]',Lore:['[{"text":"屋上を開けるための鍵"}]']}} 1
- ドアの下にあるブロックに赤石信号を伝えるコマンド
(各自座標を変更する必要あり)
/setblock 1 58 0 minecraft:redstone_torch
- executeコマンドで距離を測って、扉を開けるのは赤石信号を使います!
この記事は以上になります。