MC命令教程“真”从零开始 (二) 命令tp与相对,局部坐标与朝向锚(Java)
Dahesor
编辑于 2025年06月13日 10:54
收录于文集
共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的简写,是我的世界中的传送指令。 它可以将一个或多个玩家或实体传送至一个确定的位置,并可以设定旋转。 这将是我以后介绍任何一条命令的方式:先给格式:

代码块
text/html
自动换行
复制代码
/teleport  
复制成功

或

代码块
text/html
自动换行
复制代码
/tp  
复制成功

(teleport指令格式,简化版1)(以后都用tp代替) 好,首先,让我们看向下面这个例子: 假设,我(Dahesor)被困在了一座基岩监&狱里。我呢,想要逃出去,所以拉来

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

代码块
text/html
自动换行
复制代码
/tp Dahesor Pink_Dove
复制成功

该指令会将我传送到Pink_Dove处

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

代码块
text/html
自动换行
复制代码
/tp @a Dahesor
复制成功

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

代码块
text/html
自动换行
复制代码
/tp Dahesor @a
复制成功

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

目的地必须为单个实体

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

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

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

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

你只需要将“”替换为x,y,z就好了:

代码块
text/html
自动换行
复制代码
/tp    
复制成功

(指令格式,简化版2)

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

东为正x,南为正

不难理解——

代码块
text/html
自动换行
复制代码
/tp Dahesor 0 0 0
复制成功

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

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

代码块
text/html
自动换行
复制代码
/tp 0 0 0
复制成功

等价于

代码块
text/html
自动换行
复制代码
/tp @s 0 0 0
复制成功

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

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

XYZ: 17.522 / -59.00000 / 4.679

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

Block: 17 -59 4

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

代码块
text/html
自动换行
复制代码
/tp @a 17 -59 4
复制成功

注意,玩家有两个方格高,而这个坐标是你脚的位置——系统使用你的下半部分计算坐标。这点很重要,一会会用到。 当然,不是所有的位置都是方便你站上去看坐标的。 ——这时,你就可以使用绿色线条上的内容了:

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)。 相对坐标使用“~”作为标识符,他会将坐标原点更改为执行位置。 所以,当你在聊天框中输入:

代码块
text/html
自动换行
复制代码
/tp @s ~ ~ ~
复制成功

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

代码块
text/html
自动换行
复制代码
/tp @s ~ ~2 ~
复制成功

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

代码块
text/html
自动换行
复制代码
/tp @s ~10 ~ ~
复制成功

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

代码块
text/html
自动换行
复制代码
/tp @s ~ ~ ~-5
复制成功

会让你向负z方向,也就是北方传送5格。 相对坐标也可以和正常坐标一起用: 在聊天框中输入:

代码块
text/html
自动换行
复制代码
/tp @s 100 ~10 100
复制成功

会将你传送到xz(100,100)的位置,并向上传送10格。 不知我讲清楚没有 2.5 执行者与执行位置 你可能注意到,上方所有的“在聊天框中”都被粗体了。 我在强调这一点。 为什么?难道说这条指令放进命令方块没有用吗? 比如,使用命令方块执行/tp @p ~ ~2 ~ 难道不会将你传送到自己头上两格么? 是的,没用。 不过在那之前,让我们一条一条来。 前面说过,在聊天框中输入/tp @s 0 0 0会将你传送至世界中心。 但这条命令在命令方块里没有用。 为什么? 还记得么,选择器@s的含义是,选择执行者。 当使用命令方块执行这条指令时,执行者不再是你,而是命令方块! 你在尝试把命令方块传送到世界中心——命令方块是个方块,不会动,你的指令自然就失败了。 你要输入的是/tp @p 0 0 0 这是有用的,因为选择器@p是指最近的玩家——有效 好,有了这点铺垫,让我们往下看: 现在,尝试在聊天框中输入:

代码块
text/html
自动换行
复制代码
/tp @a ~ ~2 ~
复制成功

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

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

执行者是你,执行位置在你这里,~ ~2 ~ 是你头上两格,所以所有玩家都跑这来了。 有了这更多的铺垫,回到我们的问题: 使用命令方块执行/tp @p ~ ~2 ~ 会将你传送到自己头上两格么? 不会。 因为在此情况中,执行者是命令方块,执行位置也在命令方块,你,会被传送到命令方块上方两格! 懂了吧。 执行者是MC命令的核心之一。 你可能会问,“那,该如何使用命令方块将玩家传送到他们头上两格呢?” 这......就要拜托 /execute 了。不过这并非本篇范畴 2.6 局部坐标 在前面的大纲中,你应该看到了局部坐标(local coordinates)这个东西。 这是什么呢? 额......这是一种比相对坐标还要"自由"的东西。 相对坐标使你更改了坐标原点,而局部坐标连你的维度轴延伸的方向都改了。 与相对坐标的“~”相似,局部坐标使用“^”标识,他会将坐标原点更改为执行者处,并将“x,y,z”更改为“视线左侧,视线上方,以及视线前方” 什么意思? 字面意思 /tp @p ^ ^ ^ 与 /tp ~ ~ ~ 是一样的——都让你原地tp,但接下来,就是一些不同的地方了。

代码块
text/html
自动换行
复制代码
/tp @p ~ ~ ~10
复制成功

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

代码块
text/html
自动换行
复制代码
/tp @p ^ ^ ^10
复制成功

还会让你向南方传送10格么? 不, “x,y,z”更改为“视线左侧,视线上方,以及视线前方。” z轴被更改为视线前方 你会向前传送十格。 准确地说:向你准星对准的方向传送十格。 如果你正面向东,你就会向东传送十格。 如果你正面向南,你就会向南传送十格。 如果你正在仰头看星星,你就会往天上蹿十格。 如果你正在看自己的脚,你就会往地里钻十格。 即使你面向一个奇奇怪怪的角度——比如说什么东偏北23度,仰角50度——你也会向这个方向前进十格。 同理,

代码块
text/html
自动换行
复制代码
/tp @p ^10 ^ ^
复制成功

会将你向视线左侧传送

代码块
text/html
自动换行
复制代码
/tp @p ^ ^10 ^
复制成功

会将你向视线上方......也就是后脑勺对着的方向......传送十格。 但.....局部坐标就不能和前两种坐标一起用了——原因? 加油你能想明白的QAQ 我觉得自己解释的够清楚了。 提醒:局部坐标与相对坐标一样,遵守执行者/执行位置的规则 实际上,就像前面说的,只要不是世界指令都会受这些影响。

(在最后小声说一嘴,虽然/tp @p ^ ^ ^ 与 /tp @p ~ ~ ~ 是一样的,然而~ ~ ~和^ ^ ^这两个坐标却并不是等价的——在对execute anchored有了解后你会发现它们有微妙的差别——但是目前还不需要在意) 2.7 旋转 我们已经讲了很多东西了......但还没完呢。 tp指令除了可以传送外,还可以设置旋转(rotations)。 格式:

代码块
text/html
自动换行
复制代码
/tp   [] []
复制成功

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

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

----MC Wiki

则为仰角 90为看天,-90为看地,0为平视 举例:

代码块
text/html
自动换行
复制代码
/tp @s 0 0 0 -45 0
复制成功

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

代码块
text/html
自动换行
复制代码
/tp @s 0 0 0 ~-30 ~20
复制成功

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

代码块
text/html
自动换行
复制代码
/tp   facing   
复制成功

比如:

代码块
text/html
自动换行
复制代码
/tp @a 0 0 0 facing 0 100 0
复制成功

会将所有玩家传送到世界中心,并看向0 100 0的位置——也就是他们头顶。 2.9 看向实体 现在,还是在你做的那个RPG地图里——你现在,想强迫玩家看向一个NPC,怎么办? 你要使用的是“facing entity”。 在“facing entity”后填入目标,可以迫使玩家看向另一个实体:

代码块
text/html
自动换行
复制代码
/tp   facing entity  []
复制成功

比如:

代码块
text/html
自动换行
复制代码
/tp Dahesor 0 0 0 facing entity XiLaiTL
复制成功

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

代码块
text/html
自动换行
复制代码
/tp Dahesor 0 0 0 facing entity XiLaiTL eyes
复制成功

会使我看向XiLaiTL的眼睛

代码块
text/html
自动换行
复制代码
/tp Dahesor 0 0 0 facing entity XiLaiTL feet
复制成功

会使我看向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

自己开游戏试一下。