更新日:
1. ルールを決める(最初に一度だけ)
/gamerule natural_health_regeneration false
/difficulty hard
/gamerule keep_inventory false
1行目で、満腹でも体力が自然に回復しなくなります。1.21.10以前は naturalRegeneration という名前です。ゲームルールの新旧の名前は gamerule一覧 にまとめています。
2. 体力を表示する
/scoreboard objectives add hp health "♥"
/scoreboard objectives setdisplay list hp
/scoreboard objectives setdisplay below_name hp
health の基準は体力を自動で入れてくれます。list でTabキーの一覧に、below_name で頭の上の名前の下に体力が出ます。くわしくは 体力を表示するコマンド を見てください。
3. ワールドボーダーを用意する(最初に一度だけ)
/worldborder center 0 0
/worldborder set 1000
座標0, 0を中心に、1辺1000ブロックの四角い範囲だけで遊べるようにします。ボーダーの外にいると少しずつダメージを受けます。
4. スタート:ばらばらに配置する
/scoreboard objectives add died deathCount
/scoreboard players set @a died 0
/gamemode survival @a
/effect give @a instant_health 1 10 true
/spreadplayers 0 0 150 450 false @a
/worldborder set 50 3600s
ボタンで上から順に動くように並べます。spreadplayers は、中心から450ブロック以内に、おたがい150ブロック以上はなれるように全員をばらばらに置きます。チーム戦なら false を true にすると、同じチームの人が近くに置かれます。
最後の行で、ボーダーが3600秒(1時間)かけて1辺50ブロックまで少しずつ狭くなります。Java版1.21.11からは時間の数がティックになったので、秒で書くときは 3600s のように s を付けます。1.21.10以前は s を付けずに 3600(秒)と書きます。時間がたつほど全員が中央に集まるので、最後は戦うことになります。
5. 倒された人を観戦にする(くり返し)
/gamemode spectator @a[scores={died=1..},gamemode=survival]
くり返しコマンドブロック(常時実行)に入れます。1回でも倒された人はスペクテイターになり、残りの戦いを見て回れます。
6. 勝者を決める(くり返し)
/scoreboard objectives add uhc dummy
/execute store result score #alive uhc if entity @a[gamemode=survival]
/execute if score #alive uhc matches 1 unless entity @e[type=marker,tag=uhc_end] run title @a title [{"selector":"@a[gamemode=survival]"},{"text":" の勝ち!"}]
/execute if score #alive uhc matches 1 unless entity @e[type=marker,tag=uhc_end] run summon marker ~ ~ ~ {Tags:["uhc_end"]}
1行目は最初に一度だけ実行します。2〜4行目をくり返しとチェーンで並べます。サバイバルの人が1人だけになったら、その人の名前を出して勝ちを知らせます。知らせたあとに目印(marker)を出すので、タイトルは1回だけ出ます。次のゲームの前に /kill @e[type=marker,tag=uhc_end] で目印を消します。
うまくいかないときの確認ポイント
- 体力が回復してしまう:1のゲームルールの名前が、今のバージョンに合っているか確認します。
- spreadplayers がエラーになる:人数に対して範囲がせまいと置けません。450の数を大きくするか、150を小さくします。
- 始めた直後に勝者が出る:スタート前は全員サバイバルにしてから6を動かします。1人で試すとすぐ勝者になります。
- ボーダーがすぐ縮みきる:1.21.11以降で
sを付け忘れると、数がティック(20分の1秒)として扱われます。
よくある質問
金のリンゴを作りやすくできますか?
スタート時に give @a golden_apple 1 のように少し配ると、序盤で倒されにくくなります。
チーム戦にできますか?
team コマンドでチームを分け、spreadplayers の最後の false を true にすると、チームごとに近くに配置されます。勝者の判定は、残っている人のチームを調べる形にします。
ボーダーの外のダメージを強くできますか?
worldborder damage amount で、外にいるときの1ブロックあたりのダメージを変えられます。