1 基础游戏机制
1.1 游戏刻
游戏刻(game tick, 简写: gt)是游戏的基础时间单位。一般情况下是每秒20个游戏刻(最多20, 可以更少),所以一般来说1游戏刻就是0.05秒。
然而,如果电脑无法保持这个速度,每游戏刻的时间就可能延长。由于很多东西都是使用游戏刻来计算时间,所以如果游戏刻减慢,很多东西需要的时间会延长。
假如1个游戏刻达到了1分钟的长度(当服务器配置不足以运行那么多命令/那命令需要的计算太多的时候可能出现), 服务器一般会崩溃。因此请注意别玩得太过...
1.2 时序
MC的事件是顺序的, 而不是平行执行的。
因此不同命令之间会有执行顺序。在编写命令的时候请注意。
除此以外, 部分机制会在gt完结/gt开始时才工作(总之不是马上更新), 比如骑乘者的位置不是在骑乘着的实体移动时马上更新的。处理相关机制时需要加倍留意以及多做一些实验测试。
1.3 坐标
绝对坐标就是Minecraft里用来记录实体、方块位置的数值,由三个数值组成,分别是X轴的数值、Y轴的数值和Z轴的数值。
- X坐标反映了玩家/实体/方块距離原點(X、Y、Z=0的点)在東(+)西(-)方向上的距離
- Z坐标反映了玩家/实体/方块距離原點(X、Y、Z=0的点)在南(+)北(-)方向上的距離
- Y坐标反映了玩家/实体/方块的高度(0-255)
在这个教程里,绝对坐标会以(X,Y,Z)的方法代表,比如(0,5,0)就是代表X=0,Y=5,Z=0的位置
1.3.1 方块坐标
方块的坐标都是没有小数的,比如(0,5,0)就是一个方块坐标
所以方块都是一格一格地移动的,是不可能做到精细的移动的。所以如果你看到一些移动很精细的方块,它可能就是一个掉落沙(和正常方块大小相若),或者是盔甲架之类的戴着/拿着物品的实体("方块"会比一般的方块小)
方块坐标转为实体坐标的时候, x、y、z都会加0.5
如(0,5,0)变为实体坐标,就是(0.5,5.5,0.5);(-5,5,20)变为实体坐标就是(-4.5,5.5,20.5)
1.3.2 实体坐标
实体坐标就是一个有小数的坐标,比如(0.5,5.0,0.5)就是一个实体坐标。
实体的坐标由于有小数,所以它可以十分精细地移动,而不是一次移动一格。
实体的大小那么大,那么它的坐标是指什么位置呢?大部分都是指实体的最下方的中心点
实体坐标转方块坐标时就是向下舍入。
如(6.5,6.5,6.5),变成方块坐标之后就是(6,6,6);(-4.5,5.5,20.5)变成方块坐标之后就是(-5,5,20)
1.3.3 相对坐标
相对坐标就是相对于某个点的坐标。表达相对坐标的符号为~。比如~5 ~ ~3就是原点x+5, z+3的位置。
相对坐标可以与绝对坐标一起使用, 比如原点为5,5,5,坐标~5 20 ~-3换为绝对坐标就是10 20 2
相对坐标在大部分命令都充当着一个很重要的角色, 因为很多时候我们会希望对目标相对位置进行操作, 比如在玩家面前放置方块。
1.4 区块加载、出生点区块
区块是Minecraft世界的组成部分。每个区块的大小为16*256*16,长16格,宽16格,高256格(y=0到y=255)
当你在x/z = 16的倍数/16的倍数-1 的坐标,你就是在区块的边缘上了。
除了这个方法以外, 你还可以按下F3 + G, 这会显示区块边缘, 再按一次F3 + G就能关闭。
预设玩家附近21*21的区块会被加载(10个区块的内圆半径),然而这可以调整,内圆半径可以从3(附近7*7的区块会被加载)到15(附近31*31的区块会被加载)
除此之外,出生区块大部分情况下也会被加载。如果那区块的中心距离世界出生点距离小于等于128格,那么它就会被加载。所以一般加载范围是16*16个区块,也有可能是17*17(较少出现)
可以透过/setworldspawn指令来更改世界出生点,以更改出生区块。然而需要知道的是,那个出生区块更改出生区块后需要玩家经过至少一次才会开始加载。
需要知道的是,当玩家不在主世界,主世界的区块并不会被加载(包括出生区块),你可以透过用漏斗、扔物品进地狱门等方法来保持区块加载。
当区块不被加载,就不能在那个区块放置方块,那个区块的一切都是处于暂停的状态,并且那个区块的实体会不存在,直至该区块被加载(tp到那里的实体会等待一段时间才会被卸载)。
当区块不符合加载的条件,它会等一段时间之后才会不被加载(卸载),而不是即时的,然而那时间也不是固定的,大概是几秒左右,所以大约几秒就需要用特殊的方法来加载区块一次来避免它里面的东西不能正常使用。
1.4.1 常用区块加载方法
(i) /spreadplayers命令
当需要加载目的区块的时候就向该区块中的一个坐标/spreadplayer,这样便可以把目的区块加载一段短时间。
这也是最常用的方法,因为这个并不需要先前让那个区块被加载才能使用,而且是最有弹性的,不会被坐标什么的局限。
然而如果需要长时间加载区块,那么就不建议使用这个,因为可能会不稳定。
这个方法不需要得知目的地的绝对坐标, 然而目的地必须有方块让传送的实体到达, 不然就会失败。
(ii) 末地折跃门
实体通过末地折跃门传送到某个区块的时候能够让该区块短暂加载, 因此末地折跃门也是一个可行的加载区块方法。
传送方法为设置末地折跃门的ExitPortal为目的地坐标。目的地不需要有末地折跃门也能成功。
这个方法的好处是不需要目的地有方块也能成功, 然而问题在于这个方法必须知道目的地的绝对坐标。