この記事では、Minecraft Java Edition(バージョン1.17.1)の情報をもとに執筆しています。
そのほかのバージョンや機種などでの動作は保証できません。
画面上部にタイマーを表示させたいマインクラフター
「bossbarコマンドでタイマーを作りたいけど、ゲージを減らすにはどうすればいいの? あと、タイマーが0になった時に文字を表示させたいんだよね」
こんな疑問を解決します!
- bossbarコマンドでタイマーを作る方法
- 特定のタイミングで文字を出すには、スコアボードの値を監視する
こんにちは! マインクラフターのなつめ(@natsume_717b)です。
マイクラ歴は5年程で、最近は脱出マップを配布・制作しています!
→配布マップ・ダウンロードページ
今回はbossbarコマンドを使って、画面にタイマーを表示させる方法を紹介します。
通常、bossbarコマンドはゲージを増加させることが基本的な使い方なのですが、scoreboardコマンド、executeコマンドと組み合わせることでゲージを減らすことも可能になります。
ゲージを減らせるようになるということは、ミニゲームなどの残り時間を表示することができるようになるということでもあります。
というわけで、この記事を読むことで制限時間などを表示させることができるようになりますよ。
タイマーの作り方のほか、ゲージが一定の値になった時に文字を表示させるコマンドについても触れています。
さっそく見ていきましょう!
bossbarコマンドでタイマーを作る方法
bossbarコマンドでタイマー、いわゆる制限時間を示すものを作るには、ゲージを減らしていく必要があります。
ゲージが減っていって、残り時間が0になった瞬間にゲージの残量も尽きるというイメージですね。
表示させたゲージを減らすには、scoreboardコマンドで作成したスコアボードとリンクさせる必要があります。
そのスコアボードの値を減らすことで、ゲージも減っていくといった感じです。
そのために、bossbarコマンド、scoreboardコマンドを使うのはもちろん、その2つを繋げるためにexecuteコマンドも使います。
具体的な手順は
- bossbarコマンドでゲージの作成・設定
- scoreboardコマンドでスコアボードの作成
- executeコマンドで、ゲージとスコアボードをリンクさせる
- 動作確認
となります。
それぞれの手順を詳しく見ていきましょう。
1:bossbarコマンドでゲージの作成・設定
まずはbossbarコマンドでゲージの作成からやっていきます。
今回は5分間のタイマーを作成する例でお話していきますので、よろしくお願いします。
以下のコマンドで、ゲージの作成をしましょう。
IDはtimeと名付けて、画面に表示される際は「制限時間」と映し出されるようにします。
/bossbar add time "制限時間"
そして、次に2つのコマンドを使って、そのゲージの最大値を6000に設定し、現状の値を6000に指定します。
要するに、ゲージはマックスの状態から減らしていく必要があるので、そのために最大値にしておくということですね。
6000という値が5分を示していますが、これは「秒数×20」で導き出すことができます。
5分は300秒なので、20倍すれば6000という値になりますね。
なぜ20倍なのかというと、マイクラのコマンドは1/20秒で動作します。
つまり、1つのコマンドブロックでは1秒間に最大20回のコマンドが動作することとなります。
先にネタバレをすると、防具立てをキルした回数でスコアボードの値を減らしていきます。
キルするためのリピートコマンドブロックも、当然1秒の間に20回動作することとなりますので、1秒をカウントするには20という値が必要というわけですね。
少し話が逸れてしまいましたが、以下のコマンドでゲージの最大値を変更します。
ゲージの最大値を変更するコマンド
bossbar set minecraft:time max 6000
minecraft:timeの部分が先ほどゲージを作成した時のIDとなります。
「minecraft:」の部分は勝手につきますが、気にしないでOKです。
とりあえずこれでbossbarコマンドでやるべきことは終了です。
次はscoreboardコマンドを使って、スコアボードを作成していきます。
2:scoreboardコマンドでスコアボードの作成
bossbarコマンドの準備が終わったら、次はscoreboardコマンドでbossbarコマンドとリンクさせるスコアボードを作成していきます。
この時、カウントするものはdummyです。
dummyとはプレイヤーなどの行動によって増減する項目がないもので、要するに基本的にコマンドで値を変更しなければならない項目となります。
コマンドだけで値を制御したいときに使う項目ですね。
というわけで、まずはスコアボードを作成しましょう。
コマンドはこちらです。
scoreboard objectives add killarmorstand dummy
先ほどもお話しましたが、防具立てをキルした回数でゲージ(スコアボードの値)を減らしていくので、スコアボードの名称はkillarmorstandと防具立てのキルを示しているのがすぐ分かるようにしました。
もちろん、必ずしも同じ名称にする必要はありませんので、それぞれ好きな名称にしてもらって大丈夫です。
ただし、この先で登場するスコアボードの名称は各自名付けたものを入力しないと機能しなくなりますので、気をつけてくださいね。
3:executeコマンドで、スコアボードとゲージをリンクさせる
ゲージ、スコアボードの作成ができれば、次はexecuteコマンドでこの2つをリンクさせます。
というわけで、以下のexecuteコマンドでリンクさせることができます。
(リピートコマンドブロックに無条件、常時実行の設定にして入力すること)
execute store result bossbar time value run scoreboard players get @p killarmorstand
リピートコマンドで常時実行する理由は、常に値の変動を感知する必要があるからですね。
スコアボードの値が変動する度にコマンドが実行されるようにするよりも、この方が簡単かつコマンドも少なくて済みます。
そして、このままではスコアボードの値が0のままなので、ゲージも0になってしまっています。
そこで、スコアボードの値をコマンドを使ってMaxの値にセットします。
打ち込むコマンドとしては以下の通りです。
/scoreboard players set @a killarmorstand 6000
最後に以下のコマンドを使って、ゲージを実際に表示させます。
今回は制限時間を表示させるので、全プレイヤーに表示されるようコマンドを打っていきます。
bossbar set minecraft:time players @a
画面上部に「制限時間」という文字とゲージが表示されれば、成功しています。
4:防具立てをキルしつつ、スコアボードの値を減らしていく
ゲージとスコアボードをリンクさせることができたら、防具立てを召喚、キルしてスコアボードの値を減らしていきます。
スコアボードの値が減っていくのに伴って、ゲージも減っていけば完成ということですね。
はじめに防具立てを最速でキルする方法として、リピートコマンドブロックに防具立てだけをキルするコマンドを打ち込んでいきます。
このリピートコマンドブロックも、無条件、常時実行にしておきましょう。
kill @e[type=minecraft:armor_stand]
さらに上記のコマンドが成功した際にスコアボードの値を減らしたいので、チェーンコマンドブロックに以下の内容を書き込みます。
チェーンコマンドブロックは向きに気をつけて設置しましょう。
scoreboard players remove @a killarmorstand 1
チェーンコマンドブロックの設定は、条件付き、常時実行にすればOKです。
これで防具立てをキルしてスコアボードの値を減らすシステムの完成です。
最後に、防具立てを最速で召喚していきます。
といっても、リピートコマンドブロックで防具立てを召喚し続けるだけです。
なので、コマンドとしては
summon minecraft:armor_stand ~ ~1 ~
と打ち込んでリピート、無条件、常時実行にすればOK。
ただし、常に実行し続けても負荷がかかるだけですので、常時実行ではなく「動力が必要」にすることをおすすめします。
「動力が必要」にすることで、赤石信号を受けている時だけ起動するようになります。
ゲーム開始時などに赤石信号を送るようにしておけば、しっかり時間をカウントすることが可能ということですね。
ゲーム終了時に赤石信号を送っているブロック(アイテム)を消すようにコマンドを組んでおけば、自動で防具立ての召喚も止まるようにできます。
赤石信号を送る方法としては、該当のコマンドブロックにレッドストーンブロックを隣接させるようにsetblockコマンドを使えば、コマンドが起動するようになりますよ。
これでタイマーの完成です。
お疲れさまでした。
特定のタイミングで文字を出すには、スコアボードの値を監視する
タイマーを使っていると、残り時間をゲージとは別に、文字として画面に表示させたい場合もあるかと思います。
特に「残り1分」といったような表示は大々的に表示させたいところです。
そこで、executeコマンドを使って好きなタイミングでtitleコマンドを実行します。
具体的なコマンドはこちら。
残り時間が1分になった時に、その旨を画面に表示させるコマンドです。
/execute if entity @a[scores={killarmorstand=1200}] run title @a title "残り時間1分"
このコマンドはリピートコマンドブロックに無条件、常時実行にしておいてください。
スコアボード(killarmorstand)の値が1200になった時に、titleコマンドで「残り時間1分」と画面に表示するようになっています。
1200という値はタイマーを作る際にも説明しましたが、「秒数×20」です。
1分は60秒ですので、1200になることが分かっていただけるかと思います。
また、titleコマンドについては、画面に文字を表示するtitleコマンド!表示時間も調整可能です!にて解説しているので、詳しく知りたい方はぜひどうぞ。
というわけで好きなタイミングで文字を出すには、executeコマンドでスコアボードの値を監視しておけばOKということでした。
まとめ
というわけで、今回のまとめです。
今回使ったコマンドはこちら。
- ゲージを作成するコマンド
/bossbar add time "制限時間"
- スコアボードを作成するコマンド
scoreboard objectives add killarmorstand dummy
- ゲージとスコアボードをリンクさせるコマンド
execute store result bossbar time value run scoreboard players get @p killarmorstand
- スコアボードの値を減らすコマンド
(このコマンドでゲージも減る)
scoreboard players remove @a killarmorstand 1
- スコアボードの値とゲージは常にリンクさせておく必要があるので、リピートコマンドブロックに打ち込んで、常に変化を反映させる必要があります。
- ゲージの特定のタイミングでコマンドを実行したい場合は、スコアボードの値で指定すると簡単に実行できます。
この記事は以上になります。