この記事では、Minecraft Java Edition(バージョン1.20.4)の情報をもとに執筆しています。
そのほかのバージョンや機種などでの動作は保証できません。
こんにちは!
マインクラフターのなつめ(@natsume_717b)です。
この記事では、こんな疑問を解決します!
- time_checkで時間を検知する
- 実際の例
time_checkはその言葉通り、時間を確認することのできるpredicateの項目です。
ただ時間を指定するだけでなく、1日のtick数を好きに変えることもできるので、変則的なカウントの仕方にも対応しています。
詳しく見ていくので、ぜひ参考にしてくださいね。
それでは、見ていきましょう!
本記事で紹介するデータパックのサンプルはGitHubにてダウンロードできます。
time_checkで時間を検知する
time_checkを用いることで、時間を検知することが可能です。
具体的には、ワールドを作成してから経過したtick数と指示した値が適切な関係である場合に、真となります。
仮に0~12000という値を指示していた場合には、ワールド生成後から半日までなら真を示し、それ以降は偽となるわけですね。
マイクラの1日は24000tickです。
このtick数にあたる値はtimeコマンドで変更できます。
また、gameruleによって自然に時間経過しないようにすることも可能ですので、一見自由の利かないものだと思われがちですが、実際にはそれなりに自由の利くものと言えます。
というわけで、次項で具体的な例を見ていきます。
実際の例
time_checkはpredicateの一種ですので、データパックを作成します。
構造の例としては、以下の通り。
- datapack本体
- data
- sample
- predicates
- time_check.json
- predicates
- sample
- pack.mcmeta
- data
pack.mcmetaとjsonファイル以外は全て、フォルダになります。
また、pack.mcmetaの中身は以下の通り。
{
"pack": {
"pack_format": 26,
"description": ""
}
}
肝心のjsonファイルには以下のように記述することができます。
{
"condition": "minecraft:time_check",
"value": {
"min": 0,
"max": 12000
}
}
この場合は、値が0~12000である場合に真となります。
これはminとmaxで指示したからで、範囲ではなく特定の値だけを指示した場合には、その値とピッタリ同じでないといけません。
コードの生成には、生成サイトを利用することをおすすめします!
また、periodという項目を指示することもできます。
その場合は以下のようなコードになります。
{
"condition": "minecraft:time_check",
"value": {
"min": 0,
"max": 6000
},
"period": 12000
}
このperiodは1日の時間を指示した数字に置き換えて計算させるものです。
そもそも経過した時間の計算をするには、24000×経過日数 + 現在の時刻(tick)で求めます。
経過した日数は”/time query day”
現在の時刻(tick)は”/time query daytime”で調べられます。
ワールド生成してから3日と6000tickが経過していた場合は、78000となるわけですね。
periodが指示されていない場合は、24000という初めに示した値が変わらないため、現在の時刻(つまりはdaytimeで調べられる値そのもの)がそのまま6000となります。
値が変更されていないから、現在の時刻も変わらないわけですね。
しかし、periodを12000に指示した場合は、24000の部分が12000となります。
78000を12000で割ると6という経過日数を示す答えと、6000tickという余りの値が出ます。
この余りとなる6000がtime_checkで指示したものに適しているかどうかで真偽を決めるわけですね。
上記の例であれば、maxと同じ値なので、ギリギリ条件を満たして真となっております。
まとめ
というわけで、今回のまとめです。
- time_checkを用いることで、経過している時間の検知を行えます。
- periodを使うことで、1日あたりの時間を変更できます。
この記事は以上になります。
2016年からマイクラを楽しんでおり、最近はクリエイティブモードでコマンドを駆使して遊んでいます!