チャンク(英:Chunk)とは、ワールドを384ブロックの高さをもつ16×16の柱状領域に区切ったものであり、読み込みやワールド生成の際に広大なマップを管理可能な領域に分割して処理する際に用いられている。
チャンクの生成[]
チャンクは東西16、南北16、高さ384ブロックの柱状領域であり、総計98304ブロックで構成される。下はワールドの最深部であるY=-64から、上は建築高度制限であるY=319まで広がっている。プレイヤーが初めてワールドに入った時はその周囲のチャンクのみが生成され、プレイヤーの移動に伴って新しいチャンクが生成されていく。
チャンクはシード値を用いて生成されているため、マップの生成機構とバージョンが同じなら、同じシード値のワールドは全く同様に生成される。
ワールドのスポーン地点(初期スポーン地点)を中心とする19×19のチャンクであるスポーンチャンクはプレイヤーの現在の位置に関わらず常に読み込まれているため、自動化装置などを設置するのに適している。
チャンクの読み込み[]
MinecraftのワールドはX、Z軸の正負方向にそれぞれ3000万ブロックもの広がりを持つため、非常に膨大な数のブロックによって構成されている。このため、同時に全てのチャンクを読み込んだままにしておくことは事実上不可能であり、実際には特定のチャンクのみを読み込むことでゲームを動作させている。
読み込まれていないチャンクではゲームのあらゆる要素に関する処理が行われなくなる。
なお、ゲームが特定の要素に関する処理を行う条件には2種類ある。「チャンクが読み込まれていること」と「プレイヤーから一定の距離の範囲内にあること」であり、この2つは全く別のものであることを注意されたい。例えば通常のMobのスポーンやランダムティック(作物の成長や草の伝播などの処理)は後者の条件が適用され、その中心がプレイヤーから128ブロックより遠いチャンクに対しては、例え読み込まれてはいてもこうした処理が行われない。
Java Edition[]
チケット[]
チャンクの読み込みは、そのチャンクにチケットが送られると開始される。チケットには3つのプロパティ「読み込みレベル」「チケットの種類」「読み込み継続時間」が存在し、チャンクの読み込まれ方を規定している。
読み込みレベルと読み込み状態[]
チケットのプロパティの1つ「読み込みレベル」は、チケットを受け取ったチャンクの読み込み状態を規定している。
通常のゲームプレイでは、読み込みレベルは22(0[JE 1.20.5で追加予定])~44の値を取るが、34以上は特に値として意味を持たない。また22以下の値(負の数を含む)は無効な値ではないが、バニラのMinecraftでは発生することはない。44以上の値はゲーム内のコードを書き換えない限り発生することはない。
読み込みレベルが低いほど読み込み状態は高く、下表に示した4つの読み込み状態がある。なお、一つのチャンクに複数のチケットが与えられた場合は、低い方の読み込みレベル(高い方の読み込み状態)が優先される。
読み込み状態 | 読み込みレベル | 詳細 | |
---|---|---|---|
エンティティ処理 | 31以下 | 全てのゲームの要素がアクティブになっている。 | |
ティック処理 | 32 | チャンクに関するティック処理とエンティティの処理のみ停止しており、ランダムティックは発生せず、エンティティは動かない。 | |
読み込み領域の境界 | 33 | ごく一部の要素のみがアクティブであり、レッドストーンやコマンドブロックは動作しない。 | |
アクセス停止 | 34以上 | ワールド生成を除き全ての処理が停止している。 |
読み込みレベルの伝播[]
読み込みレベルは、チケットを受け取ったチャンクから隣接するチャンクへと伝播する。1チャンク伝播する毎に読み込みレベルは1ずつ増加し、最大44まで増加する(即ち、チケットを受け取ったチャンクから離れるにつれて読み込み段階は低下する)。
34 | 34 | 34 | 34 | 34 | 34 | 34 |
34 | 33 | 33 | 33 | 33 | 33 | 34 |
34 | 33 | 32 | 32 | 32 | 33 | 34 |
34 | 33 | 32 | 31 | 32 | 33 | 34 |
34 | 33 | 32 | 32 | 32 | 33 | 34 |
34 | 33 | 33 | 33 | 33 | 33 | 34 |
34 | 34 | 34 | 34 | 34 | 34 | 34 |
停 | 停 | 停 | 停 | 停 | 停 | 停 |
停 | 境 | 境 | 境 | 境 | 境 | 停 |
停 | 境 | テ | テ | テ | 境 | 停 |
停 | 境 | テ | エ | テ | 境 | 停 |
停 | 境 | テ | テ | テ | 境 | 停 |
停 | 境 | 境 | 境 | 境 | 境 | 停 |
停 | 停 | 停 | 停 | 停 | 停 | 停 |
チケットの種類[]
プレイヤーやポータルなどチャンクを読み込ませる素因は様々であり、チケットにはこれらの素因に 対応した様々な種類がある。それぞれの種類のチケットは、チケットを受け取ったチャンクに対して固有の読み込み段階(読み込みレベル)と読み込み継続時間を与える。
- プレイヤーチケット
詳細:JE 1.18で追加された「シミュレーション距離」がプレイヤーチケットに関してどのように作用しているか
プレイヤーの周囲のチャンクを読み込むために、プレイヤーから一定の範囲内にあるチャンクに対して発行されるチケットであり、チケットを受け取ったチャンクに対して31の読み込みレベルを与える。このチケットが与えられるチャンクの範囲は以下のように決定される。
シングルプレイでは、チャンクの読み込み範囲は「描画距離」の設定値より1チャンク分狭い。これにより、プレイヤーチケットを与えられるチャンク数は
( 描画距離 × 2 - 3 ) ^ 2
で与えられる。ただし、プレイヤーチケットを与えられるチャンク数の最小値は9であるので、描画距離が3未満のときにはチャンク数は9になる。
具体的には、シングルプレイにおいて描画距離を5チャンクに設定した場合、プレイヤーのいるチャンクから4チャンク以内の7×7チャンクが読み込み状態「エンティティ処理」(レベル31)で読み込まれ、その外側の9×9の範囲が「ティック処理」(レベル32)、さらにその外側の11×11の範囲が「読み込み領域の境界」(レベル33)として読み込まれる。
マルチプレイでは、server.propertiesで設定できる「view-distance」(視界距離)とチャンクの読み込み範囲が等しく、プレイヤーチケットを与えられるチャンク数は
( 視界距離 × 2 + 1 ) ^ 2
で与えられる。
具体的には、マルチプレイにおいて描画距離を5チャンクに設定した場合、プレイヤーのいるチャンクを中心とする11×11チャンクが読み込み状態「エンティティ処理」(レベル31)で読み込まれ、その外側の9×9の範囲が「ティック処理」(レベル32)、さらにその外側の15×15の範囲が「読み込み領域の境界」(レベル33)として読み込まれる。
- 強制読み込みチケット
コマンド/forceload
を用いることで、強制的にチケットを発行してチャンクを読み込ませることができる。この方法で発行されたチケットを強制読み込みチケットといい、チャンクに対して31の読み込みレベルを与える。周囲のチャンクにおける読み込みレベルの伝播の様子は、上表で示した通りである。
この方法で読み込んだチャンクは、ゲームを再起動しても常に強制的に読み込まれ続ける。
- 開始チケット
初期スポーン地点の存在するチャンクに対して与えられるチケットである。チャンクに与える読み込みレベルは22(32 - spawnChunkRadius
[JE 1.20.5で追加予定])であり、周囲19×19(spawnChunkRadius × 2 + 1
)の範囲に読み込み状態「エンティティ処理」を与える。この範囲は一般にスポーンチャンクと呼ばれ、プレイヤーがどんな座標にいても、どのディメンションにいても常に読み込まれており、あらゆる処理が通常通り行われる。
- ポータルチケット
エンティティがネザーポータルを通過すると、そのポータルが属する両ディメンションのチャンクに対し「ポータルチケット」は発行され、そのチャンクに対し、読み込みレベル30(強制読み込みチケットより値が小さく、読み込まれる範囲が広い)を与え、周囲3×3のチャンクに読み込み状態「エンティティ処理」を与える。
この読み込みは300ティック(=15秒)継続する。エンティティがネザーポータルを通過するたびにチケットが発行されるので、ディスペンサーやホッパーを用いて継続的にアイテムやエンダーアイなどのエンティティを通過させ続ければ、プレイヤーが近くにいなくてもチャンクを読み込ませ続けることのできる「チャンク読み込み機」を作ることができる。この装置は各種の自動生産装置や畑など、常に読み込みが必要な装置を常時稼働させるために役立つが、ゲームに過剰な負荷を掛けることになり、ラグを発生させる虞がある。
- エンダードラゴンチケット
エンダードラゴンとの戦闘開始時(まだエンダードラゴンを倒していない状態でエンドに入るか、エンダードラゴンを復活させたとき)に、チャンク0,0(出口ポータルの位置するチャンク)に対して与えられるチケット。読み込みレベル24を与え、周囲15×15の範囲に「エンティティ処理」の読み込み状態を与える。これによりエンド本島の概ね全域が詠み込まれた状態になり、戦闘中に一々地形を読み込み直したり、エンダードラゴンが読み込み範囲外に出て停止したりという事態が回避される。
エンダードラゴンが倒されるか、戦闘に参加しているプレイヤーがいなくなると、チケットは失効し読み込みは停止する。
- 転送後チケット
エンティティがエンドポータル、あるいは/teleport
や/spreadplayers
により移送された際、移送先のチャンクを読み込むために当該チャンクに発行されるチケット。与える読み込みレベルは/teleport
で32、/spreadplayers
とエンドポータルで33である。5ティック(0.25秒)経過すると失効し、読み込みが停止する。
- 臨時チケット
任意のゲームコードがgetChunk
を呼び出した際に発行されるチケット。ゲームコードがそのチャンクの読み込みが必要であると要求すると、(必要ならそのチャンクを生成した後)そのチャンクにチケットを発行して読み込ませる。
与える読み込みレベルは読み込もうとしているチャンクが既に生成済のチャンクか否かによって決定するが、常に33以上である。多くの場合、読み込みとともにワールド生成が伴う。
例えば、通常のMobのアイドル時の移動AIの動作時にあたって、特定の座標の最上部が固体ブロックであるかを確かめることがあるが、この確認に際してそのブロックが属するチャンクに「unknown」のチケットが発行され、読み込みレベル33が与えられる。他にも、/clone
、/data
、/execute
、/fill
、/setblock
といったコマンドがそのチャンクデータを参照、ないし書き換えする際にも一時チケットを発行してそのチャンクを読み込む。
このチケットは1ティック(0.05秒)で失効し、読み込みを停止する。
- 光チケット
用途は不明だが、おそらくワールド生成に関わるチケットであると思われる。
制限事項[]
- ディメンションのタイムアウト
あるディメンションにおいて、プレイヤーがいなく、強制読み込みされたチャンクがない状態が300ティック(15秒)以上続くと、そのディメンションはタイムアウトし、エンティティやブロックのティック処理、エンダードラゴンとの戦闘、雷などの様々な処理を停止する。エンティティの出入りがあるとカウントはリセットされる。
- 以下の要素は処理が行われるのに特定の条件があるため、チャンク自体が読み込まれていても処理が行われない場合がある。
例外[]
チャンクの端でのブロックの設置など、特定のチャンク内の事象が別のチャンクに対して影響を与えることがある。更新や処理の種類によって、読み込まれていないチャンク外に影響を及ぼした際の挙動がやや異なり、具体的には以下のように分類される。
- 隣接するブロックの更新
チャンクの読み込み段階に関わらず、変更のあったブロックに隣接するブロックに関しては臨時チケットを発行して更新が行われる。読み込まれていないチャンクのブロックに対しては、コマンド等を介しても直接変更を加えることはできないが、読み込まれている領域の端のブロックに対して変更を加えた場合にはこの性質が発現し、外側のブロックに対して更新が行われる。この更新によってさらにブロックに変更が加えられた場合は、さらに隣接するブロックへと更新が伝播していく。これにより、足場の崩壊などの現象は、読み込み範囲外にも伝播していく。
- ランダムティック・スケジュールされたティック処理
ランダムティック、スケジュールされたティック処理とは何かについてはティックを参照。読み込みレベル31以上のチャンクにおいては、両者は通常通り処理され、32ではスケジュールされたティック処理のみが発生する。読み込みレベル33のチャンクにおいてはランダムティックは発生せず、スケジュールされたティック処理に関しては、ブロック、液体ともに要求は可能だが実際の処理は読み込みレベルが32以上になるまでに保留される。34以上のチャンクではいずれも発生しない。
また、場合によってはランダムティック、スケジュールされたティック処理により、ランダムティックを受けたブロック/スケジュールされたティック処理を要求したブロックとは別のブロックに対して変更が加えられる場合がある。この変更先のブロックの属するチャンクの読み込み段階が33以上の場合、この変更自体は臨時チケットを発行して行われるが、変更されたブロックがさらにランダムティックを受けたり、あるいはこのブロックが要求したスケジュールされたティック処理が実行されることは、そのチャンクが32以上の読み込みレベルを受けるまでないので、それ以上変化が伝播していくことはない。具体的には、以下のような現象が発生する。- ティック処理の行われていないチャンクに液体が広がろうとする場合、チャンクの外側1ブロックまでなら広がることができるが、それ以上の広がりはそのチャンクの読み込みレベルがより小さい値になるまで発生しない。
- エンティティ処理の行われているチャンクの端で炎が燃えている場合、そのチャンクに隣接しているブロックに対してのみ、読み込み領域の外側のブロックへも延焼するが、そこからさらに外側へ延焼することはない。
- 草や菌糸は、「エンティティ処理」の領域の外側1ブロックまでは伝播するが、それ以上は伝播しない。
- エンティティ処理の行われている領域の範囲外へと伸びているカボチャやメロンの茎は外側のチャンクの隣接するブロックに実をならすことがある。
- エンティティの処理
エンティティ処理の行われている領域外へ出ようとしたエンティティ(Mob、トロッコ、矢などの飛翔体、着火されたTNT、落下中のブロック)は、領域の端に到達した瞬間に移動や時間経過などの処理をすべて停止し、読み込みレベルが31まで上がったら再び処理が開始する。 - TNTの爆発は「エンティティ処理」の読み込み段階のチャンクでのみ発生するが、爆風によるブロックの破壊は読み込み範囲の外側でも発生する。ただし、破壊されたブロックからドロップしたアイテムなどは読み込み範囲の外側では停止したままである。
Bedrock Edition[]
プレイヤーの模擬処理距離内のチャンクや、/tickingarea
で読み込まれたチャンクを含め、チャンクの読込では全てのゲーム面が起動している。読込破棄されたチャンクはゲームに処理されず、ゲーム面が一切処理されない。
種類[]
- プレイヤー
- 丸みを帯びた形[情報提供依頼]。
- プレイヤーの模擬処理距離内のチャンクは読み込まれる。
- コマンド
/tickingarea
コマンドで作成。
制限[情報提供依頼][]
- エンティティ
- Mobの出現は、読み込まれたプレイヤーの半径6チャンク以内のチャンクごとに評価される
例外[]
処理領域内の事象は外部チャンク内のブロックにも影響を与える事がある。外側のチャンクが起動していない場合、ほとんどの場合効果は中断される。具体的には、
- 処理領域の端でブロックを変更すると、処理領域外のブロックに更新が伝播され、それらのブロックが適切な応答をする。
- 水流や溶岩流は外側のチャンクの最初に隣接するブロックに伝播することがあるが、外側のチャンクが起動するまでは流れはそこで中断された状態になる。
- 処理領域の外側の最初に隣接する可燃性ブロックに炎が延焼することがある。水や溶岩のように、そこで中断された状態になる;目に見えるもののアニメーションは実行されず、外側のチャンクが起動するまではそれ以上延焼しない。
- 草や菌糸は、外側のチャンクの最初に隣接するブロックに伝播することがあるが、影響を受けたブロックはそのチャンクが起動するまでは実際にはその姿を変えず、起動されると即座に変える。草や菌糸はそのような最初のブロックを超えて広がることは出来ず、また、そのようなブロックから外側のチャンクが起動するまでは、処理領域に伝播することもできない。
- 処理領域の端に生えているカボチャやスイカの茎は、外側のチャンクの隣接するブロックに実をならすことがある。
- 外側のチャンクに移動しようとしたエンティティ(Mob、トロッコ、矢など)は、処理領域から離れるとすぐに中断される。Mobは見えているが動かない。外側のブロックが起動するとエンティティの移動は再開される。
- TNTが爆発すると起動していないチャンク内のブロックが損傷を受けたり破壊されたりすることがあり、他の事象とは異なりその効果は隣接するブロックに限定されない。ただし、外側のチャンク内の副次的な効果はそのチャンクが起動するまで中断される。例えば、砂や砂利を支えていたブロックを爆発で破壊した場合、砂や砂利がすぐに落ちてくるわけではない。破壊されたブロックに取り付けられていた額縁やレッドストーントーチなどのアイテムも同様で、チャンクが起動するまで落ちない。
- 起動していないチャンクに発射されたTNTは、最初に入った外側のブロック内で空中に浮遊している。外側のチャンクが起動するまでは見えず、起動された時点で飛行と時限が再開される。
チャンクの境界の探し方[]
座標上では、X座標ないしZ座標が16で割り切れる場所がチャンクの境である。例えば、(96, -32)はチャンク(5, -2),(5, -3),(6, -3),(6, -2)の交わる点である。XおよびZ座標が16の倍数を通過するたびに、プレイヤーはチャンクの境界を越えていることになる。また、ブロックのX座標とZ座標がともに16で割れるとき、プレイヤーはチャンクの北西隅にいる。
また、以下の式を用いることで現在いるチャンクの座標を知ることができる。
チャンクのX座標 = ⌊ X座標 / 16 ⌋ 、 チャンクのZ座標 = ⌊ Z座標 / 16 ⌋
また、チャンク内での座標はそれぞれの座標に対して16の剰余をとることで求められる。
Java Editionでは、F3 + Gでチャンクの境界を表示することができる。また、単にF3を押せばデバッグ画面が開き、プレイヤーの座標と、プレイヤーのいるチャンクの座標、チャンク内の座標、チャンク座標が格納されているRegionファイルの名前などを知ることができる。
Bedrock Editionでは、高画質にするとワールドが再描画され、プレイヤーがいるチャンクのみが一瞬だけ読み込まれ、チャンクの境界が簡潔に表示される。プレイヤーが描画距離を急激に変更すると、チャンクの境界が青い線で表示される。
スライムチャンク[]
スライムチャンクは明るさに関係なくY=40以下でスライムが出現できる特定のチャンクである。それ以外はすべて他のチャンクと同じである。
Java Edition[]
スライムチャンクはキノコ島を除くワールド中に生成される。全チャンクの10つに1つはスライムチャンクである。これらのスライムチャンクはそのチャンクの座標とワールドのシード値を組み合わせて擬似的にランダムに決定される:
Random rnd = new Random( seed + (int) (xPosition * xPosition * 0x4c1906) + (int) (xPosition * 0x5ac0db) + (int) (zPosition * zPosition) * 0x4307a7L + (int) (zPosition * 0x5f24f) ^ 0x3ad8025f ); return rnd.nextInt(10) == 0;
つまり、0から9までの乱数を生成してチャンク座標を使ってシード値を生成し、その乱数が0であればチャンクにスライムが出現する。ワールド座標をチャンク座標に変換するには、16で割って切り捨てる。xPosition
およびzPosition
は32ビットの整数(int)であることに注意。
Bedrock Edition[]
Bedrock Editionでのスライムチャンクの処理方法はJava Editionと異なる。処理方法はワールドシードに関係ないため、スライムが自然出現するチャンクは全てのワールドで同じである。[1]
歴史[]
Java Edition pre-Classic | |||||
---|---|---|---|---|---|
rd-131655 | 開発中のチャンクが紹介された。 | ||||
Java Edition Infdev | |||||
20100227-1 | マップの高さがカスタムできなくなり、チャンクの高さは128に変更された。 | ||||
Java Edition | |||||
1.2.1 | 12w07a | RegionファイルフォーマットからAnvil file formatへの移行に合わせて、チャンクの高さが256ブロックに増加。 | |||
1.4.2 | 12w39a | デバッグ画面にチャンクの座標と、プレイヤーのチャンク内での座標が表示されるようになった。 | |||
1.10 | 16w20a | F3 + Gでチャンク協会の表示非表示を切り替えられるようになった。 | |||
1.14 | ? | チャンクの読み込み方法が変更された。 | |||
1.17 | 20w49a | マップの高さが再びカスタムできるようになった。 | |||
21w06a | チャンクのY方向が、上は319まで、下は-64まで拡張され、高さが合計384ブロックになった。 | ||||
21w15a | チャンクの高さに関する変更が一旦戻された。 | ||||
1.18 | Experimental Snapshot 1 | チャンクの高さが再び384ブロックになった。 |
トリビア[]
- 生成されていないチャンクにプレイヤーが入ると、そのチャンクが読み込まれるかプレイヤーが有効なチャンクに移動するまでほかのブロックが映らなくなる。これはY座標がチャンクの上限・下限を越えている場合には発生しない。
- Bedrock Editionでは、チャンクの16×16×16の区画のうちの1つにブロックがない場合、底にブロックを設置するとチャンクの読込と同じアニメーションが表示される。このバグにより、プレイヤーが設置したブロックがプレイヤーが向いている方向の空の色と同じ色に1秒ほど変化し、通常のブロックのテクスチャに消えゆき始めるという不具合が発生する。日の出や日の入りの時間にそこにブロックを置いた場合、頭を上下に揺らし続けると実際には1秒間常に色が変化する。また、ブロックの後ろのブロックは見えなくなる。