Minecraft【アイディア】ブロックを、押したり引いたり。

Java版1.21.4-、統合版v1.21.60-で動作確認。
隠し扉や、仕掛け装置、パズルゲームに使える。
ブロックを、押したり引いたり。
ブロックを、押したり引いたり出来る壁(オブジェクト)を作ります。アクションゲームによくある仕掛け装置です。秘密基地の隠し扉や自動扉はもちろん、指定の位置に移動して宝箱を出したり、罠を動かしたり。壁を移動して道を作るパズルゲームにも応用できます。壁を引く装置は、少し難しいですが、押す装置は簡単です。
◻︎装置の特徴
・ブロック壁の移動方法。
・タイマーで重さを表現。
・移動方向や効果も増設可能。
目次
2.動く壁のしくみ
・防具立ての召喚。
・スコアボードの作成
3.【Java版】ブロックを、押したり引いたり
・ブロックを押す。
・ブロックを引く。
4.【統合版】ブロックを、押したり引いたり
・ブロックを押す。
・ブロックを引く。
※「as」や「minecraft:」などのコマンドは簡略化しています。一部のコマンド、マルチプレイやサーバーでは必要な場合があります。
コマンドブロックの使い方
装置はシングルプレイ用です。マルチプレイで遊ぶには、ターゲットセレクタにタグや引数を追加してください。詳しいコマンドブロックの使い方は、関連記事を確認ください。
- 詳しくはこちら→ 【テクニック】コマンドブロックの使い方。1-2
動く壁のしくみ
防具立て「動く壁」に近づいた時、タイマーを起動。3秒経ったら壁を移動します。引く場合はスニークを使います。タイマーを使う事で押すと引くを使い分けたり、壁の重さを表現。効果音やパーティクルを追加すれば、さらにリアルになります。※近づくと離れるを応用すれば、自動扉も作れます。
滑らかな石で壁を作成。※変更可。
防具立ての召喚。
防具立ての位置が重要になるため、align(アライン)を使い整数位置に設置します。Java版は装置の動作が確認出来たら、防具立てを透明に差し替えます。
【Java版】
execute at @p align xz run summon armor_stand ~0.5 ~ ~0.5 {CustomName:'"動く壁"',CustomNameVisible:1b} |
防具立てを透明にするには「Invisible:1b」を使用。
【統合版】
execute at @p align xz run summon armor_stand 動く壁 ~0.5 ~ ~0.5 |
スコアボードの作成。
タイマー用にスコアボード「count」を作成。装置が完成するまで、サイドバーに表示しておきます。
【Java版/統合版】
scoreboard objectives add count dummy scoreboard objectives setdisplay sidebar count |
【Java版】 ブロックを、押したり引いたり
壁を引く装置が増設出来るよう、コマンドブロックは離れて設置しています。押すだけで良い場合は、設置し直してください。プレイヤーの向きで、ブロックの移動方向も変更出来るように設計。※今回は北向きのみ。他の方向に移動する場合は、「サポートブレーキ付!自動車。No.17」を参考。
⑥は動力が必要。②⑦は条件付き。
ブロックを押す。
プレイヤーが壁に密着した時、回転式のクロック信号装置でタイマーを動かします。壁にするブロックの種類やタイマーの時間は、好みで変更してください。※ブロックは相対座標で移動しています。向きを変更する場合は、座標の変更も必要です。
【Java版】
①execute at @e[name="動く壁"] at @p[distance=..0.9] as @e[name="動く壁"] at @s run tp @s ~ ~ ~ ~18 ~ ②execute as @e[name="動く壁",y_rotation=0] at @p run scoreboard players add 押す count 1 ------ ③execute at @e[name="動く壁"] at @p[distance=1..] run scoreboard players reset 押す count ------ ④execute at @e[name="動く壁"] run fill ~ ~ ~ ~ ~1 ~ smooth_stone ------ ⑤execute if entity @p[y_rotation=165..-165] ⑥execute if score 押す count matches 3 at @e[name="動く壁"] run tp @e[name="動く壁"] ~ ~ ~-1 ⑦execute at @e[name="動く壁"] run fill ~ ~ ~ ~ ~1 ~1 air |
【タイマー】①②
「動く壁」に近づいた時、タイマーを起動。
------
【リセット】③
「動く壁」から離れた時、タイマーをリセット。
------
【壁】④
「動く壁」に滑らかな石を設置。
------
【北向き】⑤⑥⑦
カウントが3になった時、北に壁を移動。
ブロックを引く。
壁を押す装置にコマンドブロックを追加して、引く装置を作ります。プレイヤーが壁に密着した状態でスニークした時、壁を引きます。押す時と区別するため、メインハンドに粘着ピストンを持たせます。引く場合、2秒でブロックを移動。※押す装置と兼用のため。
①⑥⑦⑧は条件付き。⑤は動力が必要。
【統計】
scoreboard objectives add sneak minecraft.custom:minecraft.sneak_time
※統計を使ったスニーク検知。
【Java版】
①execute at @e[name="動く壁"] at @p[distance=1..] run clear @p sticky_piston 1 ------ ②execute at @e[name="動く壁"] if entity @p[distance=..0.9,scores={sneak=1..}] ③execute at @e[name="動く壁"] run scoreboard players set @p[distance=..0.9,scores={sneak=1..}] sneak 0 ④item replace entity @p weapon.mainhand with sticky_piston ------ ⑤execute as @p[nbt={SelectedItem:{id:"minecraft:sticky_piston"}}] if score 押す count matches 2 at @e[name="動く壁"] run tp @e[name="動く壁"] ~ ~ ~1 ⑥scoreboard players reset 押す count ⑦execute as @p[nbt={SelectedItem:{id:"minecraft:sticky_piston"}}] at @s run tp @s ~ ~ ~1.5 ⑧execute at @e[name="動く壁"] run fill ~ ~ ~ ~ ~1 ~-1 air |
【タイマー】①
「動く壁」から離れた時、粘着ピストンを削除。
------
【リセット】②③④
「動く壁」の近くでスニークした時、粘着ピストンを入手。
------
【北向き】⑤⑥⑦⑧
カウントが2になった時、南に壁を移動。
【統合版】 ブロックを、押したり引いたり
コマンドの違いから、ブロックの配置位置が変わるため、統合版を別項目にしました。装置のしくみはJava版と同じです。※統合版は防具立てを透明で設置出来ないため、エフェクトを使う必要があります。
①はティックの遅延:20。最初のティックで実行:オフ。⑥は動力が必要。⑦は条件付き。
ブロックを押す。
ティックの遅延が使えるため、回転式のクロック信号装置は不要。コマンドブロックの数を減らせそうでしたが、Java版と同じ数になりました。
【統合版】
①execute at @e[name="動く壁"] at @p[r=0.9] run scoreboard players add 押す count 1 ------ ②effect @e[name="動く壁"] invisibility 1 0 true ------ ③execute at @e[name="動く壁"] if entity @p[rm=1] run scoreboard players reset 押す count ------ ④execute at @e[name="動く壁"] run fill ~~~ ~~1~ smooth_stone ------ ⑤execute if entity @p[rym=165,ry=-165] ⑥execute if score 押す count matches 3 at @e[name="動く壁"] run tp @e[name="動く壁"] ~~~-1 ⑦execute at @e[name="動く壁"] run fill ~~~ ~~1~1 air |
【タイマー】①
「動く壁」に近づいた時、タイマーを起動。
------
【壁】②④
「動く壁」を透明にして、滑らかな石を設置。
------
【リセット】③
「動く壁」から離れた時、タイマーをリセット。
------
【北向き】⑤⑥⑦
カウントが3になった時、北に壁を移動。
ブロックを引く。
統合版で統計は使えませんが、スニークを検知が出来ます。メインハンドの粘着ピストンを使わなくても動作しますが、一人称の時の押引きが分かりにくくなります。メッセージの表示や、音を使った装置に変更しても良さそうです。
④は動力が必要。⑤⑥⑦は条件付き。
【統合版】
①execute as @a at @s unless entity @s[y=~1.5,dy=0] if entity @s[y=~0.7,dy=0] ②replaceitem entity @p slot.weapon.mainhand 0 sticky_piston ------ ③execute at @e[name="動く壁"] if entity @p[rm=1] run clear @p sticky_piston 0 1 ------ ④execute if entity @p[hasitem={location=slot.weapon.mainhand,item=sticky_piston}] if score 押す count matches 2 at @e[name="動く壁"] run tp @e[name="動く壁"] ~~~1 ⑤scoreboard players reset 押す count ⑥execute as @p[hasitem={location=slot.weapon.mainhand,item=sticky_piston}] at @s run tp @s ~~~1.5 ⑦execute at @e[name="動く壁"] run fill ~~~ ~~1~-1 air |
【タイマー】①②
「動く壁」の近くでスニークした時、粘着ピストンを入手。
------
【リセット】③
「動く壁」から離れた時、粘着ピストンを削除。
------
【北向き】④⑤⑥⑦
カウントが2になった時、南にプレイヤーと壁を移動。