我的世界:4年前,mc史上最嚴(yán)重的bug泄露,13萬(wàn)個(gè)種子遭到破壞!
為什么如今整個(gè)Minecraft社區(qū),都在說(shuō)《我的世界》1.17會(huì)迎來(lái)“洞穴更新”?

我們拋開(kāi)投票不談,一個(gè)你可能不知道的情況是:Minecraft的洞穴實(shí)際早已經(jīng)破敗不堪,4年前就被爆出一個(gè)嚴(yán)重的BUG,導(dǎo)致《我的世界》一共超過(guò)13萬(wàn)個(gè)種子的洞穴遭受到了嚴(yán)重的破壞!
01
這要從一個(gè)著名的BUG說(shuō)起:MC-111378;

2016年的4月份,一位叫做Erik Martin的玩家提交了一個(gè)并不起眼的BUG報(bào)告,該報(bào)告的編號(hào)被命名為MC-111378,也就是第111378個(gè)被發(fā)現(xiàn)的BUG。當(dāng)然,這對(duì)于《我的世界》來(lái)說(shuō),并不是什么大事,因?yàn)锽UG對(duì)于mc來(lái)說(shuō)真的是稀疏平常!
然而令人沒(méi)想到的是!在隨后的幾天里,這個(gè)BUG迅速引起了包括Mojang在內(nèi),全世界玩家的廣泛關(guān)注!因?yàn)槿藗凅@訝地發(fā)現(xiàn)在Minecraft的地下出現(xiàn)了無(wú)數(shù)無(wú)限循環(huán)的地形結(jié)構(gòu)!這種無(wú)限循環(huán),囊括了洞穴、地牢、廢棄礦井等等結(jié)構(gòu)。只要處于循環(huán)的坐標(biāo)軸上,無(wú)論什么結(jié)構(gòu)都將被無(wú)限復(fù)制!
最奇怪的是,在Minecraft地面上完全正常,但是地下卻完全的崩壞!
02
洞穴BUG是如何產(chǎn)生的?

這要從《我的世界》地形的誕生說(shuō)起,Minecraft在世界生成之初,會(huì)有一個(gè)String.hashCode()的函數(shù),它用來(lái)控制種子的生成。即當(dāng)我們使用一個(gè)隨機(jī)種子創(chuàng)建世界時(shí),這個(gè)函數(shù)就會(huì)執(zhí)行并隨機(jī)在42.9億顆種子里隨機(jī)挑一個(gè),用來(lái)誕生世界。
種子確定后,Minecraft便開(kāi)始用第二個(gè)函數(shù)MapGenBase.java()來(lái)生成世界,例如洞穴、遺跡等等結(jié)構(gòu);關(guān)鍵問(wèn)題就出現(xiàn)在了這第二步。
由于部分種子在函數(shù)計(jì)算中,出現(xiàn)了返回值為0的情況(正常應(yīng)該為1),這導(dǎo)致每個(gè)區(qū)塊在進(jìn)行數(shù)學(xué)計(jì)算時(shí)都×0,于是某條X軸線上所有區(qū)塊輸出的結(jié)果全都是0,最終造成了無(wú)限重復(fù)的曠世奇觀!
03
一顆“無(wú)限循環(huán)”種子引發(fā)的騷動(dòng):107038380838084

于是很快,SEED:107038380838084這顆地形生成的種子,迅速成為了《我的世界》最受歡迎的種子之一,無(wú)數(shù)的玩家前往駐足觀看這罕見(jiàn)奇景!有礦洞無(wú)限重復(fù)的,有礦井無(wú)限重復(fù)的,也有地牢無(wú)限重復(fù)的。但凡坐落在這條返回值為“0”的坐標(biāo)上,所有結(jié)構(gòu)無(wú)一幸免!
后來(lái)人們發(fā)現(xiàn)還有一顆種子,SEED:164311266871034會(huì)在第二次調(diào)用時(shí),讓Y軸無(wú)限×0,單程Y軸上無(wú)限循環(huán)的奇景。于是人們開(kāi)始認(rèn)為,這兩個(gè)種子是當(dāng)今世界上最“獨(dú)一無(wú)二”的奇觀,也是僅有的兩個(gè)罕見(jiàn)BUG種子。
(PS:1年前我在介紹這兩個(gè)種子的時(shí)候,也是這么認(rèn)為,還是太年輕?。。?/p>
04
數(shù)學(xué)大神計(jì)算出:超13萬(wàn)顆種子受到影響!

但很快,一個(gè)JAVA界的數(shù)學(xué)大神,經(jīng)過(guò)周密的數(shù)據(jù)計(jì)算,得出一個(gè)驚人的結(jié)論:《我的世界》并不是只有這兩個(gè)種子會(huì)造成“無(wú)限重復(fù)”!
Ettanin表示,只要在一個(gè)確定是BUG的種子加上或者減去數(shù)字281474976710656,就會(huì)得到一個(gè)新的BUG種子。例如-174436595872572;388513357548740等等!并且宣稱(chēng)《我的世界》中一共有13萬(wàn)個(gè)這樣的BUG種子!
換句話說(shuō),Minecraft當(dāng)前的地下結(jié)構(gòu)包括“洞穴”的生成方案,存在有13萬(wàn)個(gè)BUG。
所以可能很多《我的世界》玩家都在自己不知道的情況下,遇見(jiàn)了這樣的一個(gè)BUG,但因?yàn)樯娴年P(guān)系,沒(méi)法像旁觀模式一樣觀察到這“無(wú)限重復(fù)”的地下世界。也許現(xiàn)在的你打開(kāi)Minecraft,在出生點(diǎn)附近開(kāi)啟旁觀,潛入地下。可能你當(dāng)前的生存世界,就是一個(gè)BUG種子!

所以,基于此種極為“嚴(yán)重”的BUG,Mojang長(zhǎng)達(dá)4年依舊沒(méi)有修復(fù)MC-111378的情況下,你認(rèn)為《我的世界》洞穴更新在1.17更新的概率有多大呢?
(PS:本文涉及JAVA函數(shù)的觀點(diǎn),因本人并非專(zhuān)業(yè)的JAVA程序員,在咨詢(xún)了學(xué)習(xí)JAVA的朋友后也是聽(tīng)得云里霧里的,所以這里盡量用大家可以理解的方式闡述和解讀。)