还有一个例子:
/tp @p ~~~ facing entity @e[limit=1,type=villager,sort=nearest]——Java
/tp @p ~~~ facing @e[c=1,type=villager]——基岩
这条指令将会把最近的玩家传送至指令执行地点,并使其朝向最近的一名村民。
有趣的是,如果你运行/tp @s ~~~ facing entity @s,即让你朝向你自己,你将会发现不管你传送前的姿势多么奇怪,传送后你总会水平地朝向正东方向(JAVA)或正南方向(基岩版)。
相信你在看完上面两个例子已经会用facing了吧?基岩版中facing就这么个用法,但在Java版中还有一个参数:朝向部位
这个参数你可以填写两个东西:eyes或feet
填eyes,代表你要让传送目标完成传送后面朝对方的眼睛,填feet,则代表面朝对方的脚。默认是朝向对方的眼睛,但你也可以改成看脚。
比如:
/tp @s ~~~ facing entity @r feet
这将会让你随机看向某一个玩家的脚。
很简单吧。等等,不对,有些问题。
如果你确实按照上面的指令来,你就会发现你看到的并不是这位玩家的脚,而是和这位玩家的眼睛平视。
为什么?
如果你尝试将feet改成eyes,你就会发现你的视角竟然看向了这位玩家上方。
唉Mojang,你这是不是BUG啊?设置为看脚,却看向眼睛;设置为看眼睛,却看向眼睛的上方。
其实这不是BUG,而是跟这个tp指令有关。
tp指令,说是『将一个实体传送到另一个实体或者是坐标』。其实更加确切地说,是这样的:
将一个实体的脚部传送到另一个实体的脚部或者是一个指定的位置。
也就是说,tp指令在传送实体时,其实是传送这个实体的脚部。
为什么呢?想想,如果tp是传送你的眼睛,那么你传送过去,身体是不是要埋半截在土里啊?如果tp是将你的脚传送到另外一个实体的眼睛,那么你传过去,你的脚是不是要踩在那个实体头上啊?
所以Mojang为了使传送能够符合我们人的直觉,就将默认传送的部位设定为了脚。
因此,当tp的facing计算朝向的时候,也是以传送目标的脚的坐标(也就是你脚的坐标)来计算的。而如果你从你的脚看向对方的脚,是不是就是平视?看向对方的眼睛,是不是就要仰头?
并且,不管是基于眼睛还是基于脚来计算朝向,最终都会体现在玩家以及其他实体的头部(因为对于有人形的实体来说,头部的朝向决定了该实体的水平旋转角度和垂直旋转角度,而不是身体决定),所以就造成了上面奇怪的结果。
懂了吧?
第二个『安全检查』就更加简单了,你只需要选择是否开启即可(true或false)
如果开启安全检查,会发生什么呢?
其实这个安全检查很鸡肋,仅仅会检查传送目的地是否有足够的空间以防止你窒息,如果不会才会传送,但这并不能防止你掉进岩浆或摔死。
这些内容就是现在版本的tp和teleport,简单吧?
那我们下一章再见。
………
………
………
………
虽说全部内容已经完了,但是还是有一些疑问以及一些注意事项。
上面说到过,在新版中,相对坐标和相对旋转角度都统一成以指令执行地点和执行者的旋转角度为基准。但是这句话并不严谨,因为在基岩版中,相对旋转角度还是以传送目标的原先旋转角度为基准来计算的。
有点乱啊,理一理:
JE1.13前,tp的相对坐标和相对旋转角度都以传送目标的为基准,而teleport则反之。
JE1.13之后,tp和teleport均采用指令执行地点和执行者为基准。
基岩版中,tp和teleport的相对坐标均采用以指令执行地点为原点,但相对旋转角度却是以传送目标为基准。
理一理之后确实清楚了许多,但由此就有了一个新的问题:
当相对旋转角度以执行者的为基准时,如果执行者不是个实体而是方块该怎么办,比如命令方块?
其实部分方块也有朝向,但最多也就六个方向,东西南北上下而已。难不成当方块运行tp时,相对旋转角度会采用方块的朝向作为基准朝向?
想得太多了,方块虽然有朝向,但方块又不是实体。当诸如命令方块之类的方块运行指令时,甚至是函数这种连实体都没有的东西运行指令时,指令执行地点和朝向都是默认值,即(0,0,0)和水平朝向正南。
那么本章也就到此正式,真的结束了。
喜欢Minecraft指令手册请大家收藏:(m.2yq.org)Minecraft指令手册爱言情更新速度全网最快。