この記事では、前回作ったウェルカム演出Datapackにスコアボードのカウンターとサイドバーへの数値表示を追加します。scoreboard コマンドを使って「プレイヤーごとに数値を持たせる」方法を、実際に動くものを作りながら覚えましょう。記事を読み終えると、サイドバーに参加回数を表示するDatapackが完成します。
対応バージョン:Java Edition 1.21.11
前提知識
- Datapackの基本フォルダ構成(Datapackの基本的なフォルダ構成)
今回作るもの
前回のウェルカム演出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"
]
}
setup を welcome より先に並べるのは、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
set と add の違いを混同しやすいので注意してください。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"}]

まとめ
scoreboard objectives addでobjectiveを作り、dummyが汎用の数値管理に使うcriteriascoreboard players addで加算、setで任意の数値を代入できるsetdisplay sidebarでサイドバーにリアルタイム表示できるtellrawの中に{"score":...}を入れるとチャットにスコアを埋め込める- 初期化(
setup)は必ず加算より先に実行する順序が重要
スコアボードにはここで紹介した以外にも多くのコマンドと活用パターンがあります。criteriaの種類・チームスコア・タグとの組み合わせなど、より深く知りたい方は「スコアボードまとめ」も参考にしてみてください。
最後に大事なことを一つ。ここまで読んで「覚えることが多い……」と感じた方もいるかもしれませんが、最初から完璧に書こうとしなくて大丈夫です。コマンドを1行書いて /reload して試す、うまくいかなければ直してまた試す——この繰り返しがDatapack制作の本質です。実際に手を動かした回数だけ、確実に身についていきます。
次の記事では、スコアボードの値を「条件」として使う execute の書き方を解説します。カウンターの値に応じて処理を分岐させる、Datapack制作の核心に入っていきます。
