【マイクラコマンド】「bossbar」コマンドを使ってタイマーゲージを表示する
#ふつーのひとのマイクラコマンド教室
この記事ではピストン等を一切使わず、bossbarのみでできるタイマーゲージについて解説します。
※functionの使い方はコチラをクリック!
bossbarコマンド?
タイトルに「bossbar」コマンドとありますが、みなさんご存じでしょうか?「bossbarなんだからボスモンスターのHPを表示するんでしょ?そんなの使い道ないよ!」という意見が聞こえてきますが実は無限の可能性を秘めて非常にナイスなコマンドなのです。無限の可能性の1つ「タイマーゲージ表示」を今回はご紹介しましょう。
↑こんな感じで画面上部にタイマーを表示します。
bossbarの使い方
bossbarの使い方を解説します。今回は↓のファンクションデータの中身を見ていきましょう。
↑このファンクションデータの使い方はコチラ!
準備
まずは下準備として下記コマンドを実行して下さい。
# 「DummyPlayer」タグのアーマースタンドを召還
/summon minecraft:armor_stand ~ ~ ~ {Tags:[DummyPlayer],NoGravity:true,Marker:true,Invisible:true}
# スコアボードに「time」というスコアを追加
/scoreboard objectives add time dummy
# id「my:time」というボスバーを作成
/bossbar add my:time "time"
このタイマーでは「DummyPlayer」というアーマースタンドの「time」というスコアが表示される時間(=残り時間)となります。これを「my:time」というボスバーに表示してあげます。
タイマーセットについて
タイマーをセットするには「set_timer.mcfunction」のコマンドを使用しています。チャットのボタンを押すと「DummyPlayer」の「time」がそれぞれ300秒(=5分),600秒(=10分),900秒(15分)となります。
ポイント
・"clickEvent":{"action":"run_command","value":"/scoreboard players set @e[tag=DummyPlayer] time 300"} でチャット欄にボタンを作成して任意のコマンドを実行できる。
# タイマーをセットさせる
tellraw @s ["",{"text":"タイマーセット","color":"green"}]
tellraw @s ["",{"text":"5分","color":"green","clickEvent":{"action":"run_command","value":"/scoreboard players set @e[tag=DummyPlayer] time 300"}}]
tellraw @s ["",{"text":"10分","color":"green","clickEvent":{"action":"run_command","value":"/scoreboard players set @e[tag=DummyPlayer] time 600"}}]
tellraw @s ["",{"text":"15分","color":"green","clickEvent":{"action":"run_command","value":"/scoreboard players set @e[tag=DummyPlayer] time 900"}}]
タイマースタートについて
タイマーのスタートには「start_timer.mcfunction」をのコマンドを使用しています。まず始めにボスバーを誰に見せるのかを指定します。次にボスバーの色を設定し、ボスバーゲージの最大値を先ほどセットしたタイマーの秒数に指定します。最後に、タイマーをスタートするfunctionを呼び出してあげます。
ポイント
・scoreboard players get @e[tag=DummyPlayer,limit=1] time で「DummyPlayer」の「time」を参照する。
・execute store result bossbar my:time max run ~ でbossbar「my:time」のmaxというスコアに~のコマンドの結果を設定できる。
# 「my:time」ボスバーを全員に見せる
bossbar set my:time players @a
# ボスバーを青色で表示する
bossbar set my:time color blue
# 「DummyPlayer」の「time」のスコアをとってきて「my:time」ボスバーのmax(ゲージの最大値)を指定する。
execute store result bossbar my:time max run scoreboard players get @e[tag=DummyPlayer,limit=1] time
# タイマーをつける
function utility:timer
タイマーの時間を減らす方法について
タイマーの時間を減らすのは「timer.mcfunction」のコマンドを用いて行っています。「DummyPlayer」の「time」が残り時間となるので、それを減らして、ボスバーに表示しています。
ポイント
・{"score":{"name":"@e[tag=DummyPlayer]","objective":"time"},"color":"red"} で「DummyPlayer」の「time」を文字として表示できる。
# 「DummyPlayer」の「time」(=残り時間)を減らす
scoreboard players remove @e[tag=DummyPlayer] time 1
# ボスバーに残り時間を数字で表示する
bossbar set my:time name ["残り時間: ",{"score":{"name":"@e[tag=DummyPlayer]","objective":"time"},"color":"red"}]
# ボスバーのゲージを減らす
execute store result bossbar my:time value run scoreboard players get @e[tag=DummyPlayer,limit=1] time
# 残り時間があったら繰り返す
execute unless entity @e[tag=DummyPlayer,scores={time=0}] run schedule function utility:timer 1s
# 時間切れの表示
execute if entity @e[tag=DummyPlayer,scores={time=0}] run title @a title {"text":"時間切れ!","color":"red","bold":true}
# ボスバーを消す
execute if entity @e[tag=DummyPlayer,scores={time=0}] run bossbar set my:time players
以上です!
ボスバーはプレイヤーによって違うゲージを見せることもできるので、魔法力ゲージやスピードゲージを作ることもできそうですね。
おまけ(2021/9/25追記)
タイマー表示の分と秒を分けられるようにしてみました!
画像では「:」で区切ってますが、「4分50秒」みたいな表示もできます~。
コマンド作成の前に下準備として下記コマンドを実行してください。
# スコアボードに「minute」というスコアを追加(分の数値用)
/scoreboard objectives add minute dummy
# スコアボードに「second」というスコアを追加(秒の数値用)
/scoreboard objectives add second dummy
# スコアボードに「tmpTime」というスコアを追加(計算用)
/scoreboard objectives add tmpTime dummy
# 2023/1/3追記(60は自前で用意します~)
# スコアボードに「60」というスコアを追加(計算用)
/scoreboard objectives add 60 dummy
# DummyPlayerの「60」に60をセット
/scoreboard players set @e[tag=DummyPlayer] 60 60
準備が完了したら「timer.mcfunction」の中身を下記のように書き換えてください。
ポイント
・bossbar set my:time name ["残り時間: ",{"score":{"name":"@e[tag=DummyPlayer]","objective":"time"},"color":"red"}]
↑の[ ]内はマイクラで文章を作成する際に使われているマイクラ式JSON記法で書かれていて、そこそこ自由に書き換えられる。
# 「DummyPlayer」の「time」(=残り時間)を減らす
scoreboard players remove @e[tag=DummyPlayer] time 1
# ↓↓↓ここから追記↓↓↓
#分、秒を計算(timeを直接計算すると値が変化してしまうのでいったん避難させている)
scoreboard players operation @e[tag=DummyPlayer] tmpTime = @e[tag=DummyPlayer] time
execute store result score @e minute run scoreboard players operation @e[tag=DummyPlayer] tmpTime /= @e[tag=DummyPlayer] 60
scoreboard players operation @e[tag=DummyPlayer] tmpTime = @e[tag=DummyPlayer] time
execute store result score @e second run scoreboard players operation @e[tag=DummyPlayer] tmpTime %= @e[tag=DummyPlayer] 60
# ↑↑↑ここまで追記↑↑↑
# ↓↓↓ここを変更↓↓↓
# ボスバーに残り時間を数字で表示する
bossbar set my:time name ["",{"text":"残り時間: ","color":"red","bold":true},{"score":{"name":"@e[tag=DummyPlayer]","objective":"minute"},"color":"red"},{"text":":","color":"red","bold":true},{"score":{"name":"@e[tag=DummyPlayer]","objective":"second"},"color":"red"}]
# ↑↑↑ここまで変更↑↑↑
# ボスバーのゲージを減らす
execute store result bossbar my:time value run scoreboard players get @e[tag=DummyPlayer,limit=1] time
# 残り時間があったら繰り返す
execute unless entity @e[tag=DummyPlayer,scores={time=0}] run schedule function utility:timer 1s
# 時間切れの表示
execute if entity @e[tag=DummyPlayer,scores={time=0}] run title @a title {"text":"時間切れ!","color":"red","bold":true}
# ボスバーを消す
execute if entity @e[tag=DummyPlayer,scores={time=0}] run bossbar set my:time players
これで時間が分秒で表示されてわかりやすくなりましたね!
マイクラ式JSON記法ですがマスターすると表現の幅が広がってよりコマンド制作が楽しくなります!興味のある方は「マイクラ JSON」とかで検索すると幸せになれるかも?
関連動画
↓こちらの配布マップでも使用しています~
↓PV
↓攻略動画
↓RAGのTwitterとかYoutubeとか
Twitter:@redastergardens
↓ ふつーのひととか
Twitter:@HNohito
この記事が気に入ったらサポートをしてみませんか?