Dahesor
本帖最后由 Dahesor 于 2023-1-1 11:57 编辑

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

声明:
1. 默认所有读者看过本系列的第一帖。作者不对可能出现的方言或术语负责。
2. 本系列全部教程适用于当前Java最新版(1.19.3),但本帖包含的内容在1.13~1.19的版本中全部适用。
3. 本教程默认读者有关于Minecraft的基础知识。

    <<<<<< 返回系列目录 ←←

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

这是今天的大纲:

2.1 tp指令

来,让我们开始今天的内容。
/tp指令,为指令/teleport的简写,是我的世界中的传送指令
它可以将一个或多个玩家或实体传送至一个确定的位置,并可以设定旋转
这将是我以后介绍任何一条命令的方式:先给格式:
  1. /teleport <目标> <目的地>
复制代码
  1. /tp <目标> <目的地>
复制代码
(teleport指令格式,简化版1)(以后都用tp代替)


好,首先,让我们看向下面这个例子:
假设,我(Dahesor)被困在了一座基岩监&狱里。我呢,想要逃出去,所以拉来了MysticNebula70
(又是这位老哥(MCWiki巡查员之一)2022:现在是管理)。
那么,我该如何传送到他身边呢?
只需要将目标替换为我,将目的地替换为他就好了:
  1. /tp Dahesor MysticNebula70
复制代码
该指令会将我传送到MysticNebula70处当然,我们一样可以在这里使用选择器——
  1. /tp @a Dahesor
复制代码
这条指令会将所有玩家都传送至Dahesor处。
但是这条指令可不能反过来写:
/tp Dahesor @a
因为@a为所有玩家——Dahesor不会分身,不可能将他传送至“所有玩家”
也就是说:
目的地必须为单个实体

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

2.2 坐标
我默认你学过直角坐标系......毕竟这里是讲指令的,不是讲数学的。

你不懂的话请百度

答案很简单,使用坐标(coordinates)
三维坐标,从世界原点出发,可以使用三个数字表示任何一个位置。
你只需要将“<目的地>”替换为x,y,z就好了:
  1. /tp <目标> <x> <y> <z>
复制代码

(指令格式,简化版2)
东西为x轴,高度为y轴,南北是z轴

东为正x,南为正

不难理解——
  1. /tp Dahesor 0 0 0
复制代码
会将Dahesor,也就是我传送到世界的中心点。
(然而实际上不是!因为一些原因自动align,你不能输入0作为x与z的坐标值......上述的命令会被自动替换为/tp Dahesor 0.5 0 0.5)

当你在聊天框中输入指令时,你可以省略<目标>,这时目标会默认为你自己:
  1. /tp 0 0 0
复制代码
等价于/tp @s 0 0 0


2.3 查看坐标

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



嗯,无视那些跳动的复杂数据,只看我红色方框里的那一行:
  1. XYZ: -287.453 / 5.00000 / -391.455
复制代码
这就是你的现在的坐标了。
这个数值可以精确到小数点后5位。一般来说用不到这么精确,所以请看向那个橙色的方框。里面有取整后的数值:
  1. Block: -288 5 -392
复制代码
把这个坐标填进tp里,你就可以传送到我目前的位置。
  1. /tp @a -288 5 -392
复制代码

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

当然,不是所有的位置都是方便你站上去看坐标的。
——这时,你就可以使用绿色方框里的内容了:
  1. Targeted Block: -288 4 -394
复制代码
这是你目前看向的方块的坐标(如果你有在看的话),也就是那一块钻石块
而液体的坐标则是下面绿色方格里的内容:
  1. Targeted Fluid: -288 4 -393
复制代码
这,是画面中那一格水的坐标。

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


2.4 相对坐标

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

相对坐标使用“”作为标识符,他会将坐标原点更改为执行者所在的位置
所以,当你在聊天框中输入:
  1. /tp @s ~ ~ ~
复制代码
这会让你原地tp
而在聊天框中输入:
  1. /tp @s ~ ~2 ~
复制代码
即可让你向上传送两格
聊天框中输入:
  1. /tp @s ~10 ~ ~
复制代码
会让你向正x方向,也就是东方传送10格
聊天框中输入:
  1. /tp @s ~ ~ ~-5
复制代码
会让你向负z方向,也就是北方传送5格。

相对坐标也可以和正常坐标一起用:
聊天框中输入:
  1. /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是指最近的玩家——有效

好,有了这点铺垫,让我们往下看:
现在,尝试在聊天框中输入:
/tp @a ~ ~2 ~
你认为,我懂,相对坐标嘛,你刚讲过。
所以这条指令是将所有玩家(@a)传送至各自头上两格喽!
错。
所有玩家都会被传送到你的头上而非它们各自的头上——因为执行者,而我们刚说过:“相对坐标会将坐标原点更改为执行者所在的位置。”
执行这是,~ ~2 ~ 是你头上两格,所以所有玩家都跑这来了。

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

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

你可能会问,“那,该如何使用命令方块将玩家传送到他们头上两格呢?”
这......就要拜托“指令师的噩梦” /execute 了。指令execute预计讲到要十几帖开外了——在那之前,你会多次看到这句话。(江'湖上到处都有爷的传'说~)现在不讲,额,如果你想知道,可以自行查找。

2.6 局部坐标


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

在聊天框中输入这条指令会让你向正z轴,也就是南方传送10格。
但这条指令:
  1. /tp @p ^ ^ ^10
复制代码
还会让你向南方传送10格么?
不,
“x,y,z”更改为“视线左侧,视线上方,以及视线前方。”
z轴被更改为视线前方

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

同理,
  1. /tp @p ^10 ^ ^
复制代码
会将你向视线左侧传送
  1. /tp @p ^ ^10 ^
复制代码
会将你向视线上方......也就是后脑勺对着的方向......传送十格。
但.....局部坐标就不能和前两种坐标一起用了——原因?
加油你能想明白的QAQ
我觉得自己解释的够清楚了。

提醒:局部坐标与相对坐标一样,遵守执行者的规则。
实际上,只要不是世界指令都会受执行者影响。

2.7 旋转


我们已经讲了很多东西了......但还没完呢。
tp指令除了可以传送外,还可以设置旋转(rotations)
格式:
  1. /tp <目标> <目的地> [<水平旋转>] [<竖直旋转>]
复制代码

“[]”代表不必须的元素。如果你不填旋转,会维持原有方向。

<水平旋转>即为你面向的方向,填0时面向正南,负值是向左转,正值时向右转。
正北方为-180.0,正东为-90.0,正南为0.0,正西为90.0,正北以西为179.9,之后回到-180.0

----出自MCWiki
<竖直旋转>则为仰角
90为看天,-90为看地,0为平视
举例:
  1. /tp @s 0 0 0 -45 0
复制代码

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

和相对坐标一样,使用“~”作为标识:
  1. /tp @s 0 0 0 ~-30 ~20
复制代码
会将玩家传送至世界中心,且向左旋转30度,向上旋转20度。
这样。

2.8 面向坐标

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

比如:
  1. /tp @a 0 0 0 facing 0 100 0
复制代码

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

简单吧


2.9 看向实体


现在,还是在你做的那个RPG地图里——你现在,想强迫玩家看向一个NPC,怎么办?
你要使用的是“facing entity”。
在“facing entity”后填入目标,可以迫使玩家看向另一个实体:
  1. /tp <目标> <目的地> facing entity <看向的目标> [朝向锚]
复制代码

比如:
  1. /tp Dahesor 0 0 0 facing entity MysticNebula70
复制代码

会将我传送至世界中心,并看向MysticNebula70。
嗯,你可能发现,上面的格式中有一个奇怪的东西——朝向锚(FacingAnchor)
这是什么意思呢?
很简单,意思就是,你是要看向目标的眼睛,还是脚?
专业点:你是要看向目标的眼睛,还是坐标?
你可以在朝向锚处填写“eyes”或"feet":
  1. /tp Dahesor 0 0 0 facing entity MysticNebula70 eyes
复制代码
会使我看向MysticNebula70的眼睛

  1. /tp Dahesor 0 0 0 facing entity MysticNebula70 feet
复制代码
会使我看向MysticNebula70的脚——但其实不是。
当你输入脚时,你反而会看向他的眼睛,而你输入眼睛时......你会看他的头顶。
你的视线总会比预期的高一点。
为什么?
因为,这个朝向是由你的脚计算的,因为那里是你的坐标!还记得之前说的么?
玩家有两个方格高,你的坐标是你脚的位置——系统使用你的下半部分计算坐标。
我放张图,你就理解了:


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

2.10 跨维度传送


最后的最后——跨维度传送
我知道你一定很期待这里——但抱歉,想要跨维度传送,单独用tp是不够的。你需要使用execute。精确点,execute in
嗯,我说过了——
指令execute预计讲到要十几帖开外了——在那之前,你会多次看到这句话。

但.....execute in这部分并不是很难,所以,我要锻炼一下各位查资料的能力——去吧,自己找找怎么用——Mcbbs上有,MCWiki上虽然说的不明不白,但对execute in的解释还是很清楚的,甚至自己开游戏试一下都可以。
还拜托各位知道的不要透露......感谢!(调皮)

以上就是今天的全部内容了。
——我以为相较第一帖能轻松一些的说.....
但还是在两天内完成了。
额......这两天要去收拾一些烂摊子(纯粹的运气不好,你可以想象一下我说这句话的有气无力......但各位连我是女是男都不知道,也无从想象就是啦)
所以下一帖要三天后了。
但下一帖的内容比较简单,所以中和一下也不会晚太久。
上次写到一多半状态下降,所以这次我中途休息了一个小时。
点个收藏吧各位......发下一帖会给个提醒的。
哈~话说原来北京时间已经中午了吗......要补个觉啦。
以上
#更新日志

Java 1.16.5/a  页面发布
Java 1.16.5/b  根据Wiki命令:语法,更改了命令语法
Java 1.16.5/c  增加了有关执行者的说明。同时更改了在旋转上的错误信息。
Java 1.17/a   1.17版本升级完成

Java 1.19.3/a 1.19升级完成

上一篇:[命令] 命令教程“真”从零开始 (一) 指令本身,选择器,与命令方块
索引:系列《命令教程“真”从零开始》

下一篇:[命令] 四个新手指令 命令教程“真”从零开始 (三)

振翮高飞
绝了,用tp8年不知道相对坐标,也没用过朝向锚
楼主继续更新!不要弃坑!

Dahesor
额......说到坐标想起来了,以前有一个认识的人想要把MC改成极坐标......
我的意思是,如果以后MC真的变成球形的了,那可能就用极坐标咯

磨砺
厉害啊,喜欢大佬用老师教课一般的语言去讲解指令我还真不知道tp有这么多用法
提个小小小小小建议
屏蔽词其实可以这样,比中间隔一个黑字还要好一些
  1. 监[size=0px]1[/size]狱
复制代码

效果:
1

伊人正红妆
楼主继续更新!不要弃坑!

Corsairs
6666666666666666666666

Dahesor
磨砺 发表于 2021-2-27 15:07
厉害啊,喜欢大佬用老师教课一般的语言去讲解指令我还真不知道tp有这么多用法
提个小小小小小建议
...

其实事实证明那里的敏感词根本就不是“监狱”。我到现在没找出来awa

磨砺
Dahesor 发表于 2021-2-28 05:17
其实事实证明那里的敏感词根本就不是“监狱”。我到现在没找出来awa

或许,,, 哪段英文有敏感词吧
(ps:期待更新)

△@←
本帖最后由 △@← 于 2021-4-13 08:13 编辑

选择器和exe可以早点讲
能用就行的程度,然后后面专题再细化,不成问题,不能应用总是让人焦心不是吗,
你甚至可以趁着讲执行者和执行位置把execute中关于执行者变化和执行位置变化的全讲了(注意执行位置应当还包含了维度和朝向),把执行者和执行位置的话题终结在这里
顺便,执行者那里把执行者和执行位置混在一起讲了,,然而它们其实并没有什么关系,讲到执行位置时可以另起一个标题
默认执行者和默认执行位置是蛮重要的东西希望可以强调一下,玩家和命令方块执行时就是重设了这两个参数,它们就是所有命令仅有的隐藏参数
注意执行位置应当还包含了维度和朝向
顺便可以加上在数据包内默认执行者和默认执行位置是什么(尝试超纲)

Dahesor
△@← 发表于 2021-4-13 07:21
选择器和exe可以早点讲
能用就行的程度,然后后面专题再细化,不成问题,不能应用总是让人焦心不是吗,
你 ...

停停停。
快停块停。
才第二帖啊哥。

话说你为什么用exe当成/execute的简写~

关于执行地的事我考虑到了,但是没有说。
毕竟这一帖够长了,再加个执行地怕读者蒙圈。
(当时/execute从1.12跳到1.13的时候我们也为什么时候用as什么时候用at什么时候都用什么时候谁放谁前面……)
所以本帖没交代这件事。

不过我在上面添加了一条说明,以避免误会。
感谢!

1780145020
很高兴来到MCBBS论坛

1257008856
很高兴来到MCBBS论坛

linkaifeng
学费了大佬教的基友都羡慕我

罗利233

可恶……你们都做到这个程度了吗……
我还被现实压得喘不过气

XUER_WANG
感谢楼主,学废了学废了
不过你可以把帖子中出现的指令整理一下放到帖子后面吗?
像蓝鸡的创世神教程一样,方便整理笔记
继续追更

Echo_2333
赞赞赞,21年9月新手报到

XoHADoX
局部坐标那里y是不是改成向天灵盖对着的方向穿送10格会好些
还有楼主会讲如何让面向脚指令真正的面向脚吗

暮光环城
666666666666666666

月曰
我玩的服务器可以直接tp坐标,但是坐标写在地图上,楼主你有没有办法识图把坐标提取出来传送?跪求分享

乔梦ii
学废了,有点看不了这么多,嘿嘿

落鸢
这个需要命令方块吗

Tian_a233
玩了这么久mc,只会tp玩家和坐标,希望楼主继续更新。

雾岛瑾
神乎其技!6的飞起!

hfhadusfhasd
谢谢大佬分享

keaixiaoqiang
谢谢指教

飞猫FlyingCat
芜湖辛苦啦,感谢!!