企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 坐标(Coordinate) 坐标为三个数字,定义了物件在**当前世界**内的位置。该三数值分别为x、y、z数值,分别代表物件在x、y、z轴上离参照点(Reference point)的距离,单位为米,即一般方块的长、阔、高的数值。 + x轴为東(+)西(-)。 + y轴为上(+)下(-)。 + z轴为南(+)北(-)。 本文会以(x, y, z)表达坐标。 ## 绝对坐标(Absolute coordinate) 绝对坐标的参照点为游戏的原点,即(0,0,0)。 一般不特别指明的情况下都为绝对坐标、主世界。 游戏内点击F3后出现的调试界面会显示玩家当前的绝对坐标(注意是脚的坐标)、朝向等资料,对地图制作十分有用。 一般地图内大多用绝对坐标,因为我们清楚所有东西的坐标,使用相对坐标则需要新的参照点并且需要一些计算,比较麻烦。(y坐标除外,因为y坐标在对方块使用的情况下的范围不大,只是0-255) 然而能够在多个地图内使用的模块则甚少使用绝对坐标,因为我们不清楚当前坐标的绝对坐标(命令没法轻易获得此数值)。在这情况下,我们会以某个实体为参照点,使用相对坐标。 ## 相对坐标(Relative coordinate) 相对坐标就是相对于某个点的坐标。表达相对坐标的符号为`~`(如`~3`就是+3,`~`就是没有变化)。比如(~5 ~ ~-3)就是某个点的(x+5, y, z-3)的位置。 相对坐标可以与绝对坐标一起使用, 比如原点为(5,5,5),坐标(~5 20 ~-3)换为绝对坐标就是(10 20 2) 相对坐标在大部分命令都充当着一个很重要的角色, 因为很多时候我们会希望对目标相对位置进行操作, 比如在玩家上方放置方块。 > **知多一点点**:相对坐标的原点=执行点? > (对于执行点的概念请参见章节1.4:命令执行) > > 在大多数使用相对坐标的情况下,是的。很大部分相对坐标是相对于执行坐标的。 > 然而有两个例外: `tp`命令及`execute`命令。 > `tp`命令的其中一个格式: tp <被传送实体> <x> <y> <z>,中的(x, y, z),原点为**被传送实体**的当前坐标,而不是执行点。 > `execute`命令的格式: execute <实体> <x1> <y1> <z1> <command>及execute <实体> <x1> <y1> <z1> detect <x2> <y2> <z2> <block> <data value|block state> <command>,中的(x1, y1, z1)以**选择到的实体的坐标**为原点,(x2, y2, z2)以 **(x1, y1, z1)** 的坐标为原点。 > 不过,在实际的使用情况上,除非是`tp`或`execute`命令,否则都是相对于执行坐标了。 # 朝向(Facing) Minecraft里的朝向都是以角度为单位。可以填写负数角度。 朝向分为两个: rx, ry。 rx即平面上的转轴,垂直于当前玩家的朝向。也就是说这角度决定了玩家看向上、看向前还是看向下的。 -90就是向上,0就是看向正前方,90就是向下。 ry即垂直的转轴,这决定了平面的朝向。这比较难以描述,还是直接上图就好。 ![](https://box.kancloud.cn/38d311cbc52f43cc95e7b5f73c106b46_400x400.png) > 值得一提的是,MC**无法直接取得前方**的坐标,如果要做到这功能的话只能靠一些黑科技或枚举(穷举,enumerating) # 区块(Chunk) 区块是Minecraft世界的组成部分。每个区块的大小为16\*256\*16,长16格,宽16格,高256格(y=0到y=255) 当你所在坐标的 **x或z mod16=0或15**(mod为取余),你就是在区块的边缘上了。 除了这个方法以外, 你还可以按下F3 + G, 这会显示区块边缘, 再按一次F3 + G就能关闭。 ## 出生区块(Spawn chunk) 出生区块大部分情况下也会被加载。如果那区块的中心距离世界出生点距离小于等于128格,那么它就会被加载。所以一般加载范围是16\*16个区块,也有可能是17\*17(较少出现) 可以透过/setworldspawn指令来更改世界出生点,以更改出生区块。然而需要知道的是,那个出生区块更改出生区块后需要玩家经过至少一次才会开始加载。 ## 区块加载、卸下(load, unload) 除了出生区块以外,预设玩家附近21\*21的区块会被加载(10个区块的内圆半径),然而这可以调整,内圆半径可以从3(附近7\*7的区块会被加载)到15(附近31\*31的区块会被加载)。其他世界的区块在没有玩家存在时是不会被加载的。 当区块不被加载,就不能在那个区块放置方块,那个区块的一切都是处于暂停的状态,并且那个区块的实体会不存在,直至该区块被加载(tp到那里的实体会等待一段时间才会被卸下)。 当区块不符合加载的条件,它会等一段时间之后才会不被加载(卸下),而不是即时的,然而那时间也不是固定的,大概是几秒左右,所以大约几秒就需要用特殊的方法来加载区块一次来避免它里面的东西不能正常使用。 ### 常用区块加载方法 + `spreadplayers`命令 当需要加载目的区块的时候就向该区块中的一个坐标/spreadplayer,这样便可以把目的区块加载一段短时间。 这也是最常用的方法,因为这个并不需要先前让那个区块被加载才能使用,而且是最有弹性的,不会被坐标什么的局限。 然而如果需要长时间加载区块,那么就不建议使用这个,因为可能会不稳定。(无论任何情况也不建议需要长久加载非出生区块的区块) 这个方法不需要得知目的地的绝对坐标, 然而目的地必须有方块让传送的实体到达, 不然就会失败。 + 结构方块 结构方块放置结构时会短暂加载目标区块一段时间,只需要弄一个非常大的结构文件放置一大堆空气,然后放置到目标区块,但设置"结构完整性"(integrity)为0.0,这样就不会放置任何方块,但也会加载目标区块。 问题是这个方式需要在加载中的区块使用(因为不能在被卸下的区块放置方块),与目标区域之间的距离难以确定,因此不常使用。