专栏/MC命令教程“真”从零开始 (二) 命令tp与相对,局部坐标与朝向锚(Java)

MC命令教程“真”从零开始 (二) 命令tp与相对,局部坐标与朝向锚(Java)

2024年05月27日 17:10--浏览 · --点赞 · --评论
粉丝:924文章:16

这是原载于MCbbs论坛上的命令教程。随着论坛的消失,这系列教程经修缮(可能需要几天时间)后被迁移至此。

本文某种程度上是一个白话版的Wiki

作者不保证对本教程的维护和更新(全随兴致),请您自行判断内容是否过时。不过,若有更多问题欢迎在评论区提出


教程声明:

  1. 系列教程默认读者是按照顺序阅读的

  2. 教程默认读者有对Minecraft的基础了解

  3. 教程主要注重基础原理,实践内容极少

  4. 本篇教程适用于Java 1.21,但大部分内容也适用于1.13+

好,各位。欢迎来到该系列第二帖。今天我们要来讲的,是/tp 啊不,应该说,是/teleport指令。原本的指令tp在1.13扁平化时更改为了teleport。但tp仍作为teleport的简写适用。(当然,能用tp谁打那老长的teleport)好吧好吧,我知道你应该会这个指令,但如果你不知道相对坐标,局部坐标,还有“朝向锚”这个名字挺唬人但实际上很简单的东西的话——来。看下去吧。


这是今天的大纲:

1. 关于tp的简单用法:将一个或多个实体传送到另一个实体处。
2. 介绍坐标
3. 将一个或多个实体传送到一个坐标处
4. 关于相对坐标
5. 关于指令执行者
6. 关于局部坐标
7. 关于旋转:使用x与y轴进行旋转
8. 关于旋转:使玩家看向一个坐标
9. 关于旋转:使玩家看向一个实体,并解释“朝向锚”
10. 关于跨维度传送


2.1 tp指令

来,让我们开始今天的内容。
/tp指令,为指令/teleport的简写,是我的世界中的传送指令
它可以将一个或多个玩家或实体传送至一个确定的位置,并可以设定旋转
这将是我以后介绍任何一条命令的方式:先给格式:

(teleport指令格式,简化版1)(以后都用tp代替)

好,首先,让我们看向下面这个例子:
假设,我(Dahesor)被困在了一座基岩监&狱里。我呢,想要逃出去,所以拉来

Pink_Dove
那么,我该如何传送到他身边呢?
只需要将目标替换为我,将目的地替换为他就好了:

该指令会将我传送到Pink_Dove处

当然,我们一样可以在这里使用选择器——

这条指令会将所有玩家都传送至Dahesor处。
但是这条指令可不能反过来写:

因为@a为所有玩家——Dahesor不会分身,不可能将他传送至“所有玩家”
也就是说:

目的地必须为单个实体


不过这时,我们有了一个新的问题:
我在我的自我介绍里说过,我这个人很喜欢玩RPG与CTM地图......也经常被困在一些奇怪的地方,我不能总找人家帮忙吧。
我的意思是,如何传送至一个没有其他玩家的地方?
这个问题实际在问:如何使用另一种方式来指定一个“目的地”
嘛,这里我们就要用到一点数学了。

2.2 坐标

我默认你了解直角坐标系......毕竟这里是讲指令的,不是讲数学的。百度上应该有类似话题的简述。

答案很简单,使用坐标(coordinates)。

三维坐标,从世界原点出发,可以使用三个数字表示任何一个位置。

你只需要将“<目的地>”替换为x,y,z就好了:

(指令格式,简化版2)

东西为x轴,高度为y轴,南北是z轴

东为正x,南为正

不难理解——

会将Dahesor,也就是我传送到世界的中心点。

当你在聊天框中输入指令时,你可以省略<目标>,这时目标会默认为你自己:

等价于


2.3 查看坐标

那么,现在的问题就是,如何得知一个位置的坐标?
答案是,使用调试界面。
现在,有游戏中,按下F3,你会看到下方的一大堆密密麻麻的数据:
(有FnLock的请按fn+F3)

嗯,无视那些跳动的复杂数据,只看我红色方框里的那一行:

XYZ: 17.522 / -59.00000 / 4.679

这就是你的现在的坐标了。
这个数值可以精确到小数点后5位。一般来说用不到这么精确,所以请看向那个橙色线。里面有取整后的数值:

Block: 17 -59 4

把这个坐标填进tp里,你就可以传送到我目前的位置。

注意,玩家有两个方格高,而这个坐标是你脚的位置——系统使用你的下半部分计算坐标。这点很重要,一会会用到。

当然,不是所有的位置都是方便你站上去看坐标的。
——这时,你就可以使用绿色线条上的内容了:

Targeted Block: 17 -60 2

这是你目前看向的方块的坐标(如果你有在看的话),也就是那一块钻石块
而液体的坐标则是下面蓝色线上的内容:

Targeted Fluid: 17 -60 3

这,是画面中那一格水的坐标。


除此之外,你还可以按下F3 + C

这会把你当前的坐标,所在维度,和朝向以execute in ... run tp ... 的形式复制下来(以后再说)。


以上就是你在Java版中查看坐标的方法。


2.4 相对坐标

让我们看向一个问题。
如何将玩家传送至他的头上两格处?无论他在哪里?
假设,我现在位于世界的中心点(0,0,0),这个问题很好解决——/tp Dahesor 0 2 0 嘛。
但如果你把我放出去乱跑呢?如果你不知道我的坐标呢?
怎么办?
你需要用到的,叫做相对坐标(Relative Coordinates)

相对坐标使用“”作为标识符,他会将坐标原点更改为执行位置
所以,当你在聊天框中输入:

这会让你原地tp
而在聊天框中输入:

即可让你向上传送两格
聊天框中输入:

会让你向正x方向,也就是东方传送10格
聊天框中输入:

会让你向负z方向,也就是北方传送5格。

相对坐标也可以和正常坐标一起用:
聊天框中输入:

会将你传送到xz(100,100)的位置,并向上传送10格。
不知我讲清楚没有


2.5 执行者与执行位置

你可能注意到,上方所有的“在聊天框中”都被粗体了。
我在强调这一点。
为什么?难道说这条指令放进命令方块没有用吗?
比如,使用命令方块执行/tp @p ~ ~2 ~ 难道不会将你传送到己头上两格么?
是的,没用。
不过在那之前,让我们一条一条来。

前面说过,在聊天框中输入/tp @s 0 0 0会将你传送至世界中心。
但这条命令在命令方块里没有用。
为什么?
还记得么,选择器@s的含义是,选择执行者
使用命令方块执行这条指令时,执行者不再是你,而是命令方块!
你在尝试把命令方块传送到世界中心——命令方块是个方块,不会动,你的指令自然就失败了。
你要输入的是/tp @p 0 0 0
这是有用的,因为选择器@p是指最近玩家——有效

好,有了这点铺垫,让我们往下看:
现在,尝试在聊天框中输入:

你认为,我懂,相对坐标嘛,你刚讲过。
所以这条指令是将所有玩家(@a)传送至各自头上两格喽!
错。
所有玩家都会被传送到你的头上而非它们各自的头上——因为执行位置你这里,而我们刚说过:“相对坐标会将坐标原点更改为执行位置。”

MC的所有命令都会区分是谁,在哪里执行的。也就是执行者执行位置

执行者是,执行位置在你这里,~ ~2 ~ 是你头上两格,所以所有玩家都跑这来了。

有了这更多的铺垫,回到我们的问题:
使用命令方块执行/tp @p ~ ~2 ~ 会将你传送到自己头上两格么?
不会。
因为在此情况中,执行者命令方块执行位置也在命令方块,你,会被传送到命令方块上方两格

懂了吧。
执行者是MC命令的核心之一。

你可能会问,“那,该如何使用命令方块将玩家传送到他们头上两格呢?”
这......就要拜托 /execute 了。不过这并非本篇范畴


2.6 局部坐标

在前面的大纲中,你应该看到了局部坐标(local coordinates)这个东西。
这是什么呢?
额......这是一种比相对坐标还要"自由"的东西。
相对坐标使你更改了坐标原点,而局部坐标连你的维度轴延伸的方向都改了。
与相对坐标的“”相似,局部坐标使用“^”标识,他会将坐标原点更改为执行者处,并将“x,y,z”更改为“视线左侧,视线上方,以及视线前方”
什么意思?
字面意思
/tp @p ^ ^ ^ 与 /tp ~ ~ ~ 是一样的——都让你原地tp,但接下来,就是一些不同的地方了。

在聊天框中输入这条指令会让你向正z轴,也就是南方传送10格。
但这条指令:

还会让你向南方传送10格么?
不,
“x,y,z”更改为“视线左侧,视线上方,以及视线前方。”
z轴被更改为视线前方

你会向前传送十格。
准确地说:向你准星对准的方向传送十格。
如果你正面向东,你就会向东传送十格。
如果你正面向南,你就会向南传送十格。
如果你正在仰头看星星,你就会往天上蹿十格。
如果你正在看自己的脚,你就会往地里钻十格。
即使你面向一个奇奇怪怪的角度——比如说什么东偏北23度,仰角50度——你也会向这个方向前进十格。

同理,

会将你向视线左侧传送

会将你向视线上方......也就是后脑勺对着的方向......传送十格。
但.....局部坐标就不能和前两种坐标一起用了——原因?
加油你能想明白的QAQ
我觉得自己解释的够清楚了。

提醒:局部坐标与相对坐标一样,遵守执行者/执行位置的规则
实际上,就像前面说的,只要不是世界指令都会受这些影响。


(在最后小声说一嘴,虽然/tp @p ^ ^ ^ 与 /tp @p ~ ~ ~ 是一样的,然而~ ~ ~和^ ^ ^这两个坐标却并不是等价的——在对execute anchored有了解后你会发现它们有微妙的差别——但是目前还不需要在意)

2.7 旋转

我们已经讲了很多东西了......但还没完呢。
tp指令除了可以传送外,还可以设置旋转(rotations)
格式:

“[]”代表不必须的元素。如果你不填旋转,会维持原有方向。
<水平旋转>即为你面向的方向,填0时面向正南,负值是向左转,正值时向右转。

正北方为-180.0,正东为-90.0,正南为0.0,正西为90.0,正北以西为179.9,之后回到-180.0

----MC Wiki

<竖直旋转>则为仰角
90为看天,-90为看地,0为平视
举例:

会将玩家传送到世界中心,面向东南,无仰角。
这样。
但上面这点其实不是设置“旋转”,而是设置“朝向
想要旋转,你需要使用相对朝向(Raletive Rotations)

和相对坐标一样,使用“~”作为标识:

会将玩家传送至世界中心,且向左旋转30度,向上旋转20度。
这样。

2.8 面向坐标

现在,让我们看向下面这个问题:
如何在不清楚玩家坐标时让玩家面向一个确定的地点?
比如说,你做了一个RPG,在剧情中,要求所有玩家看向BOSS炸开山出现的位置。
但你的竞技场很大,没有确定的方向——玩家有可能在任何一个位置。
这时,你要用的就是“facing”了。
在facing后打上另一个坐标,会迫使玩家看向这个位置:


比如:


会将所有玩家传送到世界中心,并看向0 100 0的位置——也就是他们头顶。


2.9 看向实体


现在,还是在你做的那个RPG地图里——你现在,想强迫玩家看向一个NPC,怎么办?
你要使用的是“facing entity”。
在“facing entity”后填入目标,可以迫使玩家看向另一个实体:

比如:

会将我传送至世界中心,并看向XiLaiTL。
嗯,你可能发现,上面的格式中有一个奇怪的东西——朝向锚(FacingAnchor)
这是什么意思呢?
很简单,意思就是,你是要看向目标的眼睛,还是脚?
或者说:你是要看向目标的眼睛,还是坐标?
你可以在朝向锚处填写“eyes”或"feet":

会使我看向XiLaiTL的眼睛

会使我看向XiLaiTL的脚——但其实不是。
当你输入脚时,你反而会看向他的眼睛,而你输入眼睛时......你会看他的头顶。
你的视线总会比预期的高一点。
为什么?
因为,这个朝向是由你的脚计算的,因为那里是你的坐标!还记得之前说的么?
玩家有两个方格高,你的坐标是你脚的位置——系统使用你的下半部分计算坐标。
填写feet会导致Dahesor的脚看向XiLaiTL的脚,所以Dahesor的眼睛正好看着XiLaiTL的眼睛

然而填eyes会导致Dahesor的脚看向XiLaiTL的眼睛!所以Dahesor的眼睛就看向XiLaiTL的头顶了


注意!你只能朝向单个实体!所以像@a@e是不能用的。
也不是没有办法。这点会在第五篇“tag与进阶选择器”里说——等你看到再说吧。

2.10 跨维度传送

最后的最后——跨维度传送
我知道你一定很期待这里——但抱歉,虽然/tp支持跨纬度,但想要跨维度传送,单独用tp是不够的。你需要使用execute。精确点,execute in

但.....execute in这部分并不是很难,所以,我要锻炼一下各位查资料的能力——去吧,自己找找怎么用——MC Wiki上有:

https://zh.minecraft.wiki/w/%E5%91%BD%E4%BB%A4/execute#in

自己开游戏试一下。


投诉或建议