更新日:
1. ストップウォッチを作る
/stopwatch create race:time
race:time はストップウォッチの名前で、名前空間:名前 の形で付けます。作った瞬間から時間を数え始めます。いくつでも作れるので、コースごとに名前を変えて使えます。
2. 経過時間を見る
/stopwatch query race:time
作ってから(または最後にリセットしてから)何秒たったかがチャットに出ます。ゲームのティックではなく本当の時間なので、tickコマンド でゲームの速さを変えても、サーバーが重くても、時間はずれません。
3. 0からやり直す・消す
/stopwatch restart race:time
/stopwatch remove race:time
restart で0秒に戻して数え直します。スタートの感圧板の下のコマンドブロックに入れると、通るたびに計測が始まります。いらなくなったら remove で消します。
4. タイムをスコアに入れる
/scoreboard objectives add laptime dummy "タイム(1/100秒)"
execute as @p store result score @s laptime run stopwatch query race:time 100
最後の 100 は倍率です。秒数を100倍して小数を切り捨てるので、12.345秒なら1234(0.01秒単位)が入ります。秒だけでよければ倍率を書かずに使います。store のしくみは execute storeの使い方 にまとめています。ゴールの感圧板の下に置くと、ゴールした人のタイムが残ります。
5. 時間で条件を分ける
execute if stopwatch race:time 60.. run title @a title {"text":"時間切れ!","color":"red"}
execute if stopwatch race:time ..30 run say 30秒以内です
execute if stopwatch で、経過した秒数が範囲に入っているかを調べられます。60.. は60秒以上、..30 は30秒以下です。反復ブロックで使うと条件に合う間ずっと動くので、1回だけ出したいときはタグやスコアで止めます。数え下げる表示は カウントダウンを作るコマンド も参考にしてください。
6. ティックで数える方法との違い
これまでのタイム計測は、スコアを1ティックごとに1増やして20で割る方法が一般的でした。この方法はサーバーが重くなるとティックが遅れ、表示されるタイムが本当の時間より短くなります。stopwatch は本当の時間で数えるので、記録を競うゲームではこちらが正確です。ゲームを一時停止している間も、ワールドが動いていれば時間は進みます。パルクールの作り方 のタイム計測を、この方法に置きかえることもできます。
うまくいかないときの確認ポイント
- コマンドが赤くなる:1.21.11より前のJava版と統合版には stopwatch がありません。
- クエリでエラーになる:先に create でストップウォッチを作ったか、名前の綴りが同じか確認します。
- タイムが0のまま:ゴールより先に restart が動いていないか、コマンドブロックの並びを確認します。
よくある質問
ストップウォッチは止められますか?
一時停止のコマンドはありません。止めたときの時間は、その瞬間にスコアへ入れて残します。
ワールドを閉じても時間は残りますか?
ワールドが動いている間だけ進みます。閉じている間の時間は数えません。
名前に名前空間を付けないとどうなりますか?
minecraft: が付いた名前として扱われます。ほかのデータパックと重ならないよう、自分の名前空間を付けるのがおすすめです。