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

2025-09-09

Java版1.21.6-、統合版v1.21.92-で動作確認。

隠し扉や、仕掛け装置、パズルゲームに使える。

ブロックを押したり引いたり。v1.1

ブロックを、押したり引いたり出来る壁(オブジェクト)を作ります。アクションゲームによくある仕掛け装置です。秘密基地の隠し扉や自動扉はもちろん、指定の位置に移動して宝箱出したり、罠を動かしたり。壁を移動して道を作るパズルゲームなどにも応用できます。壁を引く装置は、少し難しいですが、押す装置は簡単です。v1.1ではマルチプレイに対応しました。

 

◻︎装置の特徴
・ブロック壁の移動方法。
・タイマーで重さを表現。
・移動方向や効果も増設可能。

 

更新履歴
2025-6-22/マルチプレイに対応。完成データも追加しました。

 

 

目次

1.作成準備
・使用方法。

2.動く壁のしくみ
・防具立ての召喚。
・スコアボードの作成

3.【Java版】ブロックを、押したり引いたり
・ブロックを押す。
・ブロックを引く。

4.【統合版】ブロックを、押したり引いたり
・ブロックを押す。
・ブロックを引く。

5.ワールドデータ
・完成データをダウンロード。

 

※「as」や「minecraft:」など、一部のコマンドは簡略化。必要な場合は記入してあります。

 

作成準備

使用方法。

コマンドブロックの使い方、「アイテム検知」や「hasitem」の詳細は、関連記事をご確認ください。

 

 

 

動く壁のしくみ

防具立て「動く壁」に近づいた時、タイマーを起動。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」フォルダに入れる。

※二次配布は禁止です。