基础游戏机制
游戏刻
游戏刻(game tick, 简写: gt)是游戏的基础时间单位。一般情况下是每秒20个游戏刻(最多20, 可以更少),所以一般来说1游戏刻就是0.05秒。
然而,如果电脑无法保持这个速度,每游戏刻的时间就可能延长。由于很多东西都是使用游戏刻来计算时间,所以如果游戏刻减慢,很多东西需要的时间会延长。
假如1个游戏刻达到了1分钟的长度(当服务器配置不足以运行那么多命令/那命令需要的计算太多的时候可能出现), 服务器一般会崩溃。因此请注意别玩得太过...
时序
MC的事件是顺序的, 而不是平行执行的。
因此不同命令之间会有执行顺序。在编写命令的时候请注意。
除此以外, 部分机制会在gt完结/gt开始时才工作(总之不是马上更新), 比如骑乘者的位置不是在骑乘着的实体移动时马上更新的。处理相关机制时需要加倍留意以及多做一些实验测试。
坐标
绝对坐标就是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的位置
方块坐标
方块的坐标都是没有小数的,比如(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)
实体坐标
实体坐标就是一个有小数的坐标,比如(0.5,5.0,0.5)就是一个实体坐标。
实体的坐标由于有小数,所以它可以十分精细地移动,而不是一次移动一格。
实体的大小那么大,那么它的坐标是指什么位置呢?大部分都是指实体的最下方的中心点
实体坐标转方块坐标时就是向下舍入。
如(6.5,6.5,6.5),变成方块坐标之后就是(6,6,6);(-4.5,5.5,20.5)变成方块坐标之后就是(-5,5,20)
相对坐标
相对坐标就是相对于某个点的坐标。表达相对坐标的符号为~。比如~5 ~ ~3就是原点x+5, z+3的位置。
相对坐标可以与绝对坐标一起使用, 比如原点为5,5,5,坐标~5 20 ~-3换为绝对坐标就是10 20 2
相对坐标在大部分命令都充当着一个很重要的角色, 因为很多时候我们会希望对目标相对位置进行操作, 比如在玩家面前放置方块。
区块加载、出生点区块
区块是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到那里的实体会等待一段时间才会被卸载)。
当区块不符合加载的条件,它会等一段时间之后才会不被加载(卸载),而不是即时的,然而那时间也不是固定的,大概是几秒左右,所以大约几秒就需要用特殊的方法来加载区块一次来避免它里面的东西不能正常使用。
常用区块加载方法
/spreadplayers命令
当需要加载目的区块的时候就向该区块中的一个坐标/spreadplayer,这样便可以把目的区块加载一段短时间。
这也是最常用的方法,因为这个并不需要先前让那个区块被加载才能使用,而且是最有弹性的,不会被坐标什么的局限。
然而如果需要长时间加载区块,那么就不建议使用这个,因为可能会不稳定。
这个方法不需要得知目的地的绝对坐标, 然而目的地必须有方块让传送的实体到达, 不然就会失败。
末地折跃门
实体通过末地折跃门传送到某个区块的时候能够让该区块短暂加载, 因此末地折跃门也是一个可行的加载区块方法。
传送方法为设置末地折跃门的ExitPortal为目的地坐标。目的地不需要有末地折跃门也能成功。
这个方法的好处是不需要目的地有方块也能成功, 然而问题在于这个方法必须知道目的地的绝对坐标。
物品、方块与实体
方块我们都很熟悉。它们总是和坐标格子对齐,而且永远不可能有两个方块占据同一个位置。而实体却可以具有坐标不为整数的位置,也可以重叠在一起。
每个方块都有两个参数。它的id和它的元数据值。Mojang正在努力在代码中使用方块状态来代替元数据值,但是除了结构方块文件,在存档中仍然使用元数据值。
Mojang也正在努力使用新式的文字id来代替数字id。
实体比方块的数据复杂得多,它们可以有很多的不同用途不同种类的数据。它们的坐标也可以不为整数。虽然实体种类很多,它们的数据上会有很多差异,但是,只要它会被保存到存档里,它就具有种类,位置和唯一标识码(UUID)。所有的生物(包括玩家)都属于实体。
有些方块需要更多的数据,或者为了一些其他的用途,使用了方块实体这一概念。这些方块借用了实体的能力和保存数据的方式,仿佛在这个方块的位置有一个类似实体的东西。
游戏中还有着许多的物品。物品不能脱离实体或者方块实体存在。比如物品可以在玩家或者箱子的物品栏里。掉落物也可以看成一个只有一个物品栏的实体。物品总是有着它的id,个数,损害值和其他数据。如果这个物品所在的物品栏和许多个物品栏并列在一起,这个物品还会有它所在的格子编号。就像住在楼房里的人不只要记住自己在哪个楼,还要记住他自己的门牌号一样。
大多数方块有其对应的物品形式。部分方块缺乏与其对应的物品形式。也有些方块貌似存在着与其对应的物品,然而这物品和他的id不一致。这使得这些没有与其id一致的对应物品方块的掉落沙自动破坏时无法产生物品。
应当区分方块和物品。这在命令方块的使用中很重要。
比如末影人携带的、自定义矿车显示的、掉落沙代表的是方块,但是僵尸等生物手里拿着的、盔甲架头上顶着的、飞行的烟花火箭、掷出的药水瓶记载产生他的物品都是物品。所以无法在盔甲架模型中使用点亮的红石灯,方形的蛋糕。但却可以让末影人手持点亮的红石灯(或者方形蛋糕)。
实体
分类
一般来说,我们会把实体分为不同的类别,方便讲解其特性。
以下为粗略的分类
- 实体
- 生物
- 怪物
- 中立(可能会攻击玩家)
- 被动(不会攻击玩家)
- 投射物
- 移动方块
- 交通工具
- 其他
- 生物