【まるきの】のブログ

【マイクラ回路】チャンクロジックの解説

皆さんどうもこんにちは!

今回からMinecraftの回路について色々と話していこうかなと思います!

今回紹介するのはチャンクロジック(Chunk logic)についてです!

Minecraftの世界が16×16のチャンクという空間に区切られていて、そのチャンク事に世界が読み込まれているというのは皆さんご存知かと思いますが、チャンクを読み込むというだけでも様々な処理が行われています!

今回はそんなチャンクについて詳しく解説していこうかなと思います!

 

【読み込みレベル】

チャンクには読み込みレベルという概念が存在していて、その読み込みレベルによって何が読み込まれているのかが違います。

読み込みレベルは数値によって表され、何もいじっていないバニラMinecraftでは22~44の値で発生します。

そしてこの読み込みレベルが低ければ低いほど沢山のものが読み込まれているという風になっています。

ちなみに読み込みレベル22の状態はスポーンチャンクでしか起こりません。

 

読み込みレベルが31以下のチャンクはEntity tickingと呼ばれ、全てのものが読み込まれています。

読み込みレベルが32のチャンクはTickingと呼ばれ、エンティティやランダムティック(後に解説)の処理は停止していて、レッドストーンなどは動いています。

読み込みレベルが33のチャンクはBorderと呼ばれ、ゲームのごく一部の要素が有効になっています(スケジュールの実行(別の記事で解説予定)など)。

読み込みレベルが34以上のチャンクはInaccessibleと呼ばれ、何も読み込まれていません。

読み込みレベルは隣のチャンクへどんどん伝播していき、1チャンク伝播していく事に読み込みレベルが1増加します(読み込み度が下がります)!

 

これがチャンクの読み込みレベルです!

次はチケットについて解説します↓

 

【チケット(Ticket)】

チャンクは何もなしに読み込まれることはありません。

ではどのようにして読み込まれるのかと言うと、チケットというものが発行されて読み込まれます!

チケットには、「チケットの種類」「読み込みレベル」「読み込み継続時間」これら3個のプロパティが存在します!

こんなこと言われても何言ってるか分からないと思うので詳しく話すと、

チケットの種類はそれぞれのチケットの名前みたいなものです!

例えば後に話すプレイヤーが読み込まれると発行されるプレイヤーチケット、ネザーポータルにアイテムを入れると発行されるポータルチケットなど、それぞれのチケットの名前を指します!

読み込みレベルは最初に話したチャンクの読み込みレベルですね!

チケットの種類によってチャンクに与えられる読み込みレベルが変わってきます!

読み込み継続時間はチケットが発行されている時間です!

先程も話したポータルチケットは発行されてから一定時間経つと失効します。

そのチケットが発行されてから失効されるまでの時間が読み込み継続時間です!

 

それではチケットにはどんなものがあるのかを具体的に見ていきましょう!

 

・プレイヤーチケット

プレイヤー周辺を読み込むためにプレイヤーから一定の範囲内のチャンクに対して発行されるチケットで、

チケットを受け取ったチャンクは31の読み込みレベルを与えられます!

このチケットが発行されるチャンクの範囲は

バージョン1.18未満であれば描画距離によって変化し、バージョン1.18以上はシミュレーション距離によって変化します!

 

・強制読み込みチケット

コマンド/forceloadを使うことで強制的に発行されるチケットです。

このチケットによって読み込まれたチャンクの読み込みレベルは31で、さらにこの方法で読み込んだチャンクはゲームを再起動しても読み込まれ続けられます!

 

・開始チケット

ワールドを作ってから最初にスポーンしたチャンクを中心として、19×19のチャンク(スポーンチャンク)に対して発行されるチケットです。

読み込みレベルはゲーム内の最小値である22で、プレイヤーがどこにいても常に読み込まれ続けます!

 

・ポータルチケット

エンティティがネザーポータルを通過すると、そのポータルがある両ディメンションに発行されるチケットです。

読み込みレベルは30で周囲3×3チャンクに読み込み継続時間300ティック(15秒)を与えます!

チャンクローダーはこのポータルチケットを利用したものです!

 

・エンダードラゴンチケット

まだエンダードラゴンを倒してない状態でエンドに入るか、エンダードラゴンを復活させた時に出口ポータルのあるチャンクに対して発行されるチケットです。

読み込みレベル24を与えて周囲15×15チャンクを読み込まさせます!

このチケットのおかげでエンド本島の全体が読み込まれた状態になり、エンダードラゴンと戦闘中に地形を読み込み直したり、エンダードラゴンが読み込み範囲外に出て停止したりということが回避されます!

 

・転送後チケット

エンティティがエンドポータル、もしくは/tp、/spreadplayersなどで移送された際に移送先のチャンクを読み込むために発行されるチケットです。

与えられる読み込みレベルは/tpで32、エンドポータルと/spreadplayersで33で、5ティック(0.25秒)の読み込み継続時間が与えられます!

 

これでチケットの解説は終わりです!

次はフラッシュアップデートについての解説です↓

 

【フラッシュアップデート(FlushUpdate)】

フラッシュアップデートは描画に関する処理で、例えば、レッドストーンダストがオフからオンになった時、オンになったということを画面上に反映するのがフラッシュアップデートです!

別の記事で詳しく話そうと思っていますが、フラッシュアップデートはゲームティックのチャンクロジックフェーズで処理されるので、チャンクロジックフェーズを通った後に動作する0tickパルスは描画処理を通っていないので、描画はされないけど実際には点灯しているみたいな現象が起きます!

多分何言ってるか分からない人もいると思うので、また別の記事で詳しく話そうと思います!

 

これでフラッシュアップデートの解説は終わりです!

最後にランダムティックの解説です↓

 

【ランダムティック(Randm tick)】

1チャンクが16×16の空間ということは皆さんご存知だと思いますが、実はさらに16×16×16の空間に区切ることができます!

この16^3の空間をサブチャンク(もしくはセクション)といいます!

1チャンクは24個のサブチャンクが含まれ、毎tickごとに1番下のサブチャンクから3個ランダムにブロックが選ばれます!

この処理のことをランダムティックといいます!

ランダムティックによって選ばれたブロックは色々な処理が行われます!

詳しく書くととんでもない文字数になるので詳しくは書きませんが、例えば作物であれば成長度が上がったりします!

ちなみに3回の抽選で全て同じブロックが選ばれた場合はそれ以上ブロックが選ばれることはありません(1つのブロックしか選ばれません)!

 

Java版では1回のブロックの抽選で選ばれるブロックの数は/gamerule randomTickSpeedで設定できます!

 

これでチャンクロジックの解説は終わりです!

今回の知識は回路を組む上で特に意識するようなことではありませんが、知っておかないと回路の動作に疑問を抱くこともあるようなことではあるので知っておいて損は無いと思います!

次回からは本格的に回路を組む上で必須な知識を解説していこうと思っているので楽しみにしといてください!(?)

それでは次の記事でお会いましょう!!