更新日:
1. 日数と時刻を一度だけ調べる
/time query minecraft:day repetitions
/time query minecraft:day
Java版26.1以降の書き方です。1行目でワールドが始まってから何日目か、2行目で今日の時刻(ティック)がチャットに出ます。1.21.11以前と統合版では、/time query day と /time query daytime です。26.1での変更は timeコマンドの使い方 にまとめています。
2. 日数をサイドバーに出す(くり返し)
/scoreboard objectives add day dummy "ワールドの日数"
/scoreboard objectives setdisplay sidebar day
最初に一度だけ実行します。そのあと、次のコマンドをくり返しコマンドブロック(常時実行)に入れます。
/execute store result score 経過日数 day run time query minecraft:day repetitions
1.21.11以前は、最後を time query day にします。execute store result は、コマンドの結果の数をスコアに入れる書き方です。サイドバーに「経過日数」と日数が並びます。名前を # から始めるとサイドバーに出ないので、表示したい名前は # を付けずに書きます。
3. 時刻を「時・分」に直す準備(最初に一度だけ)
/scoreboard objectives add clock dummy
/scoreboard players set #24000 clock 24000
/scoreboard players set #1000 clock 1000
/scoreboard players set #24 clock 24
/scoreboard players set #60 clock 60
/scoreboard players set #6 clock 6
計算に使う決まった数を入れておきます。マイクラの1日は24000ティックで、時刻0が朝の6時、1000ティックが1時間にあたります。
4. 時計を作る(くり返し)
/execute store result score #t clock run time query minecraft:day
/scoreboard players operation #t clock %= #24000 clock
/scoreboard players operation #h clock = #t clock
/scoreboard players operation #h clock /= #1000 clock
/scoreboard players operation #h clock += #6 clock
/scoreboard players operation #h clock %= #24 clock
/scoreboard players operation #m clock = #t clock
/scoreboard players operation #m clock %= #1000 clock
/scoreboard players operation #m clock *= #60 clock
/scoreboard players operation #m clock /= #1000 clock
/title @a actionbar [{"score":{"name":"#h","objective":"clock"}},{"text":"時"},{"score":{"name":"#m","objective":"clock"}},{"text":"分"}]
1行目をくり返しコマンドブロックに入れ、残りをチェーンでつなげます。1.21.11以前は1行目の最後を time query daytime にします。
2行目で1日分(24000)の余りにしてから、1000で割って6を足し、24で割った余りにすると「時」になります。1000で割った余りに60をかけて1000で割ると「分」です。ホットバーの上に「13時30分」のように出ます。分が1けたのときに「0」を付けて2けたにすることはできないので、「13時5分」のように表示されます。
5. 日付が変わったら知らせる(くり返し)
/execute unless score 経過日数 day = #prev day run title @a title [{"score":{"name":"経過日数","objective":"day"}},{"text":"日目の朝"}]
/scoreboard players operation #prev day = 経過日数 day
2のくり返しコマンドブロックの後ろにチェーンでつなげます。前に覚えておいた日数(#prev)と今の日数がちがうときだけ、タイトルを出します。表示したあとに今の日数を覚え直すので、1日に1回だけ出ます。ベッドで寝て朝にしたときにも出ます。
うまくいかないときの確認ポイント
- コマンドがエラーになる:今のバージョンが26.1以降か1.21.11以前かを確かめて、time query の書き方を合わせます。
- 日数が0のまま:2のコマンドがくり返しで動いているか確認します。
- 時刻がずれる:4の
#6を足しているか確認します。時刻0は朝6時です。 - 統合版で使えない:統合版には
execute storeがないので、スコアに入れることはできません。
よくある質問
ワールドを作ってからの合計時間は分かりますか?
1.21.11以前は time query gametime で、ワールドが動いた合計のティック数が分かります。20で割ると秒になります。
サイドバーの表示を消すには?
scoreboard objectives setdisplay sidebar のように、最後のスコアの名前を書かずに実行すると消えます。
時刻を午前・午後で出せますか?
#h が12以上のときだけ午後と表示する行を足し、12を引いて表示すると、午前・午後の表示にできます。