第三十二章 tickingarea-基巖版控制常加載區(qū)塊
在“第二十八章——區(qū)塊”中,我曾提到過Java版和基巖版分別有一條指令用于控制常加載區(qū)塊。
在基巖版中,這條指令是:/tickingarea,即一直執(zhí)行游戲刻(ticking)的地區(qū)(area)。
/tickingarea
作用:增加、減少或查看常加載區(qū)塊。
需要權(quán)限等級:1
需要作弊:是
格式:
/tickingarea add <起點(diǎn)方塊坐標(biāo)><終點(diǎn)方塊坐標(biāo)>[此區(qū)域名稱:字符串]
/tickingarea add circle <區(qū)域圓心坐標(biāo)><區(qū)域半徑:整數(shù)>[此區(qū)域名稱:字符串]
/tickingarea remove <地區(qū)位置:坐標(biāo)>
/tickingarea remove <地區(qū)名稱:字符串>
/tickingarea remove_all
/tickingarea list [維度選項(xiàng):all-dimensions]
書接前文,那個我的世界網(wǎng)易版租貸服在建完回城雪球后,發(fā)現(xiàn)一個問題:有時候這雪球不靈。
經(jīng)過腐竹的仔細(xì)排查,發(fā)現(xiàn)是因?yàn)樵撁罘綁K鏈所在的區(qū)域雖然是在主城正下方,但因?yàn)榛鶐r版并沒有出生點(diǎn)區(qū)塊,就導(dǎo)致有時候主城里玩家都跑光了,區(qū)塊停止加載,回城雪球就不管用了。
為此,這位腐竹使用了以下指令:
/tickingarea add 303 100 92 343 20 52 home
這條指令的作用是:
將與(303,100,92)到(343,20,52)這塊區(qū)域有重疊部分的所有區(qū)塊列為常加載區(qū)域,并取名為home。
其中,選取區(qū)域的模式和/fill是一樣的,即選定區(qū)域的對角坐標(biāo)。雖然這里選取時有使用Y軸,但由于區(qū)塊并不考慮Y軸,其實(shí)沒多大用處。
游戲并不會將選取的區(qū)域直接列為常加載區(qū)域,而是會將與選取區(qū)域有重疊部分的所有區(qū)塊(哪怕只有那么一塊方塊)列為常加載區(qū)域,不然游戲計算時就非常麻煩(因?yàn)榫_到了每個方塊)。
也就是說,哪怕你只選取了一格方塊,也會將該格方塊所在的區(qū)塊列為常加載區(qū)域。
在使用這條指令過后的第三天下午,服務(wù)器的MSPT突然從原本的39ms/t~57ms/t暴增到了265ms/t~527ms/t,最高值甚至達(dá)到了3761ms/t。雖然網(wǎng)易租貸服看不到那么直接的數(shù)據(jù),但直觀上的游戲卡頓已經(jīng)快到玩不下去的地步了。腐竹接到管理員的消息過后,立馬進(jìn)服排查問題(因?yàn)榇鏅n上一次備份還在一個月前)。在忍受了數(shù)小時的超高延遲后,終于找到了問題:
主城范圍冒險并沒有覆蓋到主城的地下,但這兒仍然是常加載區(qū)域。一位資深熊孩子在一個月前嘗試炸服無果后,仔細(xì)鉆研最終發(fā)現(xiàn)了這個漏洞。于是在主城的地下搞出了大量已經(jīng)命名的生物(非法獲取到刷怪蛋,命名后放入發(fā)射器,配備專門研制的高頻紅石)。這些被命名的生物無法消失,又因?yàn)樘幱诔<虞d區(qū)塊,造成了服務(wù)器卡頓。
腐竹為了解決這個問題,使用了如下指令:
/kill @e[type=!player,r=50]
/kill @e[type=item,r=50]
?。ù藭r服務(wù)器在經(jīng)歷一陣達(dá)好幾萬MSPT的卡頓后,終于順暢了許多,然后腐竹就拆掉裝置了,并將需要常加載區(qū)域的東西全部轉(zhuǎn)移到了一個很遠(yuǎn)很遠(yuǎn)的地方)
/tickingarea remove home
\\移除名為home的常加載區(qū)域\\
/tickingarea add circle 3000000 21 3000000 2 command
\\將與以(3000000,21,3000000)為圓心的半徑2區(qū)塊(32格)的圓有重疊部分的所有區(qū)塊列為常加載區(qū)域,并取名為command\\
其中,移除常加載區(qū)域時,如果當(dāng)時這位腐竹并沒有設(shè)定該常加載區(qū)域的名稱,那么它只能這樣做:
/tickingarea remove 323 65 72
這條指令會刪除所有包含該坐標(biāo)點(diǎn)的常加載區(qū)域。
如果這位腐竹忘記了該常加載區(qū)域的名稱,或者是忘記了它的位置,那該怎么辦?
它有兩種選擇,第一種是:
/tickingarea remove_all
\\刪除所有常加載區(qū)域\\
第二種是:
/tickingarea list
\\列出當(dāng)前緯度所有常加載區(qū)域\\
第二種方法中,list返回的信息是這樣的:
當(dāng)前維度中的所有常加載區(qū)域的列表
-區(qū)域名:X YZ到X Y Z
-區(qū)域名(圓形):X Y Z 半徑:1~4區(qū)塊
0~10/10常加載區(qū)域正在使用
別看就短短這幾行,信息量還是很大的。
首先,方形區(qū)域會直接顯示區(qū)域的對角坐標(biāo)。這個對角坐標(biāo)并不是添加時填寫的對角坐標(biāo),而是經(jīng)過重疊部分轉(zhuǎn)化成的實(shí)際加載區(qū)域的對角坐標(biāo)。圓形區(qū)域會顯示該區(qū)域轉(zhuǎn)化過后的中心點(diǎn)和設(shè)定的半徑。最后會顯示目前有多少常加載區(qū)域和常加載區(qū)域上限。
常加載區(qū)域數(shù)量還有上限?沒錯。一個存檔最多添加10個常加載區(qū)域,每個常加載區(qū)域的區(qū)塊數(shù)不能大于100。
圓形區(qū)域是什么?這就要看這個腐竹用的最后一條指令:
/tickingarea add circle 3000000 21 3000000 2 command
這條指令的意思上面已經(jīng)講過,這兒就不復(fù)制過來了。
圓形區(qū)域顧名思義,就是圓狀的常加載區(qū)域。它有兩個重要參數(shù):圓心和半徑
圓心坐標(biāo)和方形區(qū)域填寫的兩個坐標(biāo)一樣,實(shí)際上Y坐標(biāo)沒多大用。而半徑,它的單位不是格而是區(qū)塊。
半徑必須是1、2、3、4這四個整數(shù),即16格、32格、48格和64格。
確定了圓的范圍后,游戲就會進(jìn)行和方形區(qū)域一樣的操作:將與該圓重疊的所有區(qū)塊列為常加載區(qū)域。
這就是圓形區(qū)域。
現(xiàn)在,/tickingarea這條指令差不多就講完了,但還沒有完全講完,因?yàn)檫€有一個參數(shù)沒講:
list的維度選項(xiàng)。
維度選項(xiàng)參數(shù)只支持一個值:all-dimensions,即所有維度。使用了:
/tickingarea list all-dimensions
將不只是列出基準(zhǔn)點(diǎn)所處維度的所有常加載區(qū)塊,而是列出所有維度的所有常加載區(qū)塊。
歷史
基巖版
1.2.0——加入了常加載區(qū)域和配套的/tickingarea。