チャンク(英:Chunk)は、Minecraftのワールドを256ブロックの高さの16×16に区切ったものである。チャンクは、ワールド生成の際にマップを管理可能な部分に分割するのに使用される技法である。
チャンクの生成
チャンクは、幅16ブロック、長さ16ブロック、高さ256ブロックの、計65,536ブロックで構成される。プレイヤーが初めてワールドに出現した時に、その周辺にチャンクが生成される。プレイヤーがワールド内を移動すると、必要に応じて新たなチャンクが生成される。
チャンクは、マップのシード値を用いて生成されるため、同じバージョン番号のマップ生成方式とシード値を使用した場合、常に同じチャンクが生成される。
ワールドの出現地点周辺の16×16の組のチャンクであるスポーンチャンクは常に読み込まれているため、自動農場を作る際にはこれを利用できる。
チャンクの読込
Minecraftのワールドは枢軸方向にそれぞれ3000万ブロックあり、膨大な量のチャンクが存在するため、ゲームがプレイできる特定のチャンクのみが読み込まれる。
読込が破棄されたチャンクはゲームに処理されず、ゲームの側面が一切処理されない。
Java Edition
切符
読込はチャンクが切符を受け取ると始まる。読み込まれたチャンクはすべて切符から発生する。
読込切符には3つの特性がある:レベル、切符の種類、(任意)生存時間。
段階と読込の種類
段階とは、チャンクの読込種類であるかを決定する数字である。
読込段階は通常のゲームプレイでは22から44までの範囲だが、22から33までしか関係ない。22未満の読込段階は有効だが、ゲームを改造してのみ可能である。44以上の読込段階は使用できない。
特定のチャンクでは、その最下層のみが重要である(段階が低い=読込種類は高い)。
読み込まれたすべてのチャンクが同じ特性を持っているわけではなく、4つの読込種類に分かれている。これには読込破棄されたチャンクは除かれる。
読込種類 | 段階 | 特徴 |
---|---|---|
エンティティ処理 | 31以下 | 全てのゲーム面が起動している。 |
処理 | 32 | エンティティが処理されない(動かない)こととチャンクティックが処理されないことを除いたすべてのゲーム面が起動している。 |
境界 | 33 | 一部のゲーム面のみが起動している(レッドストーンとコマンドブロックは機能しない)。 |
参照不可 | 34以上 | 起動しているゲーム面はないが、ワールド生成は発生する。 |
段階の伝播
読込段階は切符により元チャンクから隣接するチャンクに「伝播」したり流れたりするが、最大44になるまでその都度段階が1ずつ上がっていく。
チャンクが段階展開により読込段階を取得すると、割り当てられた読込種類が起動する。
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 |
不 | 不 | 不 | 不 | 不 | 不 | 不 |
不 | 境 | 境 | 境 | 境 | 境 | 不 |
不 | 境 | 処 | 処 | 処 | 境 | 不 |
不 | 境 | 処 | エン | 処 | 境 | 不 |
不 | 境 | 処 | 処 | 処 | 境 | 不 |
不 | 境 | 境 | 境 | 境 | 境 | 不 |
不 | 不 | 不 | 不 | 不 | 不 | 不 |
切符の種類
切符の種類は様々で、元が様々のため異なる読込種類でチャンクを起動する。
プレイヤー切符
この切符はプレイヤーが作成し、段階31に割り当てられる。この切符は後述する数式で定義されるように、プレイヤーを取り囲む領域内の各チャンクに付与され、上述した表のように伝播する。
シングルプレイヤーの場合、設定で設定されているように、チャンクの読込距離は描画距離よりも1チャンク小さくなる。rを選択された描画距離、AoCを元のプレイヤー切符が割り当てられているチャンクの領域(段階31のエンティティ処理)とすると、これは数式(2r - 3)2 = AoCと表せる。AoCの最小値は9のため、描画距離を2にしても3にしても差はない。
例えば、描画距離が5チャンクのシングルプレイヤーゲームでは、プレイヤーを中心とした7×7チャンクの領域ではエンティティ処理(段階31)の読込種類であり、すぐに囲まれるチャンク(プレイヤーを囲む9×9の外周の外縁にある短冊状のチャンク)では処理(段階32)であり、次に囲まれるチャンク(11×11の外周)には境界(段階33)チャンクとなっている。
マルチプレイヤーでは、Server.propertiesに設定されているように、チャンクの読込距離は表示距離と等しくなる。vを設定された表示距離、AoCを元のプレイヤー切符が割り当てられているチャンクの領域(段階31のエンティティ処理)とすると、これは数式(2v + 1)2 = AoCと表せる。
例えば、表示距離が5チャンクのマルチプレイヤーサーバーでは、プレイヤーを中心とした11×11チャンクの領域ではエンティティ処理(段階31)の読込種類であり、すぐに囲まれるチャンク(プレイヤーを囲む13×13の外周の外縁にある短冊状のチャンク)では処理(段階32)であり、次に囲まれるチャンク(15×15の外周)には境界(段階33)チャンクとなっている。
強制読込切符
/forceload
コマンドを使って切符を作成することもできる。段階は31のため、伝播は上の表で確認できる。
ゲームの終了後や開始後もチャンクは強制読込されたままである。
開始切符
そのチャンクが位置する場所のワールドスポーンが作成した切符(スポーンチャンク)。位置は/setworldspawn
コマンドで変更できる。段階は22で、ゲーム内で最も低い。プレイヤーがオーバーワールドにいる時には常に起動しており、そうでなければ永遠に起動している。
ポータル切符
エンティティがネザーポータルを通過して転送されると作成される切符で、ポータルの向こう側にあるチャンクに渡される。段階は30のため、プレイヤー切符や強制切符よりも強い。
300ゲームティック(遅延なしで15秒相当)で失効する。エンティティがポータルを通過するたびに作成されるため、プレイヤーが近くにいなくてもチャンクを永続的に読み込み続ける「チャンク読込機」を作成でき、農場などのゲーム内の様々な機構に使用できるが、遅延が発生する。
ドラゴン切符
エンダードラゴンとの戦闘開始時に作成される切符で、0,0のチャンク(出口ポータルがあるチャンク)に与えられる。段階は24。
戦闘に参加するプレイヤーがいなくなるか、ドラゴンが死亡すると失効する。
転送後切符
エンティティがエンドポータルの通過や、/tp
・/spreadplayers
コマンドの使用により転送されると作成される切符である。/tp
コマンドの場合には段階が32であるのに対し、/spreadplayers
コマンドとエンドポータルの場合には段階は33である。
5ゲームティックで失効する。
臨時切符[情報提供依頼]
ゲームコードの任意の部分が「getChunk」を呼び出すと作成される切符。ゲームコードによりチャンクを読み込むべきだとなった場合、そのチャンクにこの切符が配置される(恐らくチャンクの作成後)。
読込段階は、ゲームが読み込もうとするチャンクの種類(完全にワールド生成されたチャンクか否か)に依存する。常に段階33(境界)以上である。多くの場合、何らかの形でワールド生成を伴う。
例として、一般的なMobの放浪AIが実行されていると、あるブロックの上面が固体であるかどうかを確認する。その確認の一環として、そのチャンクには段階33の「不明」切符が貼られている。
1ゲームティック後に失効する。
照明切符[情報提供依頼]
不明、おそらくワールド生成に関連。
制限事項
- 休眠中断
- 一部のゲーム面は以下のような他の進行条件がある場合があるため、必ずしも読込チャンクで処理されないことがある:
- チャンク処理
- プレイヤーから128ブロック以内にその中央があるチャンクのみが、1ゲームティックごとに処理される。ティックも参照。
- エンティティ
- チャンク処理
例外
チャンク内の事象は外部チャンク内のブロックにも影響を与える事がある。外側のチャンクが起動していない場合、ほとんどの場合効果は中断される。具体的には、
- 処理されているチャンクの端でブロックを変更すると、処理されているチャンクの外側のブロックに更新が伝播され、それらのブロックが適切な応答をする。更新は境界チャンクの外側までブロックごとに伝播されることがあり、その際には臨時切符が作成され伝播が継続される。
- 33段階のチャンク内のブロックは予定された処理を要求できるが、32以下の読込段階を取得するまで処理されない。
- 水流や溶岩流は処理されているチャンクの外側の最初の隣接するブロックに伝播することがあるが、境界チャンクの読込段階が大きくなるまでは流れはそこで中断された状態になる。
- 処理されているチャンクの外側の最初に隣接する可燃性ブロックに炎が延焼することがある。水や溶岩のように、そこで中断された状態になる。外側のチャンクの段階が30以下になるまではそれ以上延焼することはない。
- 草や菌糸は、エンティティ処理チャンクの外側にある最初の隣接するブロックに伝播することがある。
- エンティティ処理チャンクの端に生えているカボチャやスイカの茎は、エンティティ処理チャンクの外側の隣接するブロックに実をならすことがある。
- エンティティ処理チャンクから処理チャンクに移動しようとしたエンティティ(Mob、トロッコ、矢など)は、エンティティ処理チャンクから離れるとすぐに中断される。処理チャンクの段階が上がるとエンティティの移動は再開される。
- エンティティ処理チャンク内のTNTが爆発すると、エンティティ処理でないチャンク内のブロックが損傷を受けたり破壊されたりすることがある。
Bedrock Edition
プレイヤーの模擬処理距離内のチャンクや、/tickingarea
で読み込まれたチャンクを含め、チャンクの読込では全てのゲーム面が起動している。読込破棄されたチャンクはゲームに処理されず、ゲーム面が一切処理されない。
種類
- プレイヤー
- 丸みを帯びた形[情報提供依頼]。
- プレイヤーの模擬処理距離内のチャンクは読み込まれる。
- コマンド
/tickingarea
コマンドで作成。
制限[情報提供依頼]
- エンティティ
- Mobの出現は、読み込まれたプレイヤーの半径6チャンク以内のチャンクごとに評価される
例外
処理領域内の事象は外部チャンク内のブロックにも影響を与える事がある。外側のチャンクが起動していない場合、ほとんどの場合効果は中断される。具体的には、
- 処理領域の端でブロックを変更すると、処理領域外のブロックに更新が伝播され、それらのブロックが適切な応答をする。
- 水流や溶岩流は外側のチャンクの最初に隣接するブロックに伝播することがあるが、外側のチャンクが起動するまでは流れはそこで中断された状態になる。
- 処理領域の外側の最初に隣接する可燃性ブロックに炎が延焼することがある。水や溶岩のように、そこで中断された状態になる;目に見えるもののアニメーションは実行されず、外側のチャンクが起動するまではそれ以上延焼しない。
- 草や菌糸は、外側のチャンクの最初に隣接するブロックに伝播することがあるが、影響を受けたブロックはそのチャンクが起動するまでは実際にはその姿を変えず、起動されると即座に変える。草や菌糸はそのような最初のブロックを超えて広がることは出来ず、また、そのようなブロックから外側のチャンクが起動するまでは、処理領域に伝播することもできない。
- 処理領域の端に生えているカボチャやスイカの茎は、外側のチャンクの隣接するブロックに実をならすことがある。
- 外側のチャンクに移動しようとしたエンティティ(Mob、トロッコ、矢など)は、処理領域から離れるとすぐに中断される。Mobは見えているが動かない。外側のブロックが起動するとエンティティの移動は再開される。
- TNTが爆発すると起動していないチャンク内のブロックが損傷を受けたり破壊されたりすることがあり、他の事象とは異なりその効果は隣接するブロックに限定されない。ただし、外側のチャンク内の副次的な効果はそのチャンクが起動するまで中断される。例えば、砂や砂利を支えていたブロックを爆発で破壊した場合、砂や砂利がすぐに落ちてくるわけではない。破壊されたブロックに取り付けられていた額縁やレッドストーントーチなどのアイテムも同様で、チャンクが起動するまで落ちない。
- 起動していないチャンクに発射されたTNTは、最初に入った外側のブロック内で空中に浮遊している。外側のチャンクが起動するまでは見えず、起動された時点で飛行と時限が再開される。
チャンクの端を見つける
16で割り切れるXとZ座標はチャンク間の境界を表す。例:(96, -32)は4つのチャンクが隣接する角である。これらのチャンクの1つはX座標80から96、Z座標-48から-32の間にある。もう一つはX座標96から112、Z座標-32から-16の間にある。 XまたはZのどちらかが16の倍数を超えると、プレイヤーはチャンクをまたいで移動したことになる。
基本的に、X座標とZ座標の両方が16で割れる時はプレイヤーはチャンクの左上隅(北西)にいる。
さらに、この式を使ってプレイヤーのいるチャンクを知ることもできる:
チャンクのXは(X座標÷16)(小数点以下切り下げ)
チャンクのZは(Z座標÷16)(小数点以下切り下げ)
つまり、Xが27、Zが-15の場合、チャンクは((27÷16)、(-15÷16))(小数点以下切り下げ)であり、プレイヤーはチャンク(1、-1)にいることになる。
また、チャンク内のブロックの座標は、座標を16で割った余りで求められる。
Java Editionでは、F3 + Gキーを押すとチャンクの境界を表示できる。もしくは、「F3」ボタンを押すとデバッグ画面が表示され、変数「チャンク」の他にプレイヤーのX,Y,Z座標が表示される。これらの座標はプレイヤーの移動に応じて変化する。変数「チャンク」では、プレイヤーがいるチャンクを知ることができる。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 | |||||
---|---|---|---|---|---|
Cave game tech test | チャンクの前駆体を紹介。 | ||||
Java Edition Infdev | |||||
20100227 | マップの高さが変更できなくなった。チャンクの高さを128に変更。 | ||||
Java Edition | |||||
1.2.1 | 12w07a | RegionからAnvilファイルフォーマットへの変更の一環としてチャンクの高さが256に増加。 | |||
1.10 | 16w20a | F3 + Bでプレイヤーの周りのチャンク境界の可視を切り替えられるようになった。 | |||
1.14 | ? | チャンク読込の方法を変更。 |
トリビア
- 生成可能な実チャンクは14兆(14,062,500,000,000)ある。エンティティを除いて可能なチャンクは7.46×10244,700個ある。
- 生成されていないチャンクにプレイヤーが立っていると、プレイヤーが有効なチャンクに入るまでワールドはすぐに見えなくなる。これはY座標がチャンクの境界を越えている場合には発生しない。
- Bedrock Editionでは、チャンクの16×16×16の区画のうちの1つにブロックがない場合、底にブロックを設置するとチャンクの読込と同じアニメーションが表示される。このバグにより、プレイヤーが設置したブロックがプレイヤーが向いている方向の空の色と同じ色に1秒ほど変化し、通常のブロックのテクスチャに消えゆき始めるという不具合が発生する。日の出や日の入りの時間にそこにブロックを置いた場合、頭を上下に揺らし続けると実際には1秒間常に色が変化する。また、ブロックの後ろのブロックは見えなくなる。