ページ 11

[JE版1.12.2]タイマーを作ろう

Posted: 2020年6月07日(日) 16:12
by yamagami2211
この記事では、「○時○分○秒」という感じのタイマーを作ります。

このタイマーは、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
上から順に、Tick、秒、分、時を管理するobjectivesです。
ここからが、色々するコマンドです。
リピートコマンドブロックで次を実行。

コード: 全て選択

/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
設置したらこうなってるはず
Show
画像

あとは、リピートコマンドブロックにレバーやレッドストーンブロックなどで動力を与え続ければ、タイマーの完成です。

表示するコマンドも合わせて載せておきます。

コード: 全て選択

/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. 他のバージョンでもできる?
    1.12.2でしか確認してません。このコマンドのまま動くかもしれないし、コマンドに一手間加える必要があるかもしれません。
  2. 20tick = 1秒?
    自分の検証では20tick=1秒でした。
    らぐなどでずれる可能性もありますが、私にはわかりません。
  3. 30秒たったことを取得するにはどうすればいいの?

    コード: 全て選択

    /scoreboard players test @a timeSecond 30
    「timeMinute 45」 にしたら、45分のが取れます。
    これをexecuteとかで活用すれば、使えると思います(多分)

[JE版1.16.1]タイマーを作ろう

Posted: 2020年8月10日(月) 12:29
by yamagami2211
1.12.1用のコマンドは上の親トピックを御覧ください。
スコアボード

コード: 全て選択

/scoreboard objectives add timeTick dummy
/scoreboard objectives add timeSecond dummy
/scoreboard objectives add timeMinute dummy
/scoreboard objectives add timeTime dummy
<リピートコマンドブロック>
1.

コード: 全て選択

scoreboard players add @a timeTick 1
<チェーンコマンドブロック/条件付き>
2.~10.

コード: 全て選択

execute if score @p timeTick matches 20
scoreboard players set @p timeTick 0
scoreboard players add @p timeSecond 1
execute if score @p timeSecond matches 60
scoreboard players set @a timeSecond 0
scoreboard players add @p timeMinute 1
execute if score @p timeMinute matches 60
scoreboard players set @a timeMinute 0
scoreboard players add @p timeTime 1
システム自体は1.12.2から変化はなく、Tickが 20 になったらTickを 0 にしてSecondに 1 足します。
Secondが 60 になったらSecondを 0 にしてMinuteに 1 足します。
Minuteが 60 になったらMinuteを 0 にしてTimeに 1 を足します。

FAQ
  1. 他のバージョンで動く?
    1.16.1でしか確認してない。1.12.2なら親トピック参照。
  2. 20Tick = 1秒?
    ラグを考慮しなければ、1秒らしい。
    (一応検証しました。)
  3. ○<秒/分/時>を取得するには?

    コード: 全て選択

    execute if score @p time<Tick / Second / Minute / Time> matches ○
    ○には~60までの数字が入ります。
    合わせてコマンドを実行させるなら、「run コマンド~」でできると思う。