02 初窥刻内时序
本部分我们将初步回答这一问题:Minecraft 中有 "同时发生" 这一概念吗?
1 发现刻内时序
1.1 引入:一个奇怪的现象
在刻与刻间时序中,我们学会了基于游戏刻的延迟分析方法,例如:
- 中继器:2~8gt 延迟
- 比较器:2gt 延迟
- 侦测器:2gt 延迟
这套分析方法十分有效——直到我们遇到了这样的一个装置:

如果我们按照 gt 分析,假设按下按钮时为第 0gt,会得到这样的结果:
- 中继器:按下按钮 -> 中继器延迟 2gt -> 左侧活塞在第 2gt 激活
- 比较器:按下按钮 -> 比较器延迟 2gt -> 右侧活塞在第 2gt 激活
这样看来,两个活塞应该同时伸出!
然而,事实却是……

…… 只有左侧的活塞推出了。
1.2 刻间时序的不足
基于游戏刻的分析能够告诉我们:某一行为 “在哪一刻发生”。然而,在上文的情况中:
- 两个活塞都应该在第 2gt 被激活
- 两个活塞的表现不同
直觉告诉我们,这两个活塞虽然都在同一游戏刻内被激活,但或许也存在着一定的先后顺序。
1.3 “我们需要更深入些”:刻内时序
在大部分情况下,Minecraft 的游戏逻辑是单线程的——也就是说,在任意一个时刻,只能有一件事在执行。
即使两个活塞都 “在同一游戏刻内被激活”,但在这一游戏刻内,这两个活塞被激活的先后顺序也是不同的,进而导致了只有左侧的活塞推出,而右侧的活塞推出失败了。
对于这种在一个游戏刻内的精细时间,我们称之为刻内时序。
与之相对的,以游戏刻为单位的 “不那么精细” 的时间,我们称之为刻间时序(或宏观时序)。
刻内时序的运行具有更加复杂的机制,各元件的行为也可能会在不同情况下发生变化,例如下图中的装置:

明明在同一游戏刻内,加个中继器就大有不同,这又是什么原理呢?且看下文分解,
2 微时序理论
微时序理论是我们用于研究刻内时序的一套方法。在接下来的内容中,我们将逐步深入地学习并尝试应用这套理论。
2.1 微时序的阶段划分
一个游戏刻就像现实生活中的一天。我们可以将一天内划分为凌晨、上午、中午、下午、晚上…… 并且每个阶段对应着不同的任务:凌晨睡觉、上午工作、中午午休、下午锻炼、晚上休息……
我们通过各种方法,发现一个游戏刻内也可以被划分为有固定顺序的多个阶段,每个阶段中,游戏又会执行不同的任务。这些阶段分别是1:
-
世界时间更新(World Tick Update,简称 WTU)
-
这是划分两个不同游戏刻的阶段。如果将游戏刻比作时钟上的分针,刻内时序的运行比作秒针旋转,那么WTU就是秒针转过数字 12 的那一刻,分针进入了下一分钟,游戏也进入了下一游戏刻。
-
一个WTU的开始到下文中所有阶段结束,构成了一个完整的游戏刻。
-
游戏在这一阶段进行的具体工作内容是:游戏中存在一个世界时间计数器,从 0 开始每刻加 1。本阶段的作用就是让世界时间 +1,从而推进游戏时间。例如,当计数器从 1 增加到 2 时,我们就说 “进入了第 2 刻”;计数器为 2 时,我们就说 “当前是游戏的第 2gt”
-
注:为了方便分析和简化表述,在实际分析时序时,我们通常假定最开始的操作为第 0gt(而不是用真实的世界时间计算),以第 0gt 为起始进行后续分析。
-
-
计划刻(Schedule Tick / Tile Tick / Next Tick Entry,简称 TT 或 NTE2)
- 大部分具有延迟几 gt 执行的行为的元件都是由计划刻控制、并在计划刻阶段执行对应行为的。
-
区块刻(Chunk Tick,简称CT)
- 这一阶段包含较多工作内容,详细内容读者可以自行查阅Minecraft Wiki #刻 - 区块刻,下文按执行先后顺序列出在此阶段执行的一些常见内容:
- 执行雷暴相关逻辑。
- 执行结冰、积雪、炼药锅收集水相关逻辑。
- 执行随机刻。随机刻控制着农作物、树苗等的生长、冰雪融化、草方块蔓延、红石矿石发光与熄灭等游戏中随机发生的事件。关于随机刻的详细内容,读者可以自行查阅Minecraft Wiki #刻 - 随机刻,此处不作过多罗列。
-
方块事件(Block Event,简称BE)
-
这一阶段最常见的 “工作内容” 是活塞相关的行为。在最常见的情况中,活塞在此阶段推动方块,被推动的方块经过一定变化,在2gt 后的TE阶段中到位。读者在此处仅需初步认识活塞即可,更多有关方块事件和活塞的内容详见后续章节。
-
除此之外,音符盒、钟发出声音等一些行为也在此阶段执行。
-
-
实体运算(Entity Update,简称EU)
- 实体会在这一阶段执行自己的行为逻辑,如生物移动、怪物攻击、TNT 爆炸等实体自身的行为,以及非玩家实体激活压力板、绊线钩并使它们发出红石信号等实体触发红石元件的行为。这些红石元件通常在此阶段(或 AT 阶段,见下文)被激活并发出红石信号,而在计划刻阶段停止发出红石信号。
-
方块实体(Block Entity / Tile Entity,简称TE)
- 一些具有特殊行为的方块会在这一阶段执行自己相关的运算,如漏斗吸取与传输物品、被活塞推动的方块到位等。
-
异步事件(Async Task / Network Update,简称AT/NU)
- 与玩家相关的各种操作都在这一阶段运算,例如玩家放置与破坏方块、触发压力板、绊线钩等行为。
在接下来的内容中,我们将围绕这几个主要阶段展开。
2.2 瞬时行为
在上文中,我们认识到 1gt 内又划分成了不同的阶段。就像早饭只能在早上吃、午饭只能在中午吃一样,Minecraft 中的许多事件只能遵循一定的顺序,发生在特定的阶段。但还有一些 “立刻响应” 的事件,就像我们渴了就可以立刻去喝水,而不关心早上、中午、还是晚上。
如果一个方块的行为可以在任意阶段发生的、只由方块更新触发,那么这个方块就称为瞬时元件。
举例来说,红石粉亮灭是瞬时的。如果玩家关闭了一个拉杆,那么可以导致红石粉在玩家操作阶段熄灭;如果活塞推走了一个红石块,就可以导致红石粉在方块事件阶段熄灭。
2.3 延时行为
既然有瞬时事件,就必然有 “延时” 事件。举例来说,如果玩家放置了一个红石块,红石块激活了一个中继器,这个中继器就会在 2gt 后亮起。中继器亮起的这一行为具有延时,且由游戏控制(由计划刻控制),在特定阶段发生(计划刻阶段),中继器就不是瞬时事件。
在接下来的几部分中,我们将详细地展开这些不同的游戏阶段。
2.4 常见元件的运行阶段
2.5 刻内时序基础分析
在这里,我们给出一个基本的例子。
下图中,所有的命令方块内指令都为 time query gametime

上升沿 (拉下拉杆,粘性活塞推出):
下降沿 (拉回拉杆,粘性活塞收回):
(改自 void 的例子)
Footnotes
-
此处我们仅介绍微时序理论分析时最常用的游戏阶段。对于更加完整、复杂的游戏阶段划分,读者可以自行前往 Minecraft Wiki #刻 - 游戏刻流程 - java 版 下的 “每个维度执行游戏刻的流程如下:……” 中查阅。其中 WTU 即对应 “更新游戏时间”。 ↩
-
Next Tick Entry(NTE)并不是一个标准的称呼。我们更建议读者称呼 计划刻(阶段) 为 TT(阶段) ,在此处提及 NTE 只是为了读者在阅读其他部分资料时能够识别该称呼。 ↩





