為什麼如今整個Minecraft社區,都在說《我的世界》1.17會迎來「洞穴更新」?
我們拋開投票不談,一個你可能不知道的情況是:Minecraft的洞穴實際早已經破敗不堪,4年前就被爆出一個嚴重的BUG,導致《我的世界》一共超過13萬個種子的洞穴遭受到了嚴重的破壞!
01
這要從一個著名的BUG說起:MC-111378;
2016年的4月份,一位叫做Erik Martin的玩家提交了一個並不起眼的BUG報告,該報告的編號被命名為MC-111378,也就是第111378個被發現的BUG。當然,這對於《我的世界》來說,並不是什麼大事,因為BUG對於mc來說真的是稀疏平常!
然而令人沒想到的是!在隨後的幾天裡,這個BUG迅速引起了包括Mojang在內,全世界玩家的廣泛關注!因為人們驚訝地發現在Minecraft的地下出現了無數無限循環的地形結構!這種無限循環,囊括了洞穴、地牢、廢棄礦井等等結構。只要處於循環的坐標軸上,無論什麼結構都將被無限複製!
最奇怪的是,在Minecraft地面上完全正常,但是地下卻完全的崩壞!
02
洞穴BUG是如何產生的?
這要從《我的世界》地形的誕生說起,Minecraft在世界生成之初,會有一個String.hashCode()的函數,它用來控制種子的生成。即當我們使用一個隨機種子創建世界時,這個函數就會執行並隨機在42.9億顆種子裡隨機挑一個,用來誕生世界。
種子確定後,Minecraft便開始用第二個函數MapGenBase.java()來生成世界,例如洞穴、遺蹟等等結構;關鍵問題就出現在了這第二步。
由於部分種子在函數計算中,出現了返回值為0的情況(正常應該為1),這導致每個區塊在進行數學計算時都×0,於是某條X軸線上所有區塊輸出的結果全都是0,最終造成了無限重複的曠世奇觀!
03
一顆「無限循環」種子引發的騷動:107038380838084
於是很快,SEED:107038380838084這顆地形生成的種子,迅速成為了《我的世界》最受歡迎的種子之一,無數的玩家前往駐足觀看這罕見奇景!有礦洞無限重複的,有礦井無限重複的,也有地牢無限重複的。但凡坐落在這條返回值為「0」的坐標上,所有結構無一倖免!
後來人們發現還有一顆種子,SEED:164311266871034會在第二次調用時,讓Y軸無限×0,單程Y軸上無限循環的奇景。於是人們開始認為,這兩個種子是當今世界上最「獨一無二」的奇觀,也是僅有的兩個罕見BUG種子。
(PS:1年前我在介紹這兩個種子的時候,也是這麼認為,還是太年輕啊!)
04
數學大神計算出:超13萬顆種子受到影響!
但很快,一個JAVA界的數學大神,經過周密的數據計算,得出一個驚人的結論:《我的世界》並不是只有這兩個種子會造成「無限重複」!
Ettanin表示,只要在一個確定是BUG的種子加上或者減去數字281474976710656,就會得到一個新的BUG種子。例如-174436595872572;388513357548740等等!並且宣稱《我的世界》中一共有13萬個這樣的BUG種子!
換句話說,Minecraft當前的地下結構包括「洞穴」的生成方案,存在有13萬個BUG。
所以可能很多《我的世界》玩家都在自己不知道的情況下,遇見了這樣的一個BUG,但因為生存的關係,沒法像旁觀模式一樣觀察到這「無限重複」的地下世界。也許現在的你打開Minecraft,在出生點附近開啟旁觀,潛入地下。可能你當前的生存世界,就是一個BUG種子!
所以,基於此種極為「嚴重」的BUG,Mojang長達4年依舊沒有修復MC-111378的情況下,你認為《我的世界》洞穴更新在1.17更新的概率有多大呢?
(PS:本文涉及JAVA函數的觀點,因本人並非專業的JAVA程式設計師,在諮詢了學習JAVA的朋友後也是聽得雲裡霧裡的,所以這裡儘量用大家可以理解的方式闡述和解讀。)