こんにちは!パイセンです。
今回はコマンドで時間表記できるタイマーを作ります!
PVPやミニゲームの制限時間など、たくさん使い道がありますね。
いたってシンプルなコマンドなので、初心者の方でも簡単に作ることができます。
それでは始めましょう!
動画版はコチラ
1.バージョンは1.13で作成
今回はPC版の1.13で作成します。
1.13ではコマンドに関するアップデートも多く、より簡単で多彩なことが作れるようになったので、特に理由がない限りは1.13でコマンド作成するのがオススメです!
2.タイマーの作り方・初級
1.まずはスコアボードの作成とアーマースタンドの召喚
まず最初に、時間を管理するための「スコアボード」と、「アーマースタンド」を作成しましょう。
/gamerule commandBlockOutput false
/scoreboard objectives add timer dummy
/scoreboard objectives add timerT dummy
/summon armor_stand ~ ~ ~ {Tags:[timer],Marker:1b}
/scoreboard objectives add 20 dummy
/scoreboard players set @e[tag=timer] 20 20
この際、アーマースタンドには『timer』というタグを付けておきます。タグは他のアーマースタンドと区別するための名前のようなものですね。
また、間違って壊さないようにMarkerも付けておきます。もしこのアーマースタンドを壊したい時は
/kill @e[tag=timer]
と入力しましょう。
2.いよいよコマンドの入力へ
下準備が完了したので、コマンドブロックを使ってコマンドを入力していきます!
まずはコマンドブロック(コマブロ)を入手しましょう。以下のコマンドを入力するとコマブロをゲットできます。
/give @p minecraft:command_block
さっそくコマブロを1つ置き、コマブロを右クリックして次のように入力します。
①:/scoreboard players set @e[tag=timer] timerT 1200
このコマンドで、アーマースタンドにtimerTの値、つまり制限時間をセットしました。
セットしたい秒数×20の値を入力しましょう!
今回は60秒を計測したいので、入力する値は60×20=1200にします。
そして1つ目とは別に、リピートコマンドブロックとチェーンコマンドブロックを1つずつ並べて置きます。向きや色もそろえないと正しく動かないので注意!
いずれも条件無し、常時実行で設定しましょう。
②:/scoreboard players operation @e[tag=timer] timer = @e[tag=timer] timerT
timerTの値をtimerに代入し、同じ値にします。
timerTとtimer、二つのスコアボードを使っているのは『timerTは計測用』、『timerは時間表示用』と使い分けるためです。詳しい解説は後ほど。
③:/scoreboard players operation @e[tag=timer] timer /= @e[tag=timer] 20
計測用に使うtimerTの値は、計測したい時間の20倍になっています。なので、時間表記したいtimerの値は、scoreboardコマンドの計算機能(operation)を使い、20で割っています。
④:/title @a actionbar ["",{"score":{"name":"@e[tag=timer]","objective":"timer"}}]
時間を表示するためのコマンドです。表示するにはtitleコマンドを使っています。
⑤:/scoreboard players remove @e[tag=timer,scores={timerT=0..}] timerT 1
そして、ちゃんとタイマーがカウントするようにtimerの値を1ずつ減らしていきます。
timerTの値が0になったらこの処理は停止するようにしました。
これで完成です!あとは一番左のインパルスコマブロ(オレンジ色)にボタンを付け、押すとタイマーが作動します。
どうでしょう?ちゃんと動きましたか?
もし動かないならコマンドは正しく入力されているか確認しましょう。またはリピートコマブロ(青色)を壊し、置き直すと動くかもしれません。
・・・これでも良いですが、ちょっと地味ですよね?なので、コマンド数は多くなりますが、少し改良してみました。
スポンサーリンク
3.タイマーの作り方・中級
すこし味気ないコマンドなので、分と秒の表示や、終了・開始の合図を追加させたいと思います。
1.事前に実行するコマンド
/scoreboard objectives add timerM dummy
/scoreboard objectives add timerS dummy
/scoreboard objectives add 1200 dummy
/scoreboard players set @e[tag=timer] 1200 1200
さっき使ったスコアボードに加えて、3つ追加します。
『timerMは分の表示』、『timerSは秒の表示』、そして1200は計算用に使います。また、1200はあらかじめ値を1200にセットしておきます。
2.コマブロに入力するコマンド
コマブロの数は約2倍の量になりました。
これもいずれも条件無し・常時実行です。
①:/scoreboard players set @e[tag=timer] timerT 2400
インパルスブロックに関しては変更無しです。計測したい秒数×20の値を入れましょう!今回は2分(=120秒)にするので、2400を代入しました。
②:/scoreboard players operation @e[tag=timer] timerM = @e[tag=timer] timerT
③:/scoreboard players operation @e[tag=timer] timerM /= @e[tag=timer] 1200
②,③は計測用の時間を分に表示するためのコマンド。計測用の値は秒数×20になっているので、分に直すときは20×60=1200で計測用の値を割ります。
④:/scoreboard players operation @e[tag=timer] timerS = @e[tag=timer] timerT
⑤:/scoreboard players operation @e[tag=timer] timerS %= @e[tag=timer] 1200
⑥:/scoreboard players operation @e[tag=timer] timerS /= @e[tag=timer] 20
④,⑤,⑥は秒を表示するためのコマンド。計測用の値を1200で割り、そのあまりを20で割ると、秒数が求められます。
⑦:/execute as @e[tag=timer,scores={timerS=10..,timerT=0..}] run title @a actionbar ["",{"score":{"name":"@e[tag=timer]","objective":"timerM"}},{"text":":"},{"score":{"name":"@e[tag=timer]","objective":"timerS"}}]
⑧:/execute as @e[tag=timer,scores={timerS=..9,timerT=0..}] run title @a actionbar ["",{"score":{"name":"@e[tag=timer]","objective":"timerM"}},{"text":":0"},{"score":{"name":"@e[tag=timer]","objective":"timerS"}}]
⑦、⑧は時間を表示するためのコマンド。ちょっと長いですね。
2つコマンドがあるのは、残り時間の秒数が2桁(⑦)と、1桁(⑧)の時で分けているからです。
例えば残り時間2分8秒だった時、2:08と表示させたいのですが、コマンドが1つだけだと2:8と表示され、とても気持ち悪い形になります。
ということで、秒数が1桁の時は、二桁目に0を付け加えています。
⑨:/execute as @e[tag=timer,scores={timerT=2400}] run title @a title ["START!"]
⑩:/execute as @e[tag=timer,scores={timerT=0}] run title @a title ["FINISH!"]
⑨,⑩は開始時に『START!』、終了時には『FINISH!』と表示させるコマンドです。⑨の値は計測したい時間に合わせて入力しましょう。
⑪:/scoreboard players remove @e[tag=timer,scores={timerT=0..}] timerT 1
そして、最後に計測用の時間を1減らすコマンド。これがないと計測してくれないので注意です。
これで完成です!出来上がったら、初級編のタイマーと同じようにインパルスコマブロにボタンを付けて押すと作動するはずです。
ボタンを押すと同時にSTARTの文字が表示されました!時間の表記もそれっぽくなってますね。
よくある質問
1.なんで計測用の数値は実際の秒数×20の値にするの?
リピートコマブロは1秒に20回実行されます。そして計測用の値も1秒に20ずつ減っていくので、実際の秒数を20倍の値にしておくとやりやすいからです。
まとめ
今回はタイマーを作りました。ちゃんと動いたでしょうか?
基本的な構造だけ作りましたが、改良してカウントダウン機能を作ったり、効果音と共に「残り30秒!」みたいにしても良さそうです。
もし何かわからない点や、質問したいことがあったら、気軽にコメントください!
リクエストも募集中なのでガンガン送ってください!
ここまで読んでくださりありがとうございました!
この記事が良かったら、ブクマ・読者登録お願いします!