更新日:
1. 準備(最初に一度だけ)
/gamerule keep_inventory true
/gamerule immediate_respawn true
/spawnpoint @a 0 200 0
地面に落ちて死んでも、すぐにスタート地点(0 200 0)から復活します。1.21.10以前と統合版は keepInventory・doImmediateRespawn と書きます。
2. ステージ1の水に着地したら次へ(くり返し)
/execute as @a at @s if block ~ ~ ~ water if entity @s[x=-10,y=100,z=-10,dx=20,dy=10,dz=20] run tp @s 100 200 0
くり返しコマンドブロック(常時実行)に入れます。ステージ1のゴールの水(Y=100あたり)に入った人を、ステージ2のスタート(100 200 0)に移動させます。ステージごとに範囲と行き先を変えたコマンドを並べます。
3. 復活地点を次のステージにする
/execute as @a at @s if block ~ ~ ~ water if entity @s[x=-10,y=100,z=-10,dx=20,dy=10,dz=20] run spawnpoint @s 100 200 0
2と同じ条件で復活地点も動かすと、ステージ2で失敗したときにステージ2から始められます。2より前にこのコマンドを実行するように並べます。復活地点の決め方は spawnpointコマンドの使い方 を見てください。
4. 最後のステージでクリアを知らせる
/execute as @a at @s if block ~ ~ ~ water if entity @s[x=190,y=100,z=-10,dx=20,dy=10,dz=20] run tellraw @a [{"selector":"@s"},{"text":" がクリアしました!","color":"gold"}]
最後の水に入った人を全員に知らせます。続けてロビーへ tp すると、何度もメッセージが出るのを防げます。
5. タイムを計る(Java版)
/scoreboard objectives add time dummy "タイム"
/scoreboard players add @a[tag=playing] time 1
1行目は最初に1回だけ実行します。スタートするときに /tag @a add playing で playing タグを付け、4のゴールのコマンドでタグを外すと、ゴールした人のタイムが止まります。2行目をくり返しコマンドブロックに入れると、遊んでいる人のスコアが1秒に20ずつ増えます。タイムの表示のしかたは パルクールをコマンドで作る方法 のタイマーと同じです。
うまくいかないときの確認ポイント
- 水に入っても進まない:範囲(x・y・z と dx・dy・dz)に水の場所が入っているか確認します。
- 前のステージに戻される:3の復活地点のコマンドが、2より先に実行されているか確認します。
- 統合版で作るには:2〜4は統合版でも同じ書き方で使えます。
よくある質問
水以外のブロックをゴールにできますか?
if block ~ ~-1 ~ gold_block のようにすると、金ブロックに着地したらゴールにできます。
落下ダメージをなくしたほうがいいですか?
地面に落ちたら失敗にするので、落下ダメージはそのままにしておきます。
ステージをいくつ作れますか?
ステージの数だけ2と3のコマンドを並べれば、いくつでも作れます。