更新日:
/scoreboard は、プレイヤーやエンティティに数値を持たせるためのコマンドです。ミニゲームの得点、サーバー内通貨、キル数、タイマー、クエスト進行などに使えます。
ポイント管理の最小例
Java版で試す場合は、/scoreboard objectives add points dummy で目標を作り、/scoreboard players set @p points 10 で10点を設定します。/scoreboard objectives setdisplay sidebar points で表示できます。points という名前は各コマンドで同じにしてください。
加算には /scoreboard players add @p points 1 を使います。お金として使う場合は、残高が十分か確認してから減算し、その後アイテムを渡す順序が重要です。ボタンを連打したときに重複購入できないか、0点のときにマイナスにならないかも検証してください。
目標を作る
まず、数値を保存する入れ物を作ります。手動管理する場合は dummy がよく使われます。
/scoreboard objectives add money dummy "Money"
money が内部名、Money が表示名です。内部名はコマンドで使うので、短く分かりやすい英数字にすると管理しやすくなります。
数値を設定・加算する
/scoreboard players set @p money 100
/scoreboard players add @p money 50
/scoreboard players remove @p money 20
上から順に、100に設定、50追加、20減少です。ショップ、報酬、ミニゲームの得点処理ではこの3つをよく使います。
画面に表示する
/scoreboard objectives setdisplay sidebar money
サイドバーに表示すると、プレイヤーが自分の点数や所持金を見やすくなります。表示を消したい場合は、別の表示先を使うか、表示設定を変更します。
お金システムの考え方
コマンドだけで経済システムを作る場合、実際のお金アイテムではなく、scoreboardの数値を所持金として扱うのが基本です。アイテム売買、ガチャ、ショップ、デイリーボーナスなどは、scoreboardの加算・減算で管理できます。
注意点
- 内部名を途中で変えると、既存コマンドも修正が必要になる
- 表示名と内部名を混同しない
- 大きなシステムでは、目的別にscoreboardを分ける
例えば money、point、timer、rank のように分けておくと、後で修正しやすくなります。
お店の例:100コインでパンを買う
/execute as @p if entity @s[scores={money=100..}] run give @s minecraft:bread 5
/execute as @p if entity @s[scores={money=100..}] run scoreboard players remove @s money 100
scores={money=100..} は「money が100以上の人」という条件です。as @p でボタンに一番近い人を先に決めてから調べるので、お金を持っている別の人が代わりに払うことはありません。足りない人にはどちらのコマンドも実行されないので、所持金がマイナスになりません。コマンドブロックでは、1行目をインパルス、2行目をその後ろのチェーンにして、ボタン1回で両方が順番に動くようにします。
OP権限のない人に操作させる(trigger)
/scoreboard objectives add shop trigger
/scoreboard players enable @a shop
ふつうのプレイヤーは /scoreboard を使えませんが、trigger 型の目標なら /trigger shop で自分の値を変えられます。値が変わった人をリピートのコマンドブロックで見つけて処理し、使ったあとは0に戻して、もう一度 enable します。
表示場所の種類
| 表示先 | 見え方 |
|---|---|
sidebar | 画面の右側に一覧で出る |
list | Tabキーで開くプレイヤー一覧に出る |
below_name | プレイヤーの名前の下に出る(1.20.1以前などは belowName) |
表示を消すときは、/scoreboard objectives setdisplay sidebar のように目標名を書かずに実行します。
よくある質問
スコアを0に戻すには?
/scoreboard players set @a money 0 で全員を0にします。記録ごと消すときは /scoreboard players reset @a money を使います。
統合版でも同じように作れますか?
目標の作成、加算、減算、表示は同じ書き方です。統合版には trigger 型がないため、ボタンとコマンドブロックで操作させます。