スコアボード入門:ゲーム内で数値を管理しよう

この記事では、前回作ったウェルカム演出Datapackにスコアボードのカウンターとサイドバーへの数値表示を追加します。scoreboard コマンドを使って「プレイヤーごとに数値を持たせる」方法を、実際に動くものを作りながら覚えましょう。記事を読み終えると、サイドバーに参加回数を表示するDatapackが完成します。

対応バージョン:Java Edition 1.21.11

目次

前提知識

今回作るもの

前回のウェルカム演出Datapackを拡張して、次の2機能を追加します。

  • ゲームに参加するたびに「参加回数」を1ずつ加算する
  • 画面サイドバーに参加回数をリアルタイム表示する

スコアボードは「Datapack内でプレイヤーごとに数値を記録する仕組み」です。ポイント制のゲームやカウンター、フラグ管理など、あらゆる場面の基礎になります。

フォルダ構成の確認

前回から変更があるファイルは welcome.mcfunction と、新たに作る setup.mcfunction の2つです。

my_datapack/
├── pack.mcmeta
└── data/
    └── my_datapack/
        ├── function/
        │   ├── setup.mcfunction      ← 新規
        │   └── welcome.mcfunction    ← 変更
        └── tags/
            └── function/
                └── minecraft/
                    └── load.json

ステップ1:スコアボードの「objective」とは何か

スコアボードを使うには、まず objective(オブジェクティブ) を作る必要があります。objectiveは「数値を入れる箱に名前をつけたもの」とイメージしてください。1つのobjectiveに対して、プレイヤーそれぞれが別々の数値を持てます。

objectiveには criteria(クライテリア) という種類があります。今回使う dummy は「自動では変化しない、手動で書き込む用途の汎用タイプ」です。ポイントやフラグ管理にはほぼ dummy を使います。

ステップ2:setup.mcfunction を作る

setup.mcfunction はワールドのロード時に一度だけ走るファンクションです。ここでスコアボードの初期化をします。

# join_countというobjectiveをdummyで作成
scoreboard objectives add join_count dummy "参加回数"

# サイドバーに表示する
scoreboard objectives setdisplay sidebar join_count

scoreboard objectives add の書式は add [名前] [criteria] [表示名] です。表示名(ここでは "参加回数")はサイドバーやタブ一覧に出るラベルなので、プレイヤーにわかりやすい日本語にしておくと便利です。

次に load.json を編集して、setup を先に呼ぶように追記します。

{
  "values": [
    "my_datapack:setup",
    "my_datapack:welcome"
  ]
}

setupwelcome より先に並べるのは、objectiveが存在しない状態で加算コマンドを実行するとエラーになるためです。初期化は必ず先に行いましょう。

ステップ3:welcome.mcfunction にカウンターを追加する

前回の welcome.mcfunction に3行追加します。

# --- 前回からの引き継ぎ ---
tellraw @a [{"text":"ようこそ!","color":"gold","bold":true},{"text":"このサーバーに参加してくれてありがとう。","color":"white"}]
give @a minecraft:bread 5
effect give @a minecraft:speed 30 1 true
playsound minecraft:entity.player.levelup master @a ~ ~ ~ 1 1

# --- 今回追加する2行 ---
scoreboard players add @a join_count 1
tellraw @a [{"text":"あなたの参加回数:","color":"aqua"},{"score":{"name":"@a","objective":"join_count"},"color":"white"}]

scoreboard players add @a join_count 1 は「@a(全プレイヤー)の join_count に1を加える」という意味です。初めて参加するプレイヤーはスコアが存在しないため自動的に0から始まり、1が加算されて1になります。

⚠️ 補足:現状は「誰かが参加するたびに全員のカウントが増える」
この実装では @a(全プレイヤー対象)を使っているため、誰か1人が参加するだけで、オンライン中の全プレイヤーのカウントが同時に加算されてしまいます。「参加したプレイヤー本人だけ」に絞るには execute as @a[...] を使った条件実行が必要です。この書き方は次の記事で詳しく解説します。

tellraw の中で {"score":{"name":"@s","objective":"join_count"}} と書くと、メッセージの中にそのプレイヤー自身のスコアをリアルタイムで埋め込めます。前回覚えた tellraw にスコアボードが組み合わさった、少し応用的な使い方です。

ステップ4:スコアを確認・リセットする方法

開発中にスコアを確認・操作したいときは、ゲーム内チャットから直接コマンドを打てます。

# 自分のスコアを確認する
scoreboard players get @s join_count

# スコアを任意の数値にセットする
scoreboard players set @s join_count 0

# objectiveごとリセットしたいとき(開発テスト用)
scoreboard objectives remove join_count

setadd の違いを混同しやすいので注意してください。set は「この数値にする」、add は「今の数値にこれだけ足す」です。カウンターには add、初期化・フラグのON/OFFには set を使うのが基本パターンです。

完成後の全体像

setup.mcfunction

scoreboard objectives add join_count dummy "参加回数"
scoreboard objectives setdisplay sidebar join_count

welcome.mcfunction

tellraw @a [{"text":"ようこそ!","color":"gold","bold":true},{"text":"このサーバーに参加してくれてありがとう。","color":"white"}]
give @a minecraft:bread 5
effect give @a minecraft:speed 30 1 true
playsound minecraft:entity.player.levelup master @a ~ ~ ~ 1 1
scoreboard players add @a join_count 1
tellraw @a [{"text":"あなたの参加回数:","color":"aqua"},{"score":{"name":"@s","objective":"join_count"},"color":"white"}]
参加演出が全部まとめて走るようす(tellrawメッセージ・パン入手・サイドバー更新)のGIF

まとめ

  • scoreboard objectives add でobjectiveを作り、dummy が汎用の数値管理に使うcriteria
  • scoreboard players add で加算、set で任意の数値を代入できる
  • setdisplay sidebar でサイドバーにリアルタイム表示できる
  • tellraw の中に {"score":...} を入れるとチャットにスコアを埋め込める
  • 初期化(setup)は必ず加算より先に実行する順序が重要

スコアボードにはここで紹介した以外にも多くのコマンドと活用パターンがあります。criteriaの種類・チームスコア・タグとの組み合わせなど、より深く知りたい方は「スコアボードまとめ」も参考にしてみてください。


最後に大事なことを一つ。ここまで読んで「覚えることが多い……」と感じた方もいるかもしれませんが、最初から完璧に書こうとしなくて大丈夫です。コマンドを1行書いて /reload して試す、うまくいかなければ直してまた試す——この繰り返しがDatapack制作の本質です。実際に手を動かした回数だけ、確実に身についていきます。

次の記事では、スコアボードの値を「条件」として使う execute の書き方を解説します。カウンターの値に応じて処理を分岐させる、Datapack制作の核心に入っていきます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次