マルチプレイなら『シン・VPS』がおすすめ!

【マイクラ】time_checkで経過した時間を検知【predicate】

【マイクラ】time_checkで経過した時間を検知【predicate】

この記事では、Minecraft Java Edition(バージョン1.20.4)の情報をもとに執筆しています。
そのほかのバージョンや機種などでの動作は保証できません。

こんにちは!
マインクラフターのなつめ(@natsume_717b)です。

なつめ

2016年からマイクラを楽しんでおり、最近はクリエイティブモードでコマンドを駆使して遊んでいます!

この記事では、こんな疑問を解決します!

本記事の内容
  • 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
    • pack.mcmeta

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日あたりの時間を変更できます。

この記事は以上になります。

  • 【まとめ】functionコマンドの基本から応用【マイクラ】
  • 【まとめ】カスタムストラクチャーの実装・カスタム方法【マイクラ】