このタイマーは、Tick、Second(秒)、Minute(分)、Time(時)を管理するスコアボードを使います。
「20tick立ったら、Secondに1を足す」、「60Secondになったら、Minuteに1を足す」、「60Minute立ったら、Timeに1を足す」という感じのタイマーです。
これをうまく活用できれば、「30秒立ったらplayerをテレポートさせる」や「5分立ったら音を鳴らす」などに使えるかと思います。
尚、このタイマーはラグを一切考慮していません。
ラグなどで20tickのカウントが遅れる場合があるかもしれません。
複数人には対応していないかもしれません。
まずは、次のコマンドを実行します。
コード: 全て選択
/scoreboard objectives add timeTick dummy
/scoreboard objectives add timeSecond dummy
/scoreboard objectives add timeMinute dummy
/scoreboard objectives add timeTime dummy
ここからが、色々するコマンドです。
リピートコマンドブロックで次を実行。
コード: 全て選択
/scoreboard players add @a timeTick 1
コード: 全て選択
scoreboard players test @a timeTick 20
scoreboard players set @a timeTick 0
scoreboard players add @a timeSecond 1
scoreboard players test @a timeSecond 60
scoreboard players set @a timeSecond 0
scoreboard players add @a timeMinute 1
scoreboard players test @a timeMinute 60
scoreboard players set @a timeMinute 0
scoreboard players add @a timeTime 1
あとは、リピートコマンドブロックにレバーやレッドストーンブロックなどで動力を与え続ければ、タイマーの完成です。
表示するコマンドも合わせて載せておきます。
コード: 全て選択
/title @a actionbar ["",{"score":{"name":"@a","objective":"timeTime"}},{"text":"\u6642:"},{"score":{"name":"@a","objective":"timeMinute"}},{"text":"\u5206:"},{"score":{"name":"@a","objective":"timeSecond"}},{"text":"\u79d2:"},{"score":{"name":"@a","objective":"timeTick"}}]
こんな感じになります。
QA
- 他のバージョンでもできる?
1.12.2でしか確認してません。このコマンドのまま動くかもしれないし、コマンドに一手間加える必要があるかもしれません。 - 20tick = 1秒?
自分の検証では20tick=1秒でした。
らぐなどでずれる可能性もありますが、私にはわかりません。 - 30秒たったことを取得するにはどうすればいいの?
「timeMinute 45」 にしたら、45分のが取れます。
コード: 全て選択
/scoreboard players test @a timeSecond 30
これをexecuteとかで活用すれば、使えると思います(多分)