更新日:
1. 準備(最初に1回だけ)
/scoreboard objectives add vote trigger
/scoreboard objectives add votes dummy "投票結果"
/scoreboard objectives setdisplay sidebar votes
vote は、OPでない人も /trigger で自分の値を変えられるスコアです。votes には集計した票の数を入れ、サイドバーに出します。trigger のしくみは triggerコマンドの使い方 にまとめています。
2. 投票を始める
/scoreboard players set @a vote 0
/scoreboard players enable @a vote
/tellraw @a [{"text":"次のゲームを選んでください ","color":"yellow"},{"text":"[A] 鬼ごっこ","color":"aqua","click_event":{"action":"run_command","command":"/trigger vote set 1"}},{"text":" "},{"text":"[B] かくれんぼ","color":"green","click_event":{"action":"run_command","command":"/trigger vote set 2"}}]
全員の票を0にしてから、投票できる状態(enable)にします。チャットの [A] か [B] を押すと、その人の vote が1か2になります。trigger は1回使うと使えなくなるので、1人1票になります。1.21.4以前は click_event を clickEvent、command を value にして書きます。
3. 票を数える
# 反復・常時実行
execute store result score A votes if entity @a[scores={vote=1}]
# チェーン・常時実行
execute store result score B votes if entity @a[scores={vote=2}]
Aを選んだ人数とBを選んだ人数を数えて、サイドバーの「A」「B」に出します。押されるたびに数字が変わります。数え方のしくみは execute storeの使い方 を見てください。
4. 結果を発表する
execute if score A votes > B votes run title @a title {"text":"Aの勝ち!","color":"aqua"}
execute if score B votes > A votes run title @a title {"text":"Bの勝ち!","color":"green"}
execute if score A votes = B votes run title @a title {"text":"引き分け","color":"gray"}
締め切りのときに、ボタンなどで1回だけ動かします。if score で2つのスコアを比べています。タイトルの出し方は titleとtellrawで画面表示を作る基本 にまとめています。
5. 次の投票の準備
/scoreboard players reset @a vote
/scoreboard players set A votes 0
/scoreboard players set B votes 0
締め切ったあとに押されないよう、vote を消しておきます。もう一度投票するときは2から始めます。
うまくいかないときの確認ポイント
- ボタンを押しても何も起きない:2の
enableを実行したか確認します。enableしないと、OPでない人は trigger を使えません。 - 2回目を押すとエラーが出る:すでに1回押した人です。もう1回押させたいときは、その人だけ enable し直します。
- 統合版で使いたい:統合版には trigger とチャットのボタンがありません。ボタン付きのコマンドブロックを2つ置き、押した人に票を足す形にします。
よくある質問
選択肢を3つ以上にできますか?
ボタンを [C] まで足して set 3 にし、3の数える行を1つ増やします。
だれが何に投票したか見られますか?
/scoreboard players list プレイヤー名 で、その人の vote の値が見られます。
投票し直せるようにできますか?
締め切る前に、もう一度 /scoreboard players enable @a vote を実行すると、押し直した方に変わります。