更新日:
1. 準備:一度だけ実行するコマンド
/scoreboard objectives add points dummy "ポイント"
/scoreboard objectives setdisplay sidebar points
/team add red
/team add blue
/team modify red color red
/team modify blue color blue
/team modify red friendlyFire false
ポイントを数えるスコアと、色分けしたチームを作ります。friendlyFire false で、同じチーム同士は攻撃できなくなります(teamコマンドの使い方)。
2. 開始:ボタンを押したら実行するコマンド
/team join red @a[tag=red]
/team join blue @a[tag=blue]
/gamemode adventure @a
/clear @a
/effect clear @a
/scoreboard players set @a points 0
/spreadplayers 0 0 10 50 true @a
/give @a minecraft:wooden_sword
/title @a title {"text":"スタート!","color":"gold"}
/playsound minecraft:entity.player.levelup master @a ~ ~ ~ 1 1
- アドベンチャーモード:ブロックを壊せなくなるので、会場が壊されません。
- 持ち物と効果を空にする:前のゲームの物や効果が残らないようにします。
- ランダムに配置:
trueにすると同じチームが近くに固まります(spreadplayersの使い方)。 - 表示と音:開始が分かりやすくなります(titleの使い方・playsoundの使い方)。
コマンドブロックを並べる場合は、チェーンコマンドブロックでつなぐと順番どおりに実行されます(コマンドブロックの種類)。
3. ゲーム中:ずっと動かすコマンド
/execute as @a[team=red] at @s if block ~ ~-1 ~ minecraft:gold_block run scoreboard players add @s points 1
/execute if entity @a[scores={points=10..}] run title @a title {"text":"ゲーム終了!"}
反復コマンドブロックに入れると、毎ティック調べ続けます。1行目は金ブロックの上に立った赤チームのプレイヤーにポイントを足し、2行目は10点に届いた人がいるかを調べます。ポイントの数え方やタイマーはミニゲーム用のスコアボード例、残り時間のゲージはbossbarの使い方で説明しています。
1行目のように毎ティック足し続けると、乗っている間ずっと増えます。1回だけ数えたいときは、タグを付けて2回目以降を除くなどの工夫をします。
4. 終了とリセット
/tp @a 0 64 0
/gamemode adventure @a
/clear @a
/effect clear @a
/team leave @a
/scoreboard players reset @a points
/kill @e[type=minecraft:item]
全員をロビーに戻し、持ち物・効果・チーム・ポイントを元に戻して、落ちているアイテムを片付けます。次のゲームをすぐに始められる状態にしておくのが大切です。
統合版で作るとき
- 統合版には /team がありません。チームはタグ(
/tag @a[...] add red)で分けます。 - /effect は
/effect @a clear、/title は/title @a title スタート!のように書きます。 - スコアボード、/spreadplayers、/execute(1.19.50以降の新しい形)は統合版でも使えます。
うまくいかないときの確認ポイント
- コマンドが何度も実行される:インパルス型とリピート型の設定を確認します。開始のコマンドはインパルス型で1回だけにします。
- チャットが実行結果で埋まる:
/gamerule command_block_output false(1.21.10以前はcommandBlockOutput)で止められます。 - 参加していない人まで巻き込まれる:
@aのかわりに@a[tag=player]のように、参加者だけにタグを付けて絞ります(tagの使い方)。
よくある質問
OPでない人もボタンでゲームを始められますか?
コマンドブロックにつないだボタンなら、だれが押しても動きます。チャットで操作させたいときは /trigger を使います。
データパックで作ったほうがいいですか?
小さなゲームならコマンドブロックで十分です。コマンドが多くなってきたら、関数(function)にまとめると管理しやすくなります。
同じ会場で何回も遊べますか?
終了とリセットのコマンドをまとめておけば、ボタン1つで何回でも遊べます。会場が壊れる遊びでは、/clone で元の会場をコピーし直す方法もあります。