第二十八章 區(qū)塊與區(qū)段
在上一章中,我們提到了“區(qū)塊刻”。區(qū)塊刻是個啥我們暫時不用了解,但區(qū)塊我們還是要很詳細的了解一下。
首先讓我們認識一下區(qū)塊(Chunk)。
當你在Minecraft世界行走時,你或許會發(fā)現你的視野邊緣是由一個個正方形的區(qū)域組成的。這些正方形區(qū)域就是正在加載的區(qū)塊。
Minecraft的世界是由一個個區(qū)塊組成的,每個區(qū)塊的長寬是16格,高是256格。在還未正式發(fā)布的Minecraft1.18版本中,區(qū)塊的高度甚至達到了384格。
所以說,一個區(qū)塊包含著65536塊方塊。而一個世界最多可以生成14062500000000個區(qū)塊(約為14億),每種區(qū)塊都有7.46×10(的244,700次方)種可能的區(qū)塊種類。怎么樣,是不是很震撼?照這樣計算,一個世界就有9216000000000000000(921.6京[1京=10000萬億])塊方塊。
但是上面這些只是真區(qū)塊。什么是真區(qū)塊呢?聽說過Minecraft的邊境之地吧,當你到達Minecraft的很遠的地方時,那里的區(qū)塊會出現Bug,也就是加載錯誤(32位溢出)。在Java版中,這個BUG早就已經在Beta1.8版本移除(但沒有完全移除,64位溢出導致的邊境之地仍然存在),并添加了世界邊界攔著你。當你以任何方式越過世界邊界后來到外面,會得到一些負面效果,扣血死亡,就好像絕地求生里一樣。其實Java版的Minecraft還真的有點像絕地求生,你還可以使用特定的指令修改邊界,來達到絕地求生的效果。是不是很神奇?
在基巖版,并沒有邊界,所以你仍然可以看到那個神奇的區(qū)塊。但可惜,基巖版的邊境之地即將于1.17.2版本移除,目前的1.17.2測試版中邊境之地已經木掉了。
所以,真區(qū)塊就是正常沒有bug的區(qū)塊。而那些bug的區(qū)塊,則被叫做“假區(qū)塊”。
一個區(qū)塊被分成數個長寬高均為16格的區(qū)段。實際上,雖然區(qū)塊這個詞更常見,但是在Minecraft中,大多數游戲的運算都是以區(qū)段而不是以區(qū)塊為單位的。
隨機刻就是一個很好的例子。區(qū)塊刻運算過程中,有一個刻叫隨機刻。隨機刻我們在講/gamerule指令時已經見過了,但是我們還不知道它的運作方式。
那么它是怎么運作的呢?
一個區(qū)段有16×16×16=4096個方塊。每一隨機刻中,將會隨機抽取randomTickSpeed規(guī)則設定的數量的方塊,即默認Java是抽取3個方塊,基巖是抽取1個方塊。
大多數方塊被抽到后并不會有什么影響,但以下方塊會收到影響:
耕地上的農作物——有水可能生長,無水可能掉落
蘑菇——光照低則有可能傳播,光照高則有可能掉落
藤蔓(wàn)——可能傳播
火[僅基巖版]——可能熄滅或傳播
冰和雪——可能融化
樹葉——在附近沒有樹干的情況下可能枯萎
耕地——濕潤程度會更新
可以生長的植物和滴水石錐——可能生長
草方塊和菌絲——可能傳播或變?yōu)槟嗤?p> 樹苗——可能長成樹
巖漿——可能讓附近的方塊上著火
紅石礦石——會熄滅
下界傳送門方塊——可能生成一只豬靈(Minecraft1.16版本及以上)或僵尸豬人(低于Minecraft1.16)
海龜蛋——破裂或孵化
營火——會冒出煙霧粒子
銅質方塊——可能生銹
處于滴水石錐下方的煉藥鍋——如果滴水石錐上方有熔巖或水,煉藥鍋可能會被填充
一個Minecraft存檔包含超級多的區(qū)塊,所以游戲游玩時肯定不會將這些區(qū)塊全部加載,而是選取部分區(qū)塊進行加載。
在Java版,每個區(qū)塊要加載都需要一個加載標簽。每個加載標簽都具有三個屬性:
加載等級、標簽類型和存活時間(可選屬性)
加載等級,即規(guī)定了該區(qū)塊的加載級別有多高。加載等級越小,能加載的內容就越多。如果加載等級有多個,那么將會生效的將會是數值最小的那個。
加載等級的范圍是22到44,分為四個類型:
強加載:≤31——所有游戲內容都會運算
弱加載:32——除區(qū)塊刻、實體以外其他游戲內容都會運算
加載邊界:33——只有少部分內容會正常運行(紅石、命令方塊不會運行)
不可訪問:34——只有世界生成會在這些區(qū)塊中運行
加載等級會向相鄰8個區(qū)塊傳播,每成功傳播一次加載等級會加一級。
標簽類型,用于確定該加載標簽的來源。目前來說,標簽類型有以下幾種來源:
\\玩家\\
加載范圍:正方形,邊長為渲染距離(單人)或view-distance(多人)×2+1
加載等級:31
比如,當渲染距離為12時,游戲就會加載以玩家為中心的25×25個強加載區(qū)塊,外邊圍著一圈弱加載區(qū)塊和加載邊界。
\\強制\\
使用/forceload指令賦予
等級:31
\\出生點\\
等級:22
強加載范圍:19×19
\\傳送門\\
使用下界傳送門時,游戲會給予即將到達的另一個維度區(qū)塊賦予等級30的加載標簽。
強加載范圍:3×3
\\末影龍\\
等級:24
強加載范圍:15×15
\\瞬移\\
實體(注意不是玩家)瞬移后(包括使用/tp、/spreadplayers和末地傳送門,刷沙機就是利用了這個原理)在瞬移后的區(qū)塊創(chuàng)建的為時5游戲刻的加載標簽。
等級:33(使用/tp是32)
\\臨時\\
其他游戲代碼告訴游戲該區(qū)塊需要加載時臨時建立的標簽,僅持續(xù)1游戲刻。
等級:至少為33,視游戲代碼而定。
在基巖版,玩家加載的范圍和Java版不一樣,呈現一個圓形。使用/tickingarea,也可以像/forceload一樣一直讓區(qū)塊保持加載。
現在,你知道了區(qū)塊是個什么東西了吧?
(唉,你看,這個礦洞會生成史萊姆唉?。?