どうも!パイセンです。
今回はコマンドの基礎であるスコアボード(scoreboard)コマンドについて解説していきます。
他のコマンドと比べてやや中級者向けのコマンドですが、これをマスターするとコマンドで出来ることがとても増えるので頑張って習得しましょう!
ちなみに、2018/08/25現在ではスコアボードはJavaEdition(PC版)にしか実装されていませんが、今後のアプデでBedrockEdition(スマホ、switch、Win10等)にも実装が決まっています。BEでも大体の仕様はJEと同じでしょうから、今のうちにどんなことができるか、だけでも知っておくといいですよ!
2018/10/19追記
BEで1.7へアップデートされてscoreboardコマンドが実装されましたが、現段階では『dummy』スコアしか扱うことができません。
まだ『scoreboardコマンドは不完全』な状態なのでご了承ください。
BEでも作れるscoreboard式のタイマーを作りました。
スコアボードとは?ざっくり解説
スコアボードの主な役割をざっくりと説明すると、『プレイヤーやモブの行動を検知する』ことです。
もう少し具体的に言うと『○○を使った回数』だったり、『ジャンプした回数』だったりを測定することができるコマンドになっています。
そして、その検知した行動を他のコマンドに利用することが可能で、例えば『攻撃したら大爆発が起こる』ということもできます(よくわかんない例ですね・・・)。
スコアボードの使い方
では、今回はスコアボードの解説をしつつ、記事の後半では『スニーク状態だと透明になる』コマンドを作ってみます!
とてもシンプルなコマンドですが、スコアボードの基礎が学べるコマンドです。
実際にマイクラでプレイしながら読み進めることを勧めます。
スコアの作成『objectives add』
スコアボードコマンドを使うときはまず『スコアを作成』しなくては何もできません。
スコアの作成をするコマンドの構文は次になります。
<名前>の欄には英数字でスコアの名前(IDに近い)、<指定する条件>には検知したいプレイヤーの行動(後述します)、[表示する名前]には表示したい名前(日本語でもOK)を入力します。
今回はスニークした時を検知したいので、次のコマンドを実行します。Tキーを押し、チャット欄を開いて入力しましょう。
sneakTimeがスコアの名前(ID)、minecraft.custom:minecraft.sneak_timeが検知したいプレイヤーの行動(=スニーク)、1以上の時はスニーク中が表示する名前になっています。ちなみに、表示する名前に日本語を使うときはダブルクオーテーション(”)で囲みましょう。
このコマンドを実行すると、スニークを検知するスコアが作成されます。正確に言うと、スニーク状態になると、sneakTimeの値が毎秒20ずつ増えていくようになります。
スコアの値は見えるように変更できるので、次々の項目ではスコアの表示の設定をします。
検知可能な条件一覧
スコアボードはなんでもプレイヤーの行動を検知することができるわけではなく、ゲーム側で決められたことしか検知することができません。とは言え、かなりの項目があるので困ることは少ないと思います。
検知可能な項目はコチラにまとめました。もちろん全部覚える必要はないし、こんなことが検知できるんだな~程度で大丈夫です。
air | 空気の量(最大300) |
armor | 防御力(最大20) |
deathCount | 死んだ回数 |
dummy | ダミー、別の記事で紹介予定です。 |
food | 空腹度(最大20) |
health | 体力(最大20) |
killedByTeam.(色) | その色のチームに倒された回数 |
level | プレイヤーのレベル |
playerKillCount | プレイヤーを倒した回数 |
totalKillCount | プレイヤー・モンスター・動物を倒した回数 |
trigger | ごめんなさいよくわからないです |
xp | プレイヤーの経験値 |
minecraft.broken:(アイテムID) | そのアイテム(剣やツールなど耐久値があるアイテム)を破壊した回数 |
minecraft.mined:(アイテムID) | そのアイテムを採掘した回数 |
minecraft.crafted:(アイテムID) | そのアイテムをクラフトした回数 |
minecraft.picked_up:(アイテムID) | そのアイテムを拾った回数 |
minecraft.dropped:(アイテムID) | そのアイテムをQキーなどで落とした回数 |
minecraft.used:(アイテムID) | そのアイテムを使った回数 |
minecraft.killed:(エンティティID) | そのエンティティ(モンスターや動物など)を倒した回数 |
minecraft.killed_by:(エンティティID) | そのエンティティ(モンスターや動物)に倒された回数 |
minecraft.custom:minecraft.animals_bred | 動物を繁殖させた回数 |
minecraft.custom:minecraft.aviate_one_cm | エリトラで飛んだ距離 |
minecraft.custom:minecraft.boat_one_cm | ボートで移動した距離 |
minecraft.custom:minecraft.clean_armor | 防具を脱色した回数 |
minecraft.custom:minecraft.clean_banner | バナーを脱色した回数 |
minecraft.custom:minecraft.clear_shulker_box | シュルカーボックスを脱色した回数 |
minecraft.custom:minecraft.climb_one_cm | はしごやツタを登った距離 |
minecraft.custom:minecraft.crouch_one_cm | スニーク指定どうした距離 |
minecraft.custom:minecraft.damage_absorbed | 衝撃吸収のステータス効果で防いだダメージ量 |
minecraft.custom:minecraft. damage_damage_blocked_by_shield |
盾で防いだダメージ量 |
minecraft.custom:minecraft.damage_dealt | 与えたダメージ量 |
minecraft.custom:minecraft. damage_dealt_absorbed |
衝撃吸収のステータス効果で防がれたダメージ量 |
minecraft.custom:minecraft.damage_dealt_resisted | ○○耐性で防がれたダメージ量 |
minecraft.custom:minecraft.damage_taken | 受けたダメージ量 |
minecraft.custom:minecraft.death | 死んだ回数 |
minecraft.custom:minecraft.drop | アイテムを落とした回数 |
minecraft.custom:minecraft.eat_cake_slice | ケーキを食べた回数 |
minecraft.custom:minecraft.enchant_item | アイテムをエンチャントした回数 |
minecraft.custom:minecraft.fall_one_cm | 落ちた距離 |
minecraft.custom:minecraft.fill_cauldron | 大釜を水で満たした回数 |
minecraft.custom:minecraft.fish_caught | 魚を釣った回数 |
minecraft.custom:minecraft.fly_one_cm | クリエイティブモードや浮遊のステータス効果で浮いた距離 |
minecraft.custom:minecraft.horse_one_cm | 馬で進んだ距離 |
minecraft.custom:minecraft.inspect_dispenser | ディスペンサーの中を開いた回数 |
minecraft.custom:minecraft.inspect_dropper | ドロッパーの中を開いた回数 |
minecraft.custom:minecraft.inspect_hopper | ホッパーの中を開いた回数 |
minecraft.custom:minecraft.interact_with_beacon | ビーコンの中を開いた回数 |
minecraft.custom:minecraft. interact_with_brewingstand |
醸造台の中を開いた回数 |
minecraft.custom:minecraft. interact_with_crafting_table |
作業台の中を開いた回数 |
minecraft.custom:minecraft.interact_with_furnace | かまどの中を開いた回数 |
minecraft.custom:minecraft.jump | ジャンプした回数 |
minecraft.custom:minecraft.leave_game | 『セーブしてタイトルに戻る』を押した回数 |
minecraft.custom:minecraft.minecart_one_cm | トロッコで進んだ距離 |
minecraft.custom:minecraft.mob_kills | モブを倒した回数 |
minecraft.custom:minecraft.open_chest | チェストを開いた回数 |
minecraft.custom:minecraft.open_enderchest | エンダーチェストを開いた回数 |
minecraft.custom:minecraft.open_shulker_box | シュルカーボックスを開いた回数 |
minecraft.custom:minecraft.pig_one_cm | ブタで進んだ距離 |
minecraft.custom:minecraft.play_noteblock | 音符ブロックをたたいて鳴らした回数 |
minecraft.custom:minecraft.play_one_minute | プレイ時間 |
minecraft.custom:minecraft.play_record | レコードを再生した回数 |
minecraft.custom:minecraft.player_kills | 他のプレイヤーを倒した回数 |
minecraft.custom:minecraft.pot_flower | 花瓶に花をそえた回数 |
minecraft.custom:minecraft.sleep_in_bed | ベッドで寝た回数 |
minecraft.custom:minecraft.sneak_time | スニークした時間 |
minecraft.custom:minecraft.sprint_one_cm | 走った距離 |
minecraft.custom:minecraft.swim_one_cm | 泳いだ距離 |
minecraft.custom:minecraft.talked_to_villager | 村人に右クリックで話しかけた回数 |
minecraft.custom:minecraft.time_since_death | 最後に死んでから経過した時間 |
minecraft.custom:minecraft.time_since_rest | 最後に寝てから経過した時間 |
minecraft.custom:minecraft.traded_with_villager | 村人と交易をした回数 |
minecraft.custom:minecraft.trigger_trapperd_chest | トラップチェストを開いた回数 |
minecraft.custom:minecraft.tune_noteblock | 音符ブロックの音を変えた回数 |
minecraft.custom:minecraft.use_cauldron | 大釜で染色した回数 |
minecraft.custom:minecraft.walk_on_water_one_cm | 水上を浮きながら移動した距離 |
minecraft.custom:minecraft.walk_on_cm | 歩いた距離 |
minecraft.custom:minecraft.
walk_under_water_one_cm |
水中を歩いた距離 |
スコアの表示『setdisplay』
スコア表示の設定は『setdisplay』を使います。構文は次のようになります。
スコアを表示する場所はいくつからか選ぶことができます。
- belowName
- プレイヤーの名前の下に表示。シングルでは不可
- タブキーを押したときに表示されるプレイヤー一覧に表示。
- 画面右に表示。
- 特定の色のチームのプレイヤーのみ、画面右に表示。
よく使うのが『sidebar』です。なので、今回はsneakTimeをsidebarに表示させてみましょう。次のコマンドをチャットで実行してください。
実行した後に、Shiftキーを押してスニーク状態になってみてください。すると、画面の右に『1以上の時はスニーク状態』と表示され、なんだかものすごい勢いで数値が増えていってるのが見えるはずです。
この数値はスニークしている時間を表していて、1秒あたり20増えていきます。
スコアの値の増減・セット『players add/remove/set』
スコアの値は条件を満たすと自動で増えますが、プレイヤーが増やしたり減らすこともできます。
構文は次のようになります。
addは指定した数値だけ足され、removeは指定した数値だけ減らされ、setは指定した数値へ変更します。
試しに次のコマンドを実行してください。
すると、右のsneakTimeの値が10になります。次はこのコマンド。
sneakTimeに100を足すコマンドですね。10+100でもちろん110になります。
最後にこのコマンドを実行してください。
sneakTimeに120を引くコマンドになります。110-120で右の数字は-10になりますね。
addとremoveはあまり使いません。dummyのスコアを扱うときはめちゃくちゃ使いますが、それ以外だとあまり出番はありませんね(僕の場合は)。
使用例:スニーク状態だと透明になるコマンド
では、実際にスコアボードコマンドを使ったコマンドを作ってみましょう。
スコアの作成
ではまずスコアの作成をします。先ほどと同じコマンドなので、既に実行している方はスキップしてOKです。
これでスニークを検知するスコアを作成できました。スニーク状態になるとsneakTimeの値が毎秒20ずつ増えます。
ついでにスコアの値が分かりやすくなるように『setdisplay』のコマンドも実行しておきましょう。こちらも実行済みの方はスキップしてください。
そしてsneakTimeの値は0にします。
コマンドブロックの入手
今回はコマンドブロックを使うので、次のコマンドを実行してコマンドブロックを入手しましょう。今回使うのはリピートコマンドブロックです。
コマンドの入力
それでは、コマンドブロックにコマンドを入力していきます。
今回やりたいことは、『スニーク状態なら透明になる』でしたね。
透明状態になるコマンドはeffectコマンドです。なので、コマンドブロックを設置し、次のコマンドを入力してください。
コマンドを一つ一つ分解すると、/effect give でステータス効果を付与、@a[scores={sneakTime=1..}]は効果を付与する対象を選んでいます。
そしてminecraft:invisibilityがステータス効果、ここでは透明の効果ですね。前の『1』が効果時間、後ろの『1』がステータス効果のレベルになっています。
effectコマンドの内容はまた別の内容になるので省略しますが、注目してほしいのは@a[scores={sneakTime=1..}]の部分です。
@aはセレクターと言い、コマンドの内容の対象を選ぶ部分になります。このコマンドで言うと、透明になる対象を指定しているわけですね。
セレクターにはいくつか種類があり、今回使ったのは@a、意味はプレイヤー全員です。
そのセレクターの後ろに[]を書き、その中で細かい条件を指定することができます。
このコマンドではスコアの値を指定するscoresを使っています。
次のように書くと、Aの値がBのプレイヤー全員、という意味になります。
scoresは範囲を指定することもでき、次のように書くと『Aの値がB~Cのプレイヤー全員』という意味になります。
つまり今回入力した『@a[scores={sneakTime=1..}]』は、スコアのsneakTimeが1以上のプレイヤー全員、という意味になります。
では、コマンドブロックに入力したコマンド全体の内容は、『スコアのsneakTimeが1以上のプレイヤーは、透明の効果が付与される』ということになりますね。
コマンドを実行モードにしよう
では、コマンドブロックの隣にレッドストーンブロックを置いて実行モードにしましょう。
そしてF5を押して三人称視点になり、Shiftキーを押してスニークしてみてください。すると・・・
透明になりましたね!
スコアをリセットしよう
・・・ですが、スニーク状態を解除してもずっと透明のままです。これでは作りたいのとちょっと違いますね。
これは、スコアの値を0に戻していないからです。
透明化になる条件はsneakTimeの値が1以上の時、でしたね。
確かにスニーク状態になるとsneakTimeの値は1以上になり、透明になります。しかし、スニーク状態を解除してもsneakTimeの値は0にはなりません。
なので、スコアの値を0に戻すコマンドを追加してあげる必要があります。プレイヤーの行動を検知するコマンドには絶対に必要なので忘れないようにしましょう。
次はチェーンコマンドブロックを使います。次のコマンドを実行してください。
入手したら、チェーンコマンドブロックを青のリピートコマンドブロックの隣に設置します。
この時、リピートコマンドブロックの矢印の向きがチェーンコマンドブロックの方を向いているか確認してください。向いていないとコマンドが正常に実行されないので注意です。
ちゃんと正しい向きでしょうか?では、チェーンコマンドブロックに次のコマンドを入力してください。
スコアの値を0に変更するのは/scoreboard players set でしたね。
完成!!
これでやっと完成です!お疲れさまでした。
スニーク状態を解除したら、透明状態も解除されるはずです。
まとめ
以上、スコアボードの使い方(基礎編)でした。
スコアボードの機能はまだ紹介していない部分もありますが、とりあえずは基礎的な機能だけ抑えていきましょう。
これだけでもできることはたくさん増えるので、ぜひいろんなことを試してみてください。
こちらの記事ではスコアボードのもう一つの特徴、ダミースコアを使ってタイマーを作っています。ダミースコアもとても重要なコマンドなので、ぜひ習得しておきましょう。
やっとBEにスコアボードが追加されて嬉しい・・・。ですが、tagもparticleもdataも実装されてないので、コマンドの自由度で言えばまだまだJEには及ばないですね。