-
區塊
(minecraft遊戲功能的單位)
鎖定
- 中文名
- 區塊
- 外文名
- chunk
- 意 義
- minecraft遊戲功能的單位
- 變 種
- 史萊姆區塊
- 目前大小
- 16×16×384(1.18+和快照21W06a)
- 大 小
- 16×16×256
區塊提示
1.本詞條創建於1.18版本更新之前,內容雖已經過更新,但依舊會有部分內容與遊戲相出入,有出入的地方請以
2.本詞條只是籠統的介紹“區塊”,若想研究探查其運行邏輯,請移步至Minecraft WiKi的“區塊”詞條、“區塊格式”詞條、“調試屏幕”詞條和“高度”詞條
區塊區塊詳情
區塊寬16格,長16格,高384格(1.17及以前版本為256格),因此一個區塊共有98304個方塊(1.17及以前版本為65536個方塊)。當玩家第一次出生在世界時會在其周圍生成區塊(出生點區塊),而隨着玩家對世界的探索,相鄰的區塊也會被生成。一個世界可生成14萬億(14,062,500,000,000)個真區塊。每個區塊有7.46×10244700種可能的區塊(此項數據已過時),不包括實體。
[1]
在單人遊戲中所生成區塊的確切數字往往與視野距離和玩家的移動有關。而在多人遊戲裏,在每位玩家周圍會生成一個以玩家為中心,半徑為10的二維區塊網格(一共21×21總計441個區塊),儘管這可以被更改為3-15之間的一個值,通常只會在連接不良的家用服務器裏調低此數值。在指定範圍內的區塊會有活動(生物生成、樹木生長、水流動、掉落的物品消失等),而不在範圍內的區塊不會有交互,並會存儲在硬盤裏(這個“按需加載”內存管理機制被廣泛用於程序化的地形生成,以便玩家的電腦不需要同時跟蹤並更新成百上千個植物和生物)。區塊每次存儲的時間間隔最小為30秒。
Minecraft的渲染器將一個區塊分為24個(1.17及以前版本為16個)16x16x16的渲染區塊(即子區塊),並編譯到OpenGL顯示名單裏用於加快渲染速率。任意一個渲染區塊內的方塊發生變動的話,渲染區塊均需要重建。
區塊區塊加載
由於一個世界極大並且包含極多區塊,因此遊戲僅加載部分區塊以使遊戲可玩,遊戲不會運算已卸載的區塊。
區塊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,是遊戲中最小的加載等級。
下界傳送門
“傳送門”加載標籤本身沒有“存活時間”,不過如果下界傳送門300遊戲刻(不卡頓則300遊戲刻=15秒)內沒有使用過,傳送門系統會移除這個的加載標籤。【區塊加載器就是根據這一原理製造和工作的: 】
屠龍戰
“龍”加載類型的加載等級為24。在屠龍戰開始時,在末路之地維度的(0,0)區塊創建,並在屠龍戰停止或結束後移除。
瞬移
實體瞬移後在瞬移到的區塊創建的加載標籤,包括使用/tp指令、/spreadplayers指令,通過末地傳送門,末地折躍門。對於/tp命令,加載等級為32,而/spreadplayers指令和末地傳送門的加載等級為33。
具有“存活時間”屬性,為5遊戲刻,也就是説它在5個遊戲刻後失效。
區塊加載臨時標籤
在任意遊戲代碼調用“getChunk”方法時創建的標籤。如果遊戲認為這個區塊應該被加載,它就會把這個“臨時”標籤賦給那個區塊(可能在創建它之後)。
加載等級與區塊是否已經完成世界生成有關。它的等級至少會是33,但在許多情況下會大於33。
例如:生物遊蕩AI執行時,它將會檢查某個方塊是否有完整上表面。作為檢查的一部分,這個區塊會獲得等級為33的“臨時”類型的加載標籤。
它的“存活時間”為1遊戲刻。
侷限性
- 閒置超時
- 每個維度都有自己的閒置超時時長。如果這個維度內存在玩家,或者有被強制加載的區塊(使用/forceload),閒置超時會被禁用。每次有實體進入/離開這個維度,閒置超時會被重置為0。
- 如果閒置超時時長到達300,就會停止這個維度的一些運算,其中包括實體運算,屠龍戰和全局實體(閃電)。
- 在加載區塊中並不是所有遊戲內容永遠會運算,因為它們可能還有其他條件,其中包括:
特殊情況
一個區塊中的事件可能會影響外部的區塊。如果外部的區塊處於非活動狀態,則在大多數情況下會立即暫停。特別地,
- 加載等級為33的區塊中的方塊可以請求一個計劃刻,但是直到該區塊獲得32及以下的等級時才進行處理。
區塊基岩版
在已加載區塊裏,所有遊戲內容都能夠被運算。在未加載的區塊裏幾乎各種遊戲內容都不會運算。
種類
- 玩家加載
- 近似圓形。
- 在玩家模擬距離內的區塊會被加載。
- 命令加載
- 使用/tickingarea指令加載的區塊。
侷限性
- 生物生成遵循相同的規則。
特殊情況
一個區塊中的事件可能會影響外部的區塊。如果外部的區塊處於非活動狀態,則在大多數情況下會立即暫停。特別地,
- 在加載區塊邊緣生長的南瓜和莖可將其果實放置在外面區塊的相鄰方塊上。
區塊區塊刻
作為遊戲刻的一部分,每個遊戲刻都會對特定的區塊執行區塊刻。(紅石刻等請移步至“刻”詞條)
在Java版中,在每個遊戲刻中,加載等級在31級或以下、區塊中心與最近的玩家的水平距離小於128的區塊會執行區塊刻。
在基岩版中,在每個遊戲刻中,所有已加載區塊都會執行區塊刻。
區塊刻有許多影響:
- 生物自然生成。
- 雷暴天氣下,閃電可能在區塊內某處生成(十萬分之一的幾率)。
- 每一縱向上的最頂端方塊有十六分之一的幾率檢查天氣更新
- 如果在下雪,並且條件合適,一片雪可能被放置。
- 如果在下雨,煉藥鍋可能被填充並最終填滿。
- 區塊內某一個方塊會接受到隨機刻更新。 [2]
區塊史萊姆區塊
史萊姆區塊指的是一些在Y=40以下能夠忽略亮度生成史萊姆的區塊。這些區塊在其他方面與所有其他區塊相同。
區塊Java版生成
使用區塊座標和世界種子來生成介於0和9之間(含0和9)的隨機整數,如果該數字為0,則該區塊是史萊姆區塊。請注意:“xPosition”和“zPosition”是32位整數(INT)。
區塊基岩版生成
基岩版中的史萊姆區塊算法與Java版中的算法不同。該算法不依賴於世界種子,因此,每個世界中的史萊姆區塊位置是相同的。
[1]