UU看書

第六十五章 worldborder-MC是一款吃雞遊戲

天才一秒記住【UU看書】地址:www.uukanshu.co

(本章節已於2022年7月12日重修)

(本章作者在重修時主要使用的是MinecraftJava1132進行實驗)

我們在第二十八章中講區塊時曾經瞭解到這麼一個東西:

『聽說過Minecraft的邊境之地吧,當你到達Minecraft的很遠的地方時,那裡的區塊會出現Bug,也就是載入錯誤(32位溢位)。在Java版中,這個BUG早就已經在Beta18版本移除(但沒有完全移除,64位溢位導致的邊境之地仍然存在),並新增了世界邊界攔著你。當你以任何方式越過世界邊界後來到外面,會得到一些負面效果,扣血死亡,就好像絕地求生裡一樣。其實Java版的Minecraft還真的有點像絕地求生,你還可以使用特定的指令修改邊界,來達到絕地求生的效果。是不是很神奇?』

那用什麼指令可以修改世界邊界呢

這條指令就是:

worldborder

worldborder這個單詞雖長,但其實是由world(世界)和border(邊境)這兩個單片語成。所以,worldborder的意思是:世界邊境。

worldborder

作用:管理世界邊界

需要許可權等級:Java2

需要作弊:是

版本獨有:Java版

格式:

worldborderaddlt增減量:米gt過渡時間

將世界邊界的邊長增加或減少指定的值,可指定變化邊長的過渡時間

worldbordersetlt邊長:米gt過渡時間

將世界邊界的邊長設定為指定的值,可指定變化邊長的過渡時間

worldbordercenterltx座標gtltz座標gt

將世界邊界的中心設定為指定地點,可使用相對座標,但無法使用區域性座標

worldborderdamagebufferlt安全緩衝距離:米gt

設定玩家超出世界邊界後,不受到傷害的安全緩衝距離

worldborderdamageamountlt傷害量gt

設定玩家超出世界邊界外的安全緩衝距離後,受到傷害的情況,下面會具體講解

worldborderwarningtimelt提前警告時間gt

設定世界邊界在變化過程中,如果邊界經過玩家所在位置所剩的時間小於等於指定的時間,將會給予玩家警告

worldborderwarningdistancelt警告距離gt

當玩家距離世界邊界的距離小於此指定值時,將會出現警告

在學習這指令的使用前,我們不妨具體來了解一下世界邊界:

世界邊界,是Java18版本才出現的一個東西,用於防止玩家進入假區塊,導致遊戲崩潰或使得存檔損壞。對於處於生存和冒險模式的玩家來說,可以在不作弊的情況透過一些bug逃出邊境,但是逃出去一定距離後會受到傷害,最終死亡。

(這就是為什麼Minecraft從某方面來說具有開發吃雞小遊戲的潛力)

世界邊界的屏障效果會在256格處消失,但是其作用會一直延續到Y2的31次方1的地方,即Y2147483647的高度(Int整形上限,講NBT的值型別時會講到)。

如果我們把整個Minecraft地圖都渲染出來,你就會發現世界邊界其實是一個藍色的正方形,正方形的中心位於世界原點(00,00),邊長為299999840米(格)。

而我們透過worldborder指令,就可以修改這個『藍色正方形』的邊長、中心位置和給玩家的效果。

首先,如果我們要修改邊長,可以有兩種方法:使用add或使用set。

add子命令可以增加或減少世界邊界的邊長,增加用正數,減少用負數。

如:

worldborderadd11

就可以將世界邊界的邊長增加11米

worldborderadd10

就可以將世界邊界的邊長減少10米

set子命令可以直接將世界邊界的邊長設定為一個指定的值,比如:

worldborderset10

這將會將世界邊界的邊長設定為10米。

(注:你最大可以設定世界邊界的邊長到60000000米)

雖然說add和set子命令是設定世界邊界邊長的,但確切來說,是設定藍色『屏障』的邊長。

?這兩個不是一摸一樣嗎?

其實世界邊界由兩部分組成:藍色的虛假『屏障』,和隱形的真正屏障。

藍色的虛假屏障並不能攔住玩家,真正能夠攔住玩家的,是邊長大於等於藍色屏障的隱形屏障。

隱形屏障構成的隱形正方形,和藍色屏障構成的藍色正方形,雖然中心一樣,但邊長有時並不一樣。隱形屏障的邊長必須是一個偶數(或奇數,看中心點位置),因為它必須要處在方塊的邊緣,和方塊的網格重疊。而藍色屏障的邊長可以是任意數,也就是說它不一定要處在方塊的邊緣,它是可以橫著穿過邊界方塊的中點的。

也就是說,隱形屏障的邊長必須大於等於藍色屏障的邊長。如果藍色屏障的邊長也是一個偶數(或奇數,看情況),那麼兩者的邊長就一樣,也就是互相重疊;但如果藍色屏障的邊長是一個奇數(或偶數,看情況),甚至是一個小數,那麼隱形屏障的邊長將會是大於藍色屏障邊長的最小偶數(或奇數,也要看情況)。

(其實你不知道也可以的,畢竟MinecraftWiki又沒記載這東西,這僅僅是作者實驗得出的結果而已)

對了,還需要注意一點:使用set子命令時,當你設定的邊長是一個大於16777216(2的24次方)的奇數時,最終設定成的邊長將會強制變為一個偶數。(Java1132作者實驗得出)

為什麼呢?可能是因為set子命令的『邊長』引數其資料型別是單精度浮點數(下面的原因比較超綱,如果你有興趣可以看一看),單精度浮點數只有24位的二進位制有效數位,也就是說最大隻能精確到16777216,也就是2的24次方。對於大於16777216的數字,比如16777217,因為其二進位制已經來到了25位,因此必須捨棄掉一些精度,也就是使得從25位開始的位數全部變為0。

在這邊,捨棄精度有一個規則:

如果第25位是1,計算機會先看看更高位的情況。如果後面的位數有東西,那就進位(當然我們這邊數值還不會達到那麼大,因此不需要考慮這種情況)。如果後面沒東西,還得看看第24位。如果第24位是0,那麼就直接將從25位開始的數位全部變為0,也就是將高於24位的數位全部置零;如果第24位是1,那麼也是進位。

比如16777217,其二進位制是1000000000000000000000001。可以發現其第25位為1,後面沒有更高的位數,24位還是0,因此就會將25位置零,變成1000000000000000000000000,也就是16777216。

又比如16777219,其二進位制是1000000000000000000000011。可以發現其可以發現其第25位為1,後面沒有更高的位數,24位也是1,因此就會進位變為1000000000000000000000100,也就是16777220。

需要注意,這個BUG在最新版本已經被改掉了,只不過我們並不知道是哪個Minecraft版本修復了這個BUG。

回到正題。現在我們已經知道了如何改變世界邊界的邊長,但這個『過渡時間』又是什麼?

在PUBG也就是吃雞遊戲中,毒圈也會像Minecraft的世界邊界一樣變小,但前者可以慢慢地收縮,那後者呢?

也可以。你只需要指定『過渡時間』就可以了。

過渡時間引數的單位為秒,如果指定了它,那麼遊戲將會在規定的時間內慢慢地將世界邊界的半徑從原來的值調整為新指定的值。比如:

worldborderadd10060

這將會使得世界邊界在1分鐘內半徑慢慢減少100格。收縮過程中,世界邊界將會變成紅色。如果是放大的話,將會變為綠色。

如果你後悔了想要暫停變化該怎麼辦?

你得使用add或set子命令,重新改變一下其邊長,並且不能填寫過渡時間引數,然後世界邊界就會暫停變化,立馬變為你設定的邊長。

這裡有一個有趣的東西,如果你使用的是add子命令,那麼增加或減少的邊長並不是以變化開始前的邊長為基準,而是以你執行add時其變化到的邊長為基準。

舉個例子,假設此時世界邊界的邊長為200米,你用了worldborderadd6060使得世界邊界將會在60秒內收縮至140米。如果你過了13秒突然反悔,用了worldborderadd60來放大世界邊界,那麼最終世界邊界的邊長將會變成247米。

為何呢?因為在你等待的13秒內,世界邊界已經收縮了13米,到了187米。此時你再使其增加60米,由於你未填寫過渡時間引數,過渡時間就會被重置為立刻,但遊戲卻會以現在的187米為基礎來計算增加60米後的半徑,也就是247米。最終,你就會收到如下資訊:

已將世界邊界的寬度設為2470

既然未填寫過渡時間引數就會重置原先的過渡時間,那麼如果再填呢?也就是執行worldborderadd6060會發生什麼?

答案是:原先剩下的47秒過渡時間會和新加的60秒過渡時間相加,最終你會收到如下訊息:

正在將世界邊界的寬度擴大為2470個方塊,時間107秒

沒想到就那麼簡簡單單的set和add兩個子命令,能夠有這麼複雜的效果啊

放心,接下來就簡單了。

使用worldborderget可以獲取到當前世界邊長的資訊,這就不多講了,因為沒啥好講。

center子命令可以設定世界邊界的中心,比如使用:

worldbordercenter11

這將會設定世界邊界的中心為15,15。

唉怎麼回事,我不是要設定到1,1嗎?怎麼設定到(15,15)去了?

如果你仔細觀察一下,就會發現不僅僅在worldborder指令中有這個現象,很多指令中也有這個現象。

背後的原因其實令全球變暖:Mojang官方認為你填整數就是要將中心設定在一個方塊的位置上,而我們人類主觀上來看,方塊的位置就是這個方塊的中心,因此Mojang就貼心地給你加了個05。

如果你並不想讓Mojang幫你加上05,很簡單,執行:worldbordercenter1010即可,也就是加上小數點,弄成一個浮點數。其他指令如果出現類似情況也可以這麼弄。

需要注意,在某些MinecraftJava版本中,center的座標引數是可選的。但根據作者的測試,18、1122、1132、116以及最新的119版本的座標引數均為必填,所以我們並不清楚哪些版本的center座標引數是可選的,也許是一些快照版本也說不定。

對於座標引數是可選的版本,使用worldbordercenter可以獲取到世界邊界中心的位置。(所以Mojang,這麼好的功能你為什麼不加呢?)

我們現在已經會操控世界邊界的大小以及位置,但別忘了,世界邊界還可以對『出圈』的玩家造成傷害!

我們可以透過damage子命令來更改世界邊界的傷害:

worldborderdamagebufferlt安全緩衝距離:米gt

worldborderdamageamountlt傷害量gt

安全緩衝距離指的是玩家『出圈』後,不會受到傷害的『出圈』距離,預設是5米,你可以改為一個大於等於0的數值。比如:

worldborderdamagebuffer15

這將會指定『安全緩衝距離』為15米,玩家如果『出圈』且與世界邊界的距離超過15米,將會開始受到傷害。

damageamount可以指定玩家超出緩衝距離受到傷害的情況,預設其值是50。但這並不是指玩家超出後每秒受到的傷害是50點,而是有一個更加複雜的計算。

玩家每秒受到的傷害大小y其實和玩家遠離緩衝區的距離x成正比例關係,其比值k就是我們damageamount所規定的『傷害量』引數,更確切的來說是『每方格傷害量』引數:

玩家每秒受到的傷害大小每方格傷害量×玩家遠離緩衝區的距離每方格傷害量≥0)

ykxk≥0

(只不過如果每方格傷害量被設定為0的話,也就是不造成傷害,那就構不成正比例函式了)

比如我們設定傷害量為02點米秒,緩衝區為15米。有一名玩家超出了世界邊界157米,那麼這名玩家每秒受到的傷害量將會是:

02×(15715284點秒

最後,我們可以設定一些效果讓這個世界邊界看起來更像是『毒圈』。比如,我們可以設定警告。

warning子命令就是幹這個的:

worldborderwarningtimelt提前警告時間gt

worldborderwarningdistancelt警告距離gt

『提前警告時間』的單位為秒,預設是15秒。玩家如果將要被世界邊界越過,且距離被越過剩下的時間小於等於『提前警告時間』,玩家就會被遊戲警告,也就是螢幕會被染紅。

『警告距離』就更好理解了,其預設是5米。如果玩家離世界邊界的距離小於等於『警告距離』,玩家也會被遊戲警告。

比如:

worldborderwarningtime20

就可以使玩家在被世界邊界越過的最後20秒內收到警告。

最後,我們會發現世界邊界已經被我們玩得不成樣子了。

那怎麼辦呢?

執行worldborderset59999968,即可將世界邊界弄回到最初的大小。

執行worldbordercenter0000,即可將世界邊界的中心點弄會最初的位置。

歷史

18——加入了worldborder和世界邊界

如遇章節錯誤,請點選報錯(無需登陸)

新書推薦

爐石傳說:我的中二決鬥之旅 足球:王牌教練,從執教尤文開始 NBA:求求你們,讓我輸一把 絕地求生之最強指揮 長城守望:我攜武廟鎮守龍夏 網遊時代:每天上線一件特殊道具 我玩的可能是一個假遊戲