第六十五章 worldborder-MC是一款吃雞游戲
(本章節(jié)已于2022年7月12日重修)
?。ū菊伦髡咴谥匦迺r(shí)主要使用的是Minecraft Java1.13.2進(jìn)行實(shí)驗(yàn))
我們?cè)诘诙苏轮兄v區(qū)塊時(shí)曾經(jīng)了解到這么一個(gè)東西:
『聽(tīng)說(shuō)過(guò)Minecraft的邊境之地吧,當(dāng)你到達(dá)Minecraft的很遠(yuǎn)的地方時(shí),那里的區(qū)塊會(huì)出現(xiàn)Bug,也就是加載錯(cuò)誤(32位溢出)。在Java版中,這個(gè)BUG早就已經(jīng)在Beta1.8版本移除(但沒(méi)有完全移除,64位溢出導(dǎo)致的邊境之地仍然存在),并添加了世界邊界攔著你。當(dāng)你以任何方式越過(guò)世界邊界后來(lái)到外面,會(huì)得到一些負(fù)面效果,扣血死亡,就好像絕地求生里一樣。其實(shí)Java版的Minecraft還真的有點(diǎn)像絕地求生,你還可以使用特定的指令修改邊界,來(lái)達(dá)到絕地求生的效果。是不是很神奇?』
那用什么指令可以修改世界邊界呢?
這條指令就是:
/worldborder
worldborder這個(gè)單詞雖長(zhǎng),但其實(shí)是由world(世界)和border(邊境)這兩個(gè)單詞組成。所以,worldborder的意思是:世界邊境。
/worldborder
作用:管理世界邊界
需要權(quán)限等級(jí):Java-2
需要作弊:是
版本獨(dú)有:Java版
格式:
/worldborder add <增減量:米>[過(guò)渡時(shí)間]
\\將世界邊界的邊長(zhǎng)增加或減少指定的值,可指定變化邊長(zhǎng)的過(guò)渡時(shí)間\\
/worldborder set <邊長(zhǎng):米>[過(guò)渡時(shí)間]
\\將世界邊界的邊長(zhǎng)設(shè)定為指定的值,可指定變化邊長(zhǎng)的過(guò)渡時(shí)間\\
/worldborder center <x坐標(biāo)><z坐標(biāo)>
\\將世界邊界的中心設(shè)置為指定地點(diǎn),可使用相對(duì)坐標(biāo),但無(wú)法使用局部坐標(biāo)\\
/worldborder damage buffer <安全緩沖距離:米>
\\設(shè)置玩家超出世界邊界后,不受到傷害的安全緩沖距離\\
/worldborder damage amount <傷害量>
\\設(shè)置玩家超出世界邊界外的安全緩沖距離后,受到傷害的情況,下面會(huì)具體講解\\
/worldborder warning time <提前警告時(shí)間>
\\設(shè)置世界邊界在變化過(guò)程中,如果邊界經(jīng)過(guò)玩家所在位置所剩的時(shí)間小于等于指定的時(shí)間,將會(huì)給予玩家警告\\
/worldborder warning distance <警告距離>
\\當(dāng)玩家距離世界邊界的距離小于此指定值時(shí),將會(huì)出現(xiàn)警告\\
在學(xué)習(xí)這指令的使用前,我們不妨具體來(lái)了解一下世界邊界:
世界邊界,是Java1.8版本才出現(xiàn)的一個(gè)東西,用于防止玩家進(jìn)入假區(qū)塊,導(dǎo)致游戲崩潰或使得存檔損壞。對(duì)于處于生存和冒險(xiǎn)模式的玩家來(lái)說(shuō),可以在不作弊的情況通過(guò)一些bug逃出邊境,但是逃出去一定距離后會(huì)受到傷害,最終死亡。
?。ㄟ@就是為什么Minecraft從某方面來(lái)說(shuō)具有開(kāi)發(fā)吃雞小游戲的潛力)
世界邊界的屏障效果會(huì)在256格處消失,但是其作用會(huì)一直延續(xù)到Y(jié)=2的31次方-1的地方,即Y=2147483647的高度(Int整形上限,講NBT的值類型時(shí)會(huì)講到)。
如果我們把整個(gè)Minecraft地圖都渲染出來(lái),你就會(huì)發(fā)現(xiàn)世界邊界其實(shí)是一個(gè)藍(lán)色的正方形,正方形的中心位于世界原點(diǎn)(0.0,0.0),邊長(zhǎng)為29999984.0米(格)。
而我們通過(guò)worldborder指令,就可以修改這個(gè)『藍(lán)色正方形』的邊長(zhǎng)、中心位置和給玩家的效果。
首先,如果我們要修改邊長(zhǎng),可以有兩種方法:使用add或使用set。
add子命令可以增加或減少世界邊界的邊長(zhǎng),增加用正數(shù),減少用負(fù)數(shù)。
如:
/worldborder add 11
就可以將世界邊界的邊長(zhǎng)增加11米
/worldborder add -10
就可以將世界邊界的邊長(zhǎng)減少10米
set子命令可以直接將世界邊界的邊長(zhǎng)設(shè)置為一個(gè)指定的值,比如:
/worldborder set 10
這將會(huì)將世界邊界的邊長(zhǎng)設(shè)置為10米。
(注:你最大可以設(shè)置世界邊界的邊長(zhǎng)到60000000米)
雖然說(shuō)add和set子命令是設(shè)置世界邊界邊長(zhǎng)的,但確切來(lái)說(shuō),是設(shè)置藍(lán)色『屏障』的邊長(zhǎng)。
???這兩個(gè)不是一摸一樣嗎?
其實(shí)世界邊界由兩部分組成:藍(lán)色的虛假『屏障』,和隱形的真正屏障。
藍(lán)色的虛假屏障并不能攔住玩家,真正能夠攔住玩家的,是邊長(zhǎng)大于等于藍(lán)色屏障的隱形屏障。
隱形屏障構(gòu)成的隱形正方形,和藍(lán)色屏障構(gòu)成的藍(lán)色正方形,雖然中心一樣,但邊長(zhǎng)有時(shí)并不一樣。隱形屏障的邊長(zhǎng)必須是一個(gè)偶數(shù)(或奇數(shù),看中心點(diǎn)位置),因?yàn)樗仨氁幵诜綁K的邊緣,和方塊的網(wǎng)格重疊。而藍(lán)色屏障的邊長(zhǎng)可以是任意數(shù),也就是說(shuō)它不一定要處在方塊的邊緣,它是可以橫著穿過(guò)邊界方塊的中點(diǎn)的。
也就是說(shuō),隱形屏障的邊長(zhǎng)必須大于等于藍(lán)色屏障的邊長(zhǎng)。如果藍(lán)色屏障的邊長(zhǎng)也是一個(gè)偶數(shù)(或奇數(shù),看情況),那么兩者的邊長(zhǎng)就一樣,也就是互相重疊;但如果藍(lán)色屏障的邊長(zhǎng)是一個(gè)奇數(shù)(或偶數(shù),看情況),甚至是一個(gè)小數(shù),那么隱形屏障的邊長(zhǎng)將會(huì)是大于藍(lán)色屏障邊長(zhǎng)的最小偶數(shù)(或奇數(shù),也要看情況)。
(其實(shí)你不知道也可以的,畢竟Minecraft Wiki又沒(méi)記載這東西,這僅僅是作者實(shí)驗(yàn)得出的結(jié)果而已)
對(duì)了,還需要注意一點(diǎn):使用set子命令時(shí),當(dāng)你設(shè)置的邊長(zhǎng)是一個(gè)大于16777216(2的24次方)的奇數(shù)時(shí),最終設(shè)置成的邊長(zhǎng)將會(huì)強(qiáng)制變?yōu)橐粋€(gè)偶數(shù)。(Java1.13.2作者實(shí)驗(yàn)得出)
為什么呢?可能是因?yàn)閟et子命令的『邊長(zhǎng)』參數(shù)其數(shù)據(jù)類型是單精度浮點(diǎn)數(shù)(下面的原因比較超綱,如果你有興趣可以看一看),單精度浮點(diǎn)數(shù)只有24位的二進(jìn)制有效數(shù)位,也就是說(shuō)最大只能精確到16777216,也就是2的24次方。對(duì)于大于16777216的數(shù)字,比如16777217,因?yàn)槠涠M(jìn)制已經(jīng)來(lái)到了25位,因此必須舍棄掉一些精度,也就是使得從25位開(kāi)始的位數(shù)全部變?yōu)?。
在這邊,舍棄精度有一個(gè)規(guī)則:
如果第25位是1,計(jì)算機(jī)會(huì)先看看更高位的情況。如果后面的位數(shù)有東西,那就進(jìn)位(當(dāng)然我們這邊數(shù)值還不會(huì)達(dá)到那么大,因此不需要考慮這種情況)。如果后面沒(méi)東西,還得看看第24位。如果第24位是0,那么就直接將從25位開(kāi)始的數(shù)位全部變?yōu)?,也就是將高于24位的數(shù)位全部置零;如果第24位是1,那么也是進(jìn)位。
比如16777217,其二進(jìn)制是1000000000000000000000001??梢园l(fā)現(xiàn)其第25位為1,后面沒(méi)有更高的位數(shù),24位還是0,因此就會(huì)將25位置零,變成1000000000000000000000000,也就是16777216。
又比如16777219,其二進(jìn)制是1000000000000000000000011??梢园l(fā)現(xiàn)其可以發(fā)現(xiàn)其第25位為1,后面沒(méi)有更高的位數(shù),24位也是1,因此就會(huì)進(jìn)位變?yōu)?000000000000000000000100,也就是16777220。
需要注意,這個(gè)BUG在最新版本已經(jīng)被改掉了,只不過(guò)我們并不知道是哪個(gè)Minecraft版本修復(fù)了這個(gè)BUG。
回到正題?,F(xiàn)在我們已經(jīng)知道了如何改變世界邊界的邊長(zhǎng),但這個(gè)『過(guò)渡時(shí)間』又是什么?
在PUBG也就是吃雞游戲中,毒圈也會(huì)像Minecraft的世界邊界一樣變小,但前者可以慢慢地收縮,那后者呢?
也可以。你只需要指定『過(guò)渡時(shí)間』就可以了。
過(guò)渡時(shí)間參數(shù)的單位為秒,如果指定了它,那么游戲?qū)?huì)在規(guī)定的時(shí)間內(nèi)慢慢地將世界邊界的半徑從原來(lái)的值調(diào)整為新指定的值。比如:
/worldborder add -100 60
這將會(huì)使得世界邊界在1分鐘內(nèi)半徑慢慢減少100格。收縮過(guò)程中,世界邊界將會(huì)變成紅色。如果是放大的話,將會(huì)變?yōu)榫G色。
如果你后悔了想要暫停變化該怎么辦?
你得使用add或set子命令,重新改變一下其邊長(zhǎng),并且不能填寫過(guò)渡時(shí)間參數(shù),然后世界邊界就會(huì)暫停變化,立馬變?yōu)槟阍O(shè)置的邊長(zhǎng)。
這里有一個(gè)有趣的東西,如果你使用的是add子命令,那么增加或減少的邊長(zhǎng)并不是以變化開(kāi)始前的邊長(zhǎng)為基準(zhǔn),而是以你運(yùn)行add時(shí)其變化到的邊長(zhǎng)為基準(zhǔn)。
舉個(gè)例子,假設(shè)此時(shí)世界邊界的邊長(zhǎng)為200米,你用了/worldborder add -60 60使得世界邊界將會(huì)在60秒內(nèi)收縮至140米。如果你過(guò)了13秒突然反悔,用了/worldborder add 60來(lái)放大世界邊界,那么最終世界邊界的邊長(zhǎng)將會(huì)變成247米。
為何呢?因?yàn)樵谀愕却?3秒內(nèi),世界邊界已經(jīng)收縮了13米,到了187米。此時(shí)你再使其增加60米,由于你未填寫過(guò)渡時(shí)間參數(shù),過(guò)渡時(shí)間就會(huì)被重置為立刻,但游戲卻會(huì)以現(xiàn)在的187米為基礎(chǔ)來(lái)計(jì)算增加60米后的半徑,也就是247米。最終,你就會(huì)收到如下信息:
已將世界邊界的寬度設(shè)為247.0
既然未填寫過(guò)渡時(shí)間參數(shù)就會(huì)重置原先的過(guò)渡時(shí)間,那么如果再填呢?也就是運(yùn)行/worldborder add 60 60會(huì)發(fā)生什么?
答案是:原先剩下的47秒過(guò)渡時(shí)間會(huì)和新加的60秒過(guò)渡時(shí)間相加,最終你會(huì)收到如下消息:
正在將世界邊界的寬度擴(kuò)大為247.0個(gè)方塊,時(shí)間107秒
沒(méi)想到就那么簡(jiǎn)簡(jiǎn)單單的set和add兩個(gè)子命令,能夠有這么復(fù)雜的效果啊......
放心,接下來(lái)就簡(jiǎn)單了。
使用/worldborder get可以獲取到當(dāng)前世界邊長(zhǎng)的信息,這就不多講了,因?yàn)闆](méi)啥好講。
center子命令可以設(shè)置世界邊界的中心,比如使用:
/worldborder center 1 1
這將會(huì)設(shè)置世界邊界的中心為(1.5,1.5)。
唉怎么回事,我不是要設(shè)置到(1,1)嗎?怎么設(shè)置到(1.5,1.5)去了?
如果你仔細(xì)觀察一下,就會(huì)發(fā)現(xiàn)不僅僅在worldborder指令中有這個(gè)現(xiàn)象,很多指令中也有這個(gè)現(xiàn)象。
背后的原因其實(shí)令全球變暖:Mojang官方認(rèn)為你填整數(shù)就是要將中心設(shè)置在一個(gè)方塊的位置上,而我們?nèi)祟愔饔^上來(lái)看,方塊的位置就是這個(gè)方塊的中心,因此Mojang就貼心地給你加了個(gè)0.5。
如果你并不想讓Mojang幫你加上0.5,很簡(jiǎn)單,運(yùn)行:/worldborder center 1.0 1.0即可,也就是加上小數(shù)點(diǎn),弄成一個(gè)浮點(diǎn)數(shù)。其他指令如果出現(xiàn)類似情況也可以這么弄。
需要注意,在某些Minecraft Java版本中,center的坐標(biāo)參數(shù)是可選的。但根據(jù)作者的測(cè)試,1.8、1.12.2、1.13.2、1.16以及最新的1.19版本的坐標(biāo)參數(shù)均為必填,所以我們并不清楚哪些版本的center坐標(biāo)參數(shù)是可選的,也許是一些快照版本也說(shuō)不定。
對(duì)于坐標(biāo)參數(shù)是可選的版本,使用/worldborder center可以獲取到世界邊界中心的位置。(所以Mojang,這么好的功能你為什么不加呢?)
我們現(xiàn)在已經(jīng)會(huì)操控世界邊界的大小以及位置,但別忘了,世界邊界還可以對(duì)『出圈』的玩家造成傷害!
我們可以通過(guò)damage子命令來(lái)更改世界邊界的傷害:
/worldborder damage buffer <安全緩沖距離:米>
/worldborder damage amount <傷害量>
安全緩沖距離指的是玩家『出圈』后,不會(huì)受到傷害的『出圈』距離,默認(rèn)是5米,你可以改為一個(gè)大于等于0的數(shù)值。比如:
/worldborder damage buffer 1.5
這將會(huì)指定『安全緩沖距離』為1.5米,玩家如果『出圈』且與世界邊界的距離超過(guò)1.5米,將會(huì)開(kāi)始受到傷害。
damage amount可以指定玩家超出緩沖距離受到傷害的情況,默認(rèn)其值是5.0。但這并不是指玩家超出后每秒受到的傷害是5.0點(diǎn),而是有一個(gè)更加復(fù)雜的計(jì)算。
玩家每秒受到的傷害大小y其實(shí)和玩家遠(yuǎn)離緩沖區(qū)的距離x成正比例關(guān)系,其比值k就是我們damage amount所規(guī)定的『傷害量』參數(shù),更確切的來(lái)說(shuō)是『每方格傷害量』參數(shù):
玩家每秒受到的傷害大小=每方格傷害量×玩家遠(yuǎn)離緩沖區(qū)的距離(每方格傷害量≥0)
y=kx (k≥0)
?。ㄖ徊贿^(guò)如果每方格傷害量被設(shè)定為0的話,也就是不造成傷害,那就構(gòu)不成正比例函數(shù)了)
比如我們?cè)O(shè)定傷害量為0.2點(diǎn)/米/秒,緩沖區(qū)為1.5米。有一名玩家超出了世界邊界15.7米,那么這名玩家每秒受到的傷害量將會(huì)是:
0.2×(15.7-1.5)=2.84點(diǎn)/秒
最后,我們可以設(shè)定一些效果讓這個(gè)世界邊界看起來(lái)更像是『毒圈』。比如,我們可以設(shè)定警告。
warning子命令就是干這個(gè)的:
/worldborder warning time <提前警告時(shí)間>
/worldborder warning distance <警告距離>
『提前警告時(shí)間』的單位為秒,默認(rèn)是15秒。玩家如果將要被世界邊界越過(guò),且距離被越過(guò)剩下的時(shí)間小于等于『提前警告時(shí)間』,玩家就會(huì)被游戲警告,也就是屏幕會(huì)被染紅。
『警告距離』就更好理解了,其默認(rèn)是5米。如果玩家離世界邊界的距離小于等于『警告距離』,玩家也會(huì)被游戲警告。
比如:
/worldborder warning time 20
就可以使玩家在被世界邊界越過(guò)的最后20秒內(nèi)收到警告。
最后,我們會(huì)發(fā)現(xiàn)世界邊界已經(jīng)被我們玩得不成樣子了。
那怎么辦呢?
運(yùn)行/worldborder set 59999968,即可將世界邊界弄回到最初的大小。
運(yùn)行/worldborder center 0.0 0.0,即可將世界邊界的中心點(diǎn)弄會(huì)最初的位置。
歷史
1.8——加入了/worldborder和世界邊界