首页 男生 游戏竞技 Minecraft指令手册

第六十五章 worldborder-MC是一款吃鸡游戏

Minecraft指令手册 你好MC 6340 2024-07-09 15:29

  (本章节已于2022年7月12日重修)

  (本章作者在重修时主要使用的是Minecraft Java1.13.2进行实验)

  我们在第二十八章中讲区块时曾经了解到这么一个东西:

  『听说过Minecraft的边境之地吧,当你到达Minecraft的很远的地方时,那里的区块会出现Bug,也就是加载错误(32位溢出)。在Java版中,这个BUG早就已经在Beta1.8版本移除(但没有完全移除,64位溢出导致的边境之地仍然存在),并添加了世界边界拦着你。当你以任何方式越过世界边界后来到外面,会得到一些负面效果,扣血死亡,就好像绝地求生里一样。其实Java版的Minecraft还真的有点像绝地求生,你还可以使用特定的指令修改边界,来达到绝地求生的效果。是不是很神奇?』

  那用什么指令可以修改世界边界呢?

  这条指令就是:

  /worldborder

  worldborder这个单词虽长,但其实是由world(世界)和border(边境)这两个单词组成。所以,worldborder的意思是:世界边境。

  /worldborder

  作用:管理世界边界

  需要权限等级:Java-2

  需要作弊:是

  版本独有:Java版

  格式:

  /worldborder add <增减量:米>[过渡时间]

  \\将世界边界的边长增加或减少指定的值,可指定变化边长的过渡时间\\

  /worldborder set <边长:米>[过渡时间]

  \\将世界边界的边长设定为指定的值,可指定变化边长的过渡时间\\

  /worldborder center <x坐标><z坐标>

  \\将世界边界的中心设置为指定地点,可使用相对坐标,但无法使用局部坐标\\

  /worldborder damage buffer <安全缓冲距离:米>

  \\设置玩家超出世界边界后,不受到伤害的安全缓冲距离\\

  /worldborder damage amount <伤害量>

  \\设置玩家超出世界边界外的安全缓冲距离后,受到伤害的情况,下面会具体讲解\\

  /worldborder warning time <提前警告时间>

  \\设置世界边界在变化过程中,如果边界经过玩家所在位置所剩的时间小于等于指定的时间,将会给予玩家警告\\

  /worldborder warning distance <警告距离>

  \\当玩家距离世界边界的距离小于此指定值时,将会出现警告\\

  在学习这指令的使用前,我们不妨具体来了解一下世界边界:

  世界边界,是Java1.8版本才出现的一个东西,用于防止玩家进入假区块,导致游戏崩溃或使得存档损坏。对于处于生存和冒险模式的玩家来说,可以在不作弊的情况通过一些bug逃出边境,但是逃出去一定距离后会受到伤害,最终死亡。

  (这就是为什么Minecraft从某方面来说具有开发吃鸡小游戏的潜力)

  世界边界的屏障效果会在256格处消失,但是其作用会一直延续到Y=2的31次方-1的地方,即Y=2147483647的高度(Int整形上限,讲NBT的值类型时会讲到)。

  如果我们把整个Minecraft地图都渲染出来,你就会发现世界边界其实是一个蓝色的正方形,正方形的中心位于世界原点(0.0,0.0),边长为29999984.0米(格)。

  而我们通过worldborder指令,就可以修改这个『蓝色正方形』的边长、中心位置和给玩家的效果。

  首先,如果我们要修改边长,可以有两种方法:使用add或使用set。

  add子命令可以增加或减少世界边界的边长,增加用正数,减少用负数。

  如:

  /worldborder add 11

  就可以将世界边界的边长增加11米

  /worldborder add -10

  就可以将世界边界的边长减少10米

  set子命令可以直接将世界边界的边长设置为一个指定的值,比如:

  /worldborder set 10

  这将会将世界边界的边长设置为10米。

  (注:你最大可以设置世界边界的边长到60000000米)

  虽然说add和set子命令是设置世界边界边长的,但确切来说,是设置蓝色『屏障』的边长。

  ?这两个不是一摸一样吗?

  其实世界边界由两部分组成:蓝色的虚假『屏障』,和隐形的真正屏障。

  蓝色的虚假屏障并不能拦住玩家,真正能够拦住玩家的,是边长大于等于蓝色屏障的隐形屏障。

  隐形屏障构成的隐形正方形,和蓝色屏障构成的蓝色正方形,虽然中心一样,但边长有时并不一样。隐形屏障的边长必须是一个偶数(或奇数,看中心点位置),因为它必须要处在方块的边缘,和方块的网格重叠。而蓝色屏障的边长可以是任意数,也就是说它不一定要处在方块的边缘,它是可以横着穿过边界方块的中点的。

  也就是说,隐形屏障的边长必须大于等于蓝色屏障的边长。如果蓝色屏障的边长也是一个偶数(或奇数,看情况),那么两者的边长就一样,也就是互相重叠;但如果蓝色屏障的边长是一个奇数(或偶数,看情况),甚至是一个小数,那么隐形屏障的边长将会是大于蓝色屏障边长的最小偶数(或奇数,也要看情况)。

  (其实你不知道也可以的,毕竟Minecraft Wiki又没记载这东西,这仅仅是作者实验得出的结果而已)

  对了,还需要注意一点:使用set子命令时,当你设置的边长是一个大于16777216(2的24次方)的奇数时,最终设置成的边长将会强制变为一个偶数。(Java1.13.2作者实验得出)

  为什么呢?可能是因为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的世界边界一样变小,但前者可以慢慢地收缩,那后者呢?

  也可以。你只需要指定『过渡时间』就可以了。

  过渡时间参数的单位为秒,如果指定了它,那么游戏将会在规定的时间内慢慢地将世界边界的半径从原来的值调整为新指定的值。比如:

  /worldborder add -100 60

  这将会使得世界边界在1分钟内半径慢慢减少100格。收缩过程中,世界边界将会变成红色。如果是放大的话,将会变为绿色。

  如果你后悔了想要暂停变化该怎么办?

  你得使用add或set子命令,重新改变一下其边长,并且不能填写过渡时间参数,然后世界边界就会暂停变化,立马变为你设置的边长。

  这里有一个有趣的东西,如果你使用的是add子命令,那么增加或减少的边长并不是以变化开始前的边长为基准,而是以你运行add时其变化到的边长为基准。

  举个例子,假设此时世界边界的边长为200米,你用了/worldborder add -60 60使得世界边界将会在60秒内收缩至140米。如果你过了13秒突然反悔,用了/worldborder add 60来放大世界边界,那么最终世界边界的边长将会变成247米。

  为何呢?因为在你等待的13秒内,世界边界已经收缩了13米,到了187米。此时你再使其增加60米,由于你未填写过渡时间参数,过渡时间就会被重置为立刻,但游戏却会以现在的187米为基础来计算增加60米后的半径,也就是247米。最终,你就会收到如下信息:

  已将世界边界的宽度设为247.0

  既然未填写过渡时间参数就会重置原先的过渡时间,那么如果再填呢?也就是运行/worldborder add 60 60会发生什么?

  答案是:原先剩下的47秒过渡时间会和新加的60秒过渡时间相加,最终你会收到如下消息:

  正在将世界边界的宽度扩大为247.0个方块,时间107秒

  没想到就那么简简单单的set和add两个子命令,能够有这么复杂的效果啊......

  放心,接下来就简单了。

  使用/worldborder get可以获取到当前世界边长的信息,这就不多讲了,因为没啥好讲。

  center子命令可以设置世界边界的中心,比如使用:

  /worldborder center 1 1

  这将会设置世界边界的中心为(1.5,1.5)。

  唉怎么回事,我不是要设置到(1,1)吗?怎么设置到(1.5,1.5)去了?

  如果你仔细观察一下,就会发现不仅仅在worldborder指令中有这个现象,很多指令中也有这个现象。

  背后的原因其实令全球变暖:Mojang官方认为你填整数就是要将中心设置在一个方块的位置上,而我们人类主观上来看,方块的位置就是这个方块的中心,因此Mojang就贴心地给你加了个0.5。

  如果你并不想让Mojang帮你加上0.5,很简单,运行:/worldborder center 1.0 1.0即可,也就是加上小数点,弄成一个浮点数。其他指令如果出现类似情况也可以这么弄。

  需要注意,在某些Minecraft Java版本中,center的坐标参数是可选的。但根据作者的测试,1.8、1.12.2、1.13.2、1.16以及最新的1.19版本的坐标参数均为必填,所以我们并不清楚哪些版本的center坐标参数是可选的,也许是一些快照版本也说不定。

  对于坐标参数是可选的版本,使用/worldborder center可以获取到世界边界中心的位置。(所以Mojang,这么好的功能你为什么不加呢?)

  我们现在已经会操控世界边界的大小以及位置,但别忘了,世界边界还可以对『出圈』的玩家造成伤害!

  我们可以通过damage子命令来更改世界边界的伤害:

  /worldborder damage buffer <安全缓冲距离:米>

  /worldborder damage amount <伤害量>

  安全缓冲距离指的是玩家『出圈』后,不会受到伤害的『出圈』距离,默认是5米,你可以改为一个大于等于0的数值。比如:

  /worldborder damage buffer 1.5

  这将会指定『安全缓冲距离』为1.5米,玩家如果『出圈』且与世界边界的距离超过1.5米,将会开始受到伤害。

  damage amount可以指定玩家超出缓冲距离受到伤害的情况,默认其值是5.0。但这并不是指玩家超出后每秒受到的伤害是5.0点,而是有一个更加复杂的计算。

  玩家每秒受到的伤害大小y其实和玩家远离缓冲区的距离x成正比例关系,其比值k就是我们damage amount所规定的『伤害量』参数,更确切的来说是『每方格伤害量』参数:

  玩家每秒受到的伤害大小=每方格伤害量×玩家远离缓冲区的距离(每方格伤害量≥0)

  y=kx (k≥0)

  (只不过如果每方格伤害量被设定为0的话,也就是不造成伤害,那就构不成正比例函数了)

  比如我们设定伤害量为0.2点/米/秒,缓冲区为1.5米。有一名玩家超出了世界边界15.7米,那么这名玩家每秒受到的伤害量将会是:

  0.2×(15.7-1.5)=2.84点/秒

  最后,我们可以设定一些效果让这个世界边界看起来更像是『毒圈』。比如,我们可以设定警告。

  warning子命令就是干这个的:

  /worldborder warning time <提前警告时间>

  /worldborder warning distance <警告距离>

  『提前警告时间』的单位为秒,默认是15秒。玩家如果将要被世界边界越过,且距离被越过剩下的时间小于等于『提前警告时间』,玩家就会被游戏警告,也就是屏幕会被染红。

  『警告距离』就更好理解了,其默认是5米。如果玩家离世界边界的距离小于等于『警告距离』,玩家也会被游戏警告。

  比如:

  /worldborder warning time 20

  就可以使玩家在被世界边界越过的最后20秒内收到警告。

  最后,我们会发现世界边界已经被我们玩得不成样子了。

  那怎么办呢?

  运行/worldborder set 59999968,即可将世界边界弄回到最初的大小。

  运行/worldborder center 0.0 0.0,即可将世界边界的中心点弄会最初的位置。

  历史

  1.8——加入了/worldborder和世界边界

目录
设置
手机
书架
书页
评论