Minecraft Wiki

除另有声明,转载时均必须注明出处若簡繁轉換出錯,請以遊戲內為準请勇于扩充与修正内容有兴趣逛逛我们的微博沟通交流,欢迎到社区专页需要协助,请在告示板留言

了解更多

Minecraft Wiki
Advertisement
Chunk

一個區塊的地面部分的截面

區塊(Chunk)是Minecraft世界裡一個大小為16×16的區域。

生成[]

區塊寬16格,長16格,內部包含許多方塊。在主世界中,區塊高384格;在地獄終界中,區塊高256格。當新建世界時會在重生點附近生成區塊,在Java版中,世界中最初會生成43×43個區塊,其過程顯示在世界載入畫面。隨著玩家對世界的探索,相鄰的區塊也會被生成。

區塊是透過種子進行生成的,這意味著在相同的版本下,使用相同的種子,生成的區塊也會基本相同。

區塊載入[]

由於一個世界極大並且包含極多區塊,因此遊戲僅載入部分區塊以使遊戲可玩,遊戲不會運算已卸載的區塊。

Java版[]

載入等級

載入等級用於決定了這個區塊是否能被載入和區塊生成的程度,取決於顯示距離。載入等級的範圍是0-45,載入等級大於44的區塊會被立刻卸載。

載入等級可以分為以下有四種載入等級類型:

類型 等級 屬性
實體計算(Entity Ticking) ≤31 實體、方塊實體和計劃刻可能被計算,方塊修改可以被追蹤。
方塊計算(Block Ticking) 32 實體不可以被計算,但可能被追蹤,方塊實體和計劃刻可能被計算,方塊修改可以被追蹤。
完全載入(Full) 33 實體不可以被計算,但可能被追蹤,方塊實體和計劃刻不可以被計算,方塊修改不可以被追蹤。
不可存取(Inaccessible) ≥34 實體和方塊修改都不可以被追蹤,方塊實體和計劃刻不可以被計算,但世界生成會在這些區塊中執行。

不可存取的區塊根據載入等級決定本區塊應該進行生成到什麼程度。如果目前區塊生成已經到達或超過了載入等級對應的生成程度,則不進行繼續生成。

等級 區塊狀態
34 初始化光照計算(Initialize Light)
35 地形雕刻(Carvers)
36 填充生態域(Biomes)
37-44 生成結構範圍(Structure Starts)
計算等級

類似於載入等級,計算等級決定了這個區塊應該計算什麼內容,取決於模擬距離,它的範圍是0-33。

計算等級和載入等級一起決定了區塊能否計算實體和方塊等內容。如果一個區塊載入等級為實體計算載入等級(小於等於31)且計算等級也小於等於31,則區塊內的實體、方塊實體和計劃刻每遊戲刻都進行各種計算,這種類型的區塊通常被稱為強載入區塊(Entity Processing Chunk);如果一個區塊載入等級為實體計算載入等級或方塊計算載入等級(小於等於32)且計算等級等於32,則區塊內的方塊實體和計劃刻會被計算,實體會被追蹤和記錄,但無法參加每遊戲刻的計算,這種類型的區塊通常被稱為弱載入區塊(Lazy Processing Chunk)。如果一個區塊載入等級是完全載入等級(33)且計算等級等於32,則區塊內實體會被追蹤和記錄,但計劃刻和方塊實體無法參加每遊戲刻的計算,這種類型的區塊通常被稱為載入邊界區塊(Loading Border Chunk)。計算等級等於33或載入等級大於33代表區塊內實體、方塊實體和計劃刻不會被計算。

當實體和方塊事件穿過不同載入行為的區塊時,會產生多種特殊情況:

  • 嘗試移動到弱載入或載入邊界區塊的實體在離開強載入區塊後會即刻停止所有活動。當這個區塊變為強載入區塊時,實體會按照進入時的位置和速度繼續移動。
  • 載入邊界區塊中的方塊可以請求一個計劃刻,但是直到該區塊變為強載入或弱載入區塊時才進行處理。
  • 強載入區塊中的點燃的TNT可以摧毀弱載入和載入邊界區塊內的方塊。
  • 流動的熔岩可以擴散到載入邊界區塊的第一個相鄰方塊,但流動會暫停,直到外部區塊變為強載入或弱載入區塊。
  • 在強載入區塊邊緣生長的南瓜和西瓜梗可將其果實放置在外面區塊的相鄰方塊上。

標籤[]

區塊的載入等級和計算等級是由本身或附近的區塊所帶有的標籤(Ticket)產生的。每個載入標籤或計算標籤都有三項屬性:標籤類型、基礎等級和存活時間。遊戲內共有8種標籤類型,分別用於不同的載入情況。

重生點標籤
主條目:重生點區塊
Spawn chunks range

重生點載入標籤的等級傳播

世界重生點所在的區塊會獲得基礎等級為22的載入標籤和計算標籤。使用/setworldspawn改變世界重生點時,重生點標籤會同時改變。

終界龍標籤

當有玩家參加終界龍戰鬥時,系統自動在終界的(0,0)區塊放置基礎等級為24的載入標籤和計算標籤。當所有玩家都退出終界龍戰鬥或終界龍戰鬥結束,此標籤自動釋放。

玩家標籤

每個玩家都會在以自身所在區塊放置一個基礎等級為的計算標籤,其中s是模擬距離。

同時,每個玩家以自身區塊為中心的一個正方形範圍內放置基礎等級為31的載入標籤。放置載入標籤的範圍只與用戶端或伺服器的顯示距離有關:在單人遊戲中,正方形的邊長為,其中d是用戶端的顯示距離;在多人遊戲中,正方形邊長的公式不變,但dserver.properties中的view-distance的值。

當顯示距離發生變化時,玩家載入標籤的範圍也會隨之改變;當模擬距離發生變化時,玩家計算標籤的等級也會隨之改變。

強制載入標籤

使用/forceload可使得區塊獲得基礎等級為31的載入標籤和計算標籤。與重生點載入標籤類似,它只取決於目前世界的資料,在遊戲重啟後這些標籤依舊有效。

光照標籤

光照標籤只用於世界生成,區塊會獲得基礎等級為33的載入標籤,而不會加入計算標籤。當一個區塊的生成階段即將進入計算初始光照(Light)時,系統自動給這個區塊放置光照標籤,保證在計算區塊光照的過程中它的載入等級能一直保持在可訪問的等級。當光照計算結束後,此標籤自動釋放。

傳送門標籤

實體穿過地獄傳送門後,在目標維度的目標區塊放置基礎等級為30的載入標籤和計算標籤,存活時間為300遊戲刻(15秒)。傳送門載入標籤是為了實體穿過傳送門後能在目標位置上可以繼續被計算,而存活時間保證了在穿過傳送門後目標位置不會一直被載入。

傳送後標籤

玩家使用/tp/spreadplayers或在旁觀者模式下傳送到另一玩家時,傳送的目標區塊會獲得基礎載入等級為32的載入標籤和計算標籤,存活時間為5遊戲刻(0.25秒)。當實體穿過終界折躍門時,傳送的目標區塊也會獲得基礎載入等級為33的載入標籤和計算標籤,存活時間為5遊戲刻(0.25秒)。這種類型的標籤是為了實體傳送後的區塊能保證處於生成完畢的狀態。

未知標籤

當系統需要立刻使用區塊的資料,而區塊還沒有建立或生成到指定階段時,系統自動給這個區塊放置載入標籤而不放置計算標籤,它的存活時間為1遊戲刻(0.05秒)。未知載入標籤的基礎等級不固定,但都大於32,它的載入等級代表了它要求區塊生成到什麼階段。這種情況會發生於各種遊戲計算中,例如生物AI計算,生物生成等。

等級傳播[]

帶有載入標籤的區塊會向相鄰的區塊傳播等級。對於每個標籤,等級從帶標籤的區塊位置開始傳播,每向外傳播一次就等級增加1。對於載入標籤,等級只會傳播到45,更大等級的區塊不在記憶體中;對於計算標籤,如果已經傳播到33級,再向外傳播就不會繼續增長,維持在33級。假設帶有標籤的區塊位置為s,基礎等級為l,需要計算等級的區塊位置為d,則這個區塊的等級為(不考慮已達到最大等級的狀況),即本區塊的等級等於標籤的基礎等級與本區塊到標籤區塊的切比雪夫距離之和。

如果一個區塊傳播獲得了不同的等級,則最小的等級作為本區塊的等級。如果一個帶有標籤的區塊的基礎等級大於其他區塊傳播而來的等級,那麼等效於這個標籤沒有起到任何作用。

閒置逾時[]

如果一個維度長時間內沒有玩家或實體出入,則沒有必要長時間計算維度內的一些內容,這就是閒置逾時的作用。閒置逾時每刻增加1,當維度內存在任何玩家或有使用/forceload強制載入的區塊時,閒置逾時被停用且被重設為0;當有實體進入或離開維度時,閒置逾時也被重設為0。當值超過300時(15秒),這個維度就不會計算終界龍戰鬥、實體和方塊實體,但仍然會計算計劃刻、世界邊界天氣突襲和普通方塊事件,生成也會被計算,但由於維度內不存在玩家所以會失敗。

基岩版[]

主條目:常載入區域

在已載入區塊裡,所有遊戲內容都能夠被運算。在未載入的區塊裡幾乎各種遊戲內容都不會運算。

區塊的載入範圍由模擬距離n決定,控制實體、方塊更新的最大範圍,其最大的載入範圍距離玩家曼哈頓距離n+1個區塊,且與玩家所在區塊的X和Z座標相同的最外側4個區塊不載入。在右圖中,紅色和綠色區域表示模擬距離內載入的區塊。

Simulation Distance 4(Bedrock1.20.50.20+)Simulation Distance 5(Bedrock1.20.50.20+)Simulation Distance 6(Bedrock1.20.50.20+)Simulation Distance 7(Bedrock1.20.50.20+)Simulation Distance 8(Bedrock1.20.50.20+)Simulation Distance 9(Bedrock1.20.50.20+)Simulation Distance 10(Bedrock1.20.50.20+)Simulation Distance 11(Bedrock1.20.50.20+)Simulation Distance 12(Bedrock1.20.50.20+)

種類[]

玩家載入
近似圓形[需要更多資訊]
在玩家模擬距離內的區塊會被載入。
指令載入
使用/tickingarea指令載入的區塊。

局限性[需要更多資訊][]

  • 實體
    • 生物生成遵循相同的規則。

特殊情況[]

一個區塊中的事件可能會影響外部的區塊。如果外部的區塊處於非活動狀態,則在大多數情況下會立即暫停。但下面情況是一些例外:

  • 已載入區塊邊緣的方塊發生變化,可以將方塊更新傳播到未載入區塊內的方塊,並使它們做出適當的響應。
  • 流動的水或熔岩可以擴散到外部區塊中的第一個相鄰方塊,但流動會暫停,直到外部區塊被載入。
  • 火可以傳播到載入區塊外的第一個相鄰的易燃方塊。像水和熔岩那樣,也會暫停;雖然是可見的,但動畫不會被播放並且在區塊活躍前不再繼續傳播。
  • 草和菌絲土可以傳播到外部區域的第一個相鄰方塊,但受影響的方塊在其區塊變為活躍之前不會真正改變其外觀,之後會即刻改變。
  • 在載入區塊邊緣生長的南瓜和莖可將其果實放置在外面區塊的相鄰方塊上。
  • 嘗試移動到外部區塊的實體(例如生物、礦車和箭)在離開載入區塊後會即刻停止所有活動。它仍然可見但會一動不動。當外部區塊被載入時,實體會繼續移動。
  • 點燃的TNT會摧毀未載入區塊內的方塊,並且不像其他事件那樣,其效果不限於相鄰的方塊。在外部區塊的第二效果會暫停直到外部區塊變得活躍。例如,如果爆炸破壞了支撐沙或礫石的方塊,則沙或礫石不會立即掉落。附著在被摧毀的方塊上的物品也會發生同樣的事情,例如物品展示框和紅石火把,它們在區塊載入前不會掉落。
  • 點燃的TNT被發射到未載入的區塊時會暫停在外部空中的第一個方塊。直到外部區塊變為載入狀態,它才將恢復其飛行和倒計時。

尋找區塊邊界[]

Chunkf32

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,則該區塊是史萊姆區塊。請注意,xPositionzPosition是32位元整數(INT)。

基岩版[]

基岩版中的史萊姆區塊算法與Java版中的算法不同。該算法不依賴於種子碼,因此,每個世界中的史萊姆區塊位置是相同的。[1][2]

歷史[]

此段落仍需完善。你可以幫助我們擴充關於該主題的更多資訊。

Java版pre-Classic
Pre-classic(早期版本)加入了區塊。
現在區塊的大小是16×16。
rd-132151將區塊從16×16縮小為8×8。
現在靠近玩家的區塊被優先載入。
Java版Classic
?區塊大小又是16×16了。
Java版Infdev
20100227不再能自訂區塊高度。區塊高度變更為128。
Java版
1.2.112w07a區塊的高度增加到了256。
1.1016w20a現在可以按下F3 + G來顯示區塊的邊界。
1.14?改變了區塊載入的方法。
1.1720w49a現在可以自訂區塊的高度。
21w06a將主世界區塊的高度增加至384。
21w15a暫時將主世界區塊的高度恢復至256。
1.18exp1主世界區塊的高度再次變更為384。
21w37a視距所決定的區塊繪製範圍的形狀由原先的方形改為圓柱形。
21w38a現在可以自訂模擬距離。

你知道嗎[]

  • 一個世界可生成14萬億(14,062,500,000,000)個真區塊。區塊共有7.46×10244,700種可能的區塊,不包括實體
  • 如果玩家位於未生成的區塊裡,世界會立即隱藏,直到玩家位於一個有效區塊裡。如果玩家的Y座標在區塊邊界外時,這就不會被觸發。
  • 基岩版中,如果區塊中有一個區段裡面沒有任何方塊,則在其中放置方塊會顯示與區塊載入相同的動畫。該錯誤使玩家在放置的方塊時,視野變成天空的顏色大約1秒鐘,並逐漸消失,變為正常的畫面。如果時間是日出或日落,並且玩家在其中放置了一個方塊,那麼如果玩家不斷上下擺動頭部,它實際上會持續變更顏色1秒鐘。

參見[]

參考[]

  1. @protolambda和@ jocopa3進行過基岩版史萊姆區塊算法的反向工程,可以在GitHub上找到:[1][2]
  2. Blocktopograph中的算法:SlimeChunkRenderer->isSlimeChunk(int chunkX, int chunkY)

語言

Advertisement