更新日:
1. 準備(最初に1回だけ)
/scoreboard objectives add jump minecraft.custom:minecraft.jump
/scoreboard objectives add sneak minecraft.custom:minecraft.sneak_time
jump はジャンプすると1増え、sneak はしゃがんでいる間1ティックごとに1増えるスコアです。しゃがみの判定は しゃがむと発動するコマンド でもくわしく説明しています。
2. 鉄ブロックの並べ方
鉄ブロックを、同じX・Zの場所に5マスおきに縦に並べます。たとえば Y=64 の床に鉄ブロックを置いたら、上の階は Y=69、その上は Y=74 です。それぞれの階の床にこの鉄ブロックが埋まっている形になります。
3. ジャンプで上の階へ
# 反復・常時実行
execute as @a[scores={jump=1..}] at @s if block ~ ~-0.5 ~ minecraft:iron_block if block ~ ~4.5 ~ minecraft:iron_block run tp @s ~ ~5 ~
# チェーン・常時実行(ここから下は全部チェーン)
scoreboard players reset @a[scores={jump=1..}] jump
足元と5マス上の両方に鉄ブロックがあるときだけ、5マス上へテレポートします。ジャンプした瞬間は少し体が浮いているので、~-1 ではなく ~-0.5 で足元を調べます。~ の意味は ~ と ^ の違い にまとめています。
4. しゃがむと下の階へ
execute as @a[scores={sneak=10..}] at @s if block ~ ~-0.5 ~ minecraft:iron_block if block ~ ~-5.5 ~ minecraft:iron_block run tp @s ~ ~-5 ~
scoreboard players reset @a[scores={sneak=10..}] sneak
execute as @a at @s unless block ~ ~-0.5 ~ minecraft:iron_block run scoreboard players reset @s sneak
鉄ブロックの上で0.5秒(10ティック)しゃがむと、下の階へ移動します。しゃがみ続けると0.5秒ごとにもう1つ下へ進みます。3行目で、鉄ブロックの上にいない人のしゃがみ時間を消しておくので、ほかの場所でしゃがんだ分は数えません。
5. 音を鳴らす
execute as @a[scores={jump=1..}] at @s if block ~ ~-0.5 ~ minecraft:iron_block run playsound minecraft:entity.enderman.teleport master @s ~ ~ ~ 1 1.5
3の反復ブロックのすぐ後ろ(jumpを消す行より前)にチェーンで入れます。テレポートしたあとの足元は上の階の鉄ブロックなので、移動した先で音が鳴ります。
うまくいかないときの確認ポイント
- ジャンプしても上がらない:上の階の鉄ブロックがちょうど5マス上(Yが5大きい)にあるか確認します。
- 一気に何階も下がる:
sneak=10..の数を20に増やすと、1秒に1階ずつになります。 - 統合版で使いたい:統合版にはジャンプとしゃがみを数えるスコアがないので、この方法は使えません。ワープ床 のように、乗ったらテレポートする形なら作れます。
よくある質問
鉄ブロック以外にできますか?
できます。if block の minecraft:iron_block を、使いたいブロックのIDに変えます。
階と階の間を5マス以外にできますか?
4.5と5、-5.5と-5の数を、間の高さに合わせて変えます。全部の階で同じ高さにします。
ほかのプレイヤーも一緒に運べますか?
このしくみでは、ジャンプやしゃがみをした本人だけが移動します。