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

Java版1.21.6-、統合版v1.21.92-で動作確認。
隠し扉や、仕掛け装置、パズルゲームに使える。
ブロックを押したり引いたり。v1.1
ブロックを、押したり引いたり出来る壁(オブジェクト)を作ります。アクションゲームによくある仕掛け装置です。秘密基地の隠し扉や自動扉はもちろん、指定の位置に移動して宝箱出したり、罠を動かしたり。壁を移動して道を作るパズルゲームなどにも応用できます。壁を引く装置は、少し難しいですが、押す装置は簡単です。v1.1ではマルチプレイに対応しました。
◻︎装置の特徴
・ブロック壁の移動方法。
・タイマーで重さを表現。
・移動方向や効果も増設可能。
更新履歴
2025-6-22/マルチプレイに対応。完成データも追加しました。
目次
1.作成準備
・使用方法。
2.動く壁のしくみ
・防具立ての召喚。
・スコアボードの作成
3.【Java版】ブロックを、押したり引いたり
・ブロックを押す。
・ブロックを引く。
4.【統合版】ブロックを、押したり引いたり
・ブロックを押す。
・ブロックを引く。
5.ワールドデータ
・完成データをダウンロード。
※「as」や「minecraft:」など、一部のコマンドは簡略化。必要な場合は記入してあります。
作成準備
使用方法。
コマンドブロックの使い方、「アイテム検知」や「hasitem」の詳細は、関連記事をご確認ください。
- 詳しくこちら→【テクニック】コマンドブロックの使い方。1-2
- 詳しくこちら→【テクニック】アイテム検知を使って、コマンド実行。2-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="動く壁"] as @p[tag=push,distance=..0.9] as @e[name="動く壁"] at @s run tp @s ~ ~ ~ ~18 ~ ②execute as @e[name="動く壁",y_rotation=0] run scoreboard players add 押す count 1 ------ ③execute unless entity @a[tag=push] run scoreboard players reset 押す count ------ ④execute at @e[name="動く壁"] run tag @p[distance=..0.9] add push ⑤execute at @e[name="動く壁"] run tag @p[distance=1..] remove push ------ ⑥execute at @e[name="動く壁"] as @p[tag=push,distance=..2,y_rotation=165..-165] if score 押す count matches 3 at @e[name="動く壁"] run tp @e[name="動く壁"] ~ ~ ~-1 ⑦execute at @e[name="動く壁"] run fill ~ ~ ~ ~ ~1 ~1 air ------ ⑧execute at @e[name="動く壁"] run fill ~ ~ ~ ~ ~1 ~ smooth_stone |
【タイマー】①②
「動く壁」に近づいた時、タイマーを起動。
------
【リセット】③
タグ「push」が無い時、タイマーをリセット。
------
【タグ】④⑤
「動く壁」に近づいた時、タグ「push」を付ける。離れた時、削除。
------
【北向き】⑥⑦
カウントが3になった時、北に壁を移動。
------
【壁】⑧
「動く壁」に滑らかな石を設置。
ブロックを引く。
コマンドブロックを追加して、引く装置を作ります。プレイヤーが壁に密着した状態でスニークした時、壁を引きます。押す時と区別するため、メインハンドに粘着ピストンを持たせます。引く場合、2秒でブロックを移動。※押す装置と兼用のため。

⑤⑥は条件付き。
【統計】
scoreboard objectives add sneak minecraft.custom:minecraft.sneak_time
※統計を使ったスニーク検知。
【Java版】
| ①execute unless entity @a[tag=push] at @e[name="動く壁"] run clear @p[distance=1.2..] sticky_piston 1 ------ ②execute at @e[name="動く壁"] run scoreboard players set @p[distance=..0.9,scores={sneak=1..}] sneak 0 ③execute at @e[name="動く壁"] run item replace entity @p[tag=push,distance=..1.2] weapon.mainhand with sticky_piston ------ ④execute as @p[tag=push,nbt={SelectedItem:{id:"minecraft:sticky_piston"}}] if score 押す count matches 2 at @e[name="動く壁"] run tp @e[name="動く壁"] ~ ~ ~1 ⑤execute as @p[tag=push,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[tag=push,r=0.9] run scoreboard players add 押す count 1 ------ ②execute unless entity @a[tag=push] run scoreboard players reset 押す count ------ ③execute at @e[name="動く壁"] run tag @p[r=0.9] add push ④execute at @e[name="動く壁"] run tag @p[rm=1] remove push ------ ⑤execute at @e[name="動く壁"] as @p[tag=push,r=2,rym=165,ry=-165] if score 押す count matches 3 at @e[name="動く壁"] run tp @e[name="動く壁"] ~~~-1 ⑥execute at @e[name="動く壁"] run fill ~~~ ~~1~1 air ------ ⑦effect @e[name="動く壁"] invisibility 1 0 true ⑧execute at @e[name="動く壁"] run fill ~~~ ~~1~ smooth_stone |
【タイマー】①
「動く壁」に近づいた時、タイマーを起動。
------
【リセット】②
タグ「push」が無い時、タイマーをリセット。
------
【タグ】③④
「動く壁」に近づいた時、タグ「push」を付ける。離れた時、削除。
------
【北向き】⑤⑥
カウントが3になった時、北に壁を移動。
------
【壁】⑦⑧
「動く壁」を透明にして、滑らかな石を設置。
ブロックを引く。
統合版では統計が使えませんが、スニークを検知が出来ます。粘着ピストンを使わなくても動作しますが、一人称の時の押引きが分かりにくくなります。メッセージの表示や、音使った装置に変更しても良さそうです。

⑤⑥は条件付き。
【統合版】
| ①execute unless entity @p[tag=push] at @e[name="動く壁"] run clear @p[rm=1.2] sticky_piston 0 1 ------ ②execute at @e[name="動く壁"] as @p[tag=push,r=0.9] at @s unless entity @s[y=~1.5,dy=0] if entity @s[y=~0.7,dy=0] ③execute at @e[name="動く壁"] run replaceitem entity @p[tag=push,r=1.2] slot.weapon.mainhand 0 sticky_piston ------ ④execute as @p[tag=push,hasitem={location=slot.weapon.mainhand,item=sticky_piston}] if score 押す count matches 2 at @e[name="動く壁"] run tp @e[name="動く壁"] ~ ~ ~1 ⑤execute as @p[tag=push,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になった時、南に壁を移動。
ワールドデータ
ワールドデータは、コマンド入力不要。レバーを下げると装置が起動します。
完成データをダウンロード。
ダウンロード先/ブロックを押したり引いたり
◻︎統合版
【アイディア】ブロックを押したり引いたりv1.1.mcworld
iOS、Android/Minecraftで開く。Windows/ダブルクリックでインポート。
◻︎Java版
【アイディア】ブロックを押したり引いたりv1.1.zip
解凍後、ワールド内の「saves」フォルダに入れる。
※二次配布は禁止です。