天才一秒记住【第一中文网】地址:www.dyzww.cc
坐标可能会被除以8。比如你原先的坐标是(16,80,16),传送到下界后估计就会变成(2,80,2)。
为什么呢?如果你有一点mc常识的话,你就会知道,在大多数minecraft版本中,下界中的1米相当于主世界的8米,所以自然而然,你从主世界传送到下界,x和z轴就会除以8(可以通过添加其他子命令来避免这种情况)。
但在Java稍微旧一些的版本中,运行上述指令并不会改变你的坐标,也就是说不会除以8,还是会保留你原先的(16,80,16)。这是作者在1.14.4版本中发现的,但在最新的1.19版本中不会出现这种情况,因此应该是在1.14.4~1.19间的某个版本修复了这个bUG。作者猜测可能是1.16更新,只不过懒得去测试了。
另外还需要注意,在1.18及更高版本中,虽然主世界的Y坐标向下延伸到了-64,但其他维度并未变化,因此如果你从Y坐标小于0的地方直接传到地狱或其他维度,极有可能会掉进虚空!
现在我们来尝试一下结合上面的三个子命令+run子命令,看看当多条子命令结合起来时会有什么效果。
我们来试着将所有实体往上抬1米:
\/execute as @e at @e run tp @s ~~1 ~
运行之后,你会惊喜的发现,所有实体都往上抬了1米,但也都传到了同一个地方,甚至有些实体还被挤死了。
这是怎么回事?
这就是为什么我在前面一直提醒着你说at和as都会在每一个实体和每个位置运行一遍指令。
让我们来逐步分析一下上面的指令出了什么bug,也就是模拟一下游戏运行这条指令的过程。
假设现在整个世界仅仅只有3个实体:一名玩家(最早生成),一位村民和一只羊(最晚生成)。
当这名玩家敲下回车键将指令发送给游戏时,游戏开始对这条指令进行解析并运行:
as子命令让游戏知道,接下来要改变执行者。而目标选择器@e选择了这三个实体,并使得它们按照生成时间的早晚排序,因此游戏根据as @e,先选择了这名玩家作为执行者,然后再选择村民,最后选择羊。
接下来游戏看到了at @e,由于之前已经选择好了执行者,所以游戏根据上文还有这里,得知这名玩家将会依次在玩家的位置、村民的位置和羊的位置分别运行一遍指令,村民和羊同理。
最后游戏看到了run以及后面的指令,它已经完全明白接下来要干什么事情了:
1将玩家传送至玩家上方1米的位置(玩家此时抬高了1米)
2将玩家传送至村民上方1米的位置(玩家此时位于村民上方1米)
3将玩家传送至羊上方1米的位置(玩家此时位于羊上方1米)
4将村民传送至玩家上方1米的位置(村民此时位于玩家原本位置上方1米,玩家此时位于羊上方1米)
5将村民传送至村民上方1米的位置(村民此时位于村民原本位置上方1米,玩家此时位于羊上方1米)
6将村民传送至羊上方1米的位置(村民和玩家此时位于羊上方1米)
7将羊传送至玩家上方1米的位置(村民和玩家此时位于羊原本位置上方1米,羊位于玩家原本位置上方1米)
8将羊传送至村民上方1米的位置(村民和玩家此时位于羊原本位置上方1米,羊位于村民原本位置上方1米)
9将羊传送至羊上方1米的位置(村民、玩家和羊此时都位于羊原本位置上方1米)
最终,三者都跑到了羊原先位置上面1米处,指令运
本章未完,请点击下一章继续阅读!若浏览器显示没有新章节了,请尝试点击右上角↗️或右下角↘️的菜单,退出阅读模式即可,谢谢!