一個區塊的地面部分的截面。整個區塊最高可延伸至256的高度。
區塊(Chunk)是Minecraft世界裏一個大小為16×256×16的部分。
生成
區塊寬16格,長16格,高256格,共有65536格。當玩家第一次出現在世界時會在其周圍生成區塊,而隨著玩家對世界的探索,相鄰的區塊也會被生成。
區塊是透過地圖種子進行生成的,這也意味著如果每次使用的地圖種子相同的話,所生成的區塊也會相同,前提是Minecraft和世界生成器的版本要一致。
區塊載入
由於一個世界極大並且包含極多區塊,因此遊戲僅載入部分區塊以使遊戲可玩,遊戲不會運算已卸載的區塊。
Java版
載入標籤
每個區塊的載入都來源於一個「載入標籤」。
每個載入標籤具有3個屬性:載入等級,標籤類型和存活時間(可選屬性)。
載入等級
載入等級用於決定了這個區塊中哪些遊戲內容能夠被運算。
載入等級的範圍是22-44。只會在22-33的範圍裡有常規的遊戲運算。理論上小於22的載入等級是可能的(不過在原版中不可行)。載入等級44以上是不可能的。
一個區塊如果獲得多個載入等級,只有最小的載入等級是有效的。載入等級越小,遊戲會運算更多內容。
載入等級可以分為以下有四種載入等級類型:
| 類型 | 等級 | 屬性 |
|---|---|---|
| 強載入 | 31及以下 | 所有遊戲內容都能夠被運算。 |
| 弱載入 | 32 | 除了區塊刻以及實體不會運算(例如不會移動),所有的遊戲內容都正常執行, |
| 載入邊界 | 33 | 只有少部分遊戲內容會正常執行(紅石元件和指令方塊等都不能執行)。 |
| 不可訪問 | 34及以上 | 各種遊戲內容都不會運算,但世界生成會在這些區塊中執行。 |
等級傳播
帶有載入標籤的區塊,會相鄰(8個)的區塊傳播載入等級。對於每張「標籤」使用「flood fills」算法從「標籤」的位置傳播,每向外傳播一次就載入等級增加一,直到達到上限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 |
| IN | IN | IN | IN | IN | IN | IN |
| IN | BO | BO | BO | BO | BO | IN |
| IN | BO | TI | TI | TI | BO | IN |
| IN | BO | TI | ET | TI | BO | IN |
| IN | BO | TI | TI | TI | BO | IN |
| IN | BO | BO | BO | BO | BO | IN |
| IN | IN | IN | IN | IN | IN | IN |
標籤類型
不同來源的標籤有不同的類型,用於確定不同載入等級。
玩家
由玩家載入的標籤。「玩家」標籤的載入等級為31。玩家的載入範圍內的區塊都會獲得「玩家」標籤。
- 玩家的載入範圍:
- 玩家的載入範圍是一個以玩家為中心正方形。
- 單人遊戲中,正方形的邊長取決於選項中的「顯示距離」:邊長 = 顯示距離 × 2 + 1.
- 多人遊戲中,正方形的邊長取決於server.properties裡的「view-distance」:邊長 = view-distance × 2 + 1.
- 例如,當「顯示距離」為5個區塊時,強載入區塊有11×11,外邊圍一圈弱載入區塊,再圍一圈載入邊界。
強制
使用/forceload指令可以讓區塊獲得「強制」類型的載入標籤。載入等級為31。
「強制」類型的載入標籤在遊戲重啟後依然有效。
重生點
「重生點」載入標籤的等級傳播
世界重生點所在的區塊會獲得「重生點」載入標籤。使用/setworldspawn改變世界重生點時,載入標籤會同時改變。載入等級為22,是遊戲中最小的載入等級。
傳送門
當實體透過地獄傳送門傳送時,在即將到達的地獄門所在的區塊會獲得傳送門標籤,載入等級為30。
「傳送門」載入標籤本身沒有「存活時間」,不過如果傳送門300gt(不卡頓則300gt=15秒)內沒有使用過,傳送門系統會移除這個的載入標籤。
龍
「龍」載入類型的載入等級為24。在屠龍戰開始時,在終界的(0,0)區塊建立,並在屠龍戰停止或結束後移除。
瞬移後
實體瞬移後在瞬移到的區塊建立的載入標籤,包括使用/tp指令、/spreadplayers指令,透過終界傳送門。對於/tp指令,載入等級為32,而/spreadplayers指令和終界傳送門的載入等級為33。
具有「存活時間」屬性,為5gt,也就是說它在5個遊戲刻後失效。
臨時 [需要更多資訊]
在任意遊戲代碼調用「getChunk」方法時建立的標籤。如果遊戲認為這個區塊應該被載入,它就會把這個「臨時」標籤賦給那個區塊(可能在建立它之後)。
載入等級與區塊是否已經完成世界生成有關。它的等級至少會是33,但在許多情況下會大於33。
例如:生物遊蕩AI執行時,它將會檢查某個方塊是否有完整上表面。作為檢查的一部分,這個區塊會獲得等級為33的「臨時」類型的載入標籤。
它的「存活時間」為1遊戲刻。
光 [需要更多資訊]
未知,可能與世界生成有關。
局限性
- 閒置逾時
- 在載入區塊中並不是所有遊戲內容永遠會運算,因為它們可能還有其他條件,其中包括:
特殊情況
一個區塊中的事件可能會影響外部的區塊。如果外部的區塊處於非活動狀態,則在大多數情況下會立即暫停。特別地,
- 弱載入區塊邊緣的方塊發生變化,可以將方塊更新傳播到弱載入區塊外部的方塊,並使它們做出適當的響應。更新可以一個方塊接一個方塊地傳播,直到傳播到載入邊界之外,這時它會建立一個「臨時」載入標籤並且繼續傳播。
- 載入等級為33的區塊中的方塊可以請求一個計劃刻,但是直到該區塊獲得32及以下的等級時才進行處理。
- 流動的水或熔岩可以擴散到弱載入區塊之外的第一個相鄰方塊,但流動會暫停,直到外部區塊獲得更高的等級。
- 火可以傳播到弱載入區塊外的第一個相鄰的可燃方塊。像水和熔岩那樣,也會暫停;直到外部區塊獲得33及以下的等級。
- 草和菌絲可以傳播到弱載入區塊外的第一個相鄰方塊。
- 在強載入區塊邊緣生長的南瓜和西瓜梗可將其果實放置在外面區塊的相鄰方塊上。
- 嘗試移動到弱載入區塊的實體(例如生物、礦車和箭)在離開強載入區塊後會即刻停止所有活動。當這個弱載入區塊獲得更高的載入等級時,實體會繼續移動。
- 強載入區塊中的點燃的TNT會摧毀弱載入區塊內的方塊。
基岩版
在已載入區塊裡,所有遊戲內容都能夠被運算。在未載入的區塊裡幾乎各種遊戲內容都不會運算。
種類
- 玩家載入
- 近似圓形
[需要更多資訊]。 - 在玩家模擬距離內的區塊會被載入。
- 近似圓形
- 指令載入
- 使用
/tickingarea指令載入的區塊。
- 使用
局限性 [需要更多資訊]
- 實體
- 生物生成遵循相同的規則。
特殊情況
一個區塊中的事件可能會影響外部的區塊。如果外部的區塊處於非活動狀態,則在大多數情況下會立即暫停。特別地,
- 已載入區塊邊緣的方塊發生變化,可以將方塊更新傳播到未載入區塊內的方塊,並使它們做出適當的響應。
- 流動的水或熔岩可以擴散到外部區塊中的第一個相鄰方塊,但流動會暫停,直到外部區塊被載入。
- 火可以傳播到載入區塊外的第一個相鄰的易燃方塊。像水和熔岩那樣,也會暫停;雖然是可見的,但動畫不會被播放並且在區塊活躍前不再繼續傳播。
- 草和菌絲可以傳播到外部區域的第一個相鄰方塊,但受影響的方塊在其區塊變為活躍之前不會真正改變其外觀,之後會即刻改變。
- 在載入區塊邊緣生長的南瓜和莖可將其果實放置在外面區塊的相鄰方塊上。
- 嘗試移動到外部區塊的實體(例如生物、礦車和箭)在離開載入區塊後會即刻停止所有活動。它仍然可見但會一動不動。當外部區塊被載入時,實體會繼續移動。
- 點燃的TNT會摧毀未載入區塊內的方塊,並且不像其他事件那樣,其效果不限於相鄰的方塊。在外部區塊的第二效果會暫停直到外部區塊變得活躍。例如,如果爆炸破壞了支撐沙或礫石的方塊,則沙或礫石不會立即掉落。附著在被摧毀的方塊上的物品也會發生同樣的事情,例如物品展示框和紅石火把,它們在區塊載入前不會掉落。
- 點燃的TNT被發射到未載入的區塊時會暫停在外部空中的第一個方塊。直到外部區塊變為載入狀態,它才將恢復其飛行和倒計時。
尋找區塊邊界
X或Z座標能被16整除時即為區塊之間的邊界。例如:(96,-32)即為一個四區塊的交點,X座標在80到96區間內並且Z座標在-48到-32區間內的方塊即為一個區塊,X座標在96到112區間內並且Z座標在-48到-32區間內的方塊即為另一個區塊,以此類推。當X和Z座標為16的倍數時,此時玩家會穿越一個區塊。
本質上,當X和Z座標可被16除盡時,玩家位於區塊的西北角。
此外,玩家可根據此公式知道他們所處的區塊:
區塊的X座標:Floor( X座標 / 16 )
區塊的Z座標:Floor( Z座標 / 16 )
Floor是取得小於等於指定數字的最大整數,如Floor( 27.9561 )是27。
換句話來說,如果X是27,Z是-15,區塊將會是( Floor( 27 / 16 ), Floor( -15 / 16 ) )區塊,這意味著玩家在區塊(1,-1)。
同時,玩家可以透過這個公式知道他距離西北角的距離:
( X或Z座標 ) AND 15
在Java版中,F3 + G鍵可用來顯示區塊邊界,或者按下F3鍵可打開除錯介面以顯示玩家的X、Y和Z座標以及「chunk」變數的值。玩家可以透過「chunk」變數得知他們所處的區塊。
在基岩版中,當切換精緻的畫質時,世界會重新繪製,只載入玩家所處的區塊一瞬間。這個方法對尋找區塊邊界會很有用,因為在那一瞬間會顯示清晰的區塊邊界。
史萊姆區塊
史萊姆區塊指的是一些在Y=40以下能夠忽略亮度生成的史萊姆的區塊。這些區塊在其他方面與所有其他區塊相同。
Java版
史萊姆區塊在世界各地都存在(蘑菇地除外)。有十分之一的區塊都是史萊姆區塊。這些史萊姆區塊是透過將它們的區塊座標與世界的種子相結合,透過偽隨機算法確定的:
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和9)的隨機整數,如果該數字為0,則該區塊是史萊姆區塊。請注意,xPosition和zPosition是32位元整數(INT)。
基岩版
基岩版中的史萊姆區塊算法與Java版中的算法不同。該算法不依賴於種子碼,因此,每個世界中的史萊姆區塊位置是相同的。[1]
歷史
你可以幫助我們擴充關於該主題的更多資訊。
原因:section
| Java版pre-Classic | |||||
|---|---|---|---|---|---|
| Pre-classic(中間版本) | 區塊的概念加入 | ||||
| rd-132151 | 將區塊從16×16縮小為8×8 | ||||
| 現在靠近玩家的區塊被優先載入 | |||||
| Java版Classic | |||||
| ? | 區塊大小又是16×16了 | ||||
| Java版Infdev | |||||
| 20100227 | 地圖高度不再是自訂的。區塊高度變更為128。 | ||||
| Java版 | |||||
| 1.2.1 | 區塊的高度增加到了256。 | ||||
| 1.14 | 改變了區塊載入的方法。 | ||||
你知道嗎
- 一個世界可生成14萬億(14,062,500,000,000)個真區塊。區塊共有7.46×10244,700種可能的區塊,不包括實體。
- 如果玩家位於未生成的區塊裡,世界會立即隱藏,直到玩家位於一個有效區塊裡。如果玩家的Y座標在區塊邊界外時,這就不會被觸發。
- 在基岩版中,如果區塊中有一個區段裏面沒有任何方塊,則在其中放置方塊會顯示與區塊載入相同的動畫。該錯誤使玩家在放置的方塊時,視野變成天空的顏色大約1秒鐘,並逐漸消失,變為正常的畫面。如果時間是日出或日落,並且玩家在其中放置了一個方塊,那麼如果玩家不斷上下擺動頭部,它實際上會持續變更顏色1秒鐘。