跳转到主要内容
hotpad100c+4
字数: 2,976
预计阅读时间: 10 分钟
最后编辑: 2026-07-15
各个阶段
各个阶段

02 初窥刻内时序

本部分我们将初步回答这一问题:Minecraft 中有 "同时发生" 这一概念吗?

在刻与刻间时序中,我们学会了基于游戏刻的延迟分析方法,例如:

  • 中继器:2~8gt 延迟
  • 比较器:2gt 延迟
  • 侦测器:2gt 延迟

这套分析方法十分有效——直到我们遇到了这样的一个装置:

装置

如果我们按照 gt 分析,假设按下按钮时为第 0gt,会得到这样的结果:

  • 中继器:按下按钮 -> 中继器延迟 2gt -> 左侧活塞在第 2gt 激活
  • 比较器:按下按钮 -> 比较器延迟 2gt -> 右侧活塞在第 2gt 激活

这样看来,两个活塞应该同时伸出!

然而,事实却是……

装置激活

…… 只有左侧的活塞推出了。

基于游戏刻的分析能够告诉我们:某一行为 “在哪一刻发生”。然而,在上文的情况中:

  • 两个活塞都应该在第 2gt 被激活
  • 两个活塞的表现不同

直觉告诉我们,这两个活塞虽然都在同一游戏刻内被激活,但或许也存在着一定的先后顺序。

在大部分情况下,Minecraft 的游戏逻辑是单线程的——也就是说,在任意一个时刻,只能有一件事在执行。

即使两个活塞都 “在同一游戏刻内被激活”,但在这一游戏刻内,这两个活塞被激活的先后顺序也是不同的,进而导致了只有左侧的活塞推出,而右侧的活塞推出失败了。

对于这种在一个游戏刻内的精细时间,我们称之为刻内时序。

与之相对的,以游戏刻为单位的 “不那么精细” 的时间,我们称之为刻间时序(或宏观时序)。

刻内时序的运行具有更加复杂的机制,各元件的行为也可能会在不同情况下发生变化,例如下图中的装置:

装置2激活

明明在同一游戏刻内,加个中继器就大有不同,这又是什么原理呢?且看下文分解,

微时序理论是我们用于研究刻内时序的一套方法。在接下来的内容中,我们将逐步深入地学习并尝试应用这套理论。

一个游戏刻就像现实生活中的一天。我们可以将一天内划分为凌晨、上午、中午、下午、晚上…… 并且每个阶段对应着不同的任务:凌晨睡觉、上午工作、中午午休、下午锻炼、晚上休息……

我们通过各种方法,发现一个游戏刻内也可以被划分为有固定顺序的多个阶段,每个阶段中,游戏又会执行不同的任务。这些阶段分别是1:

  1. 世界时间更新(World Tick Update,简称 WTU)

    • 这是划分两个不同游戏刻的阶段。如果将游戏刻比作时钟上的分针,刻内时序的运行比作秒针旋转,那么WTU就是秒针转过数字 12 的那一刻,分针进入了下一分钟,游戏也进入了下一游戏刻。

    • 一个WTU的开始到下文中所有阶段结束,构成了一个完整的游戏刻。

    • 游戏在这一阶段进行的具体工作内容是:游戏中存在一个世界时间计数器,从 0 开始每刻加 1。本阶段的作用就是让世界时间 +1,从而推进游戏时间。例如,当计数器从 1 增加到 2 时,我们就说 “进入了第 2 刻”;计数器为 2 时,我们就说 “当前是游戏的第 2gt”

    • 注:为了方便分析和简化表述,在实际分析时序时,我们通常假定最开始的操作为第 0gt(而不是用真实的世界时间计算),以第 0gt 为起始进行后续分析。

  2. 计划刻(Schedule Tick / Tile Tick / Next Tick Entry,简称 TT 或 NTE2)

    • 大部分具有延迟几 gt 执行的行为的元件都是由计划刻控制、并在计划刻阶段执行对应行为的。
  3. 区块刻(Chunk Tick,简称CT)

    • 这一阶段包含较多工作内容,详细内容读者可以自行查阅Minecraft Wiki #刻 - 区块刻,下文按执行先后顺序列出在此阶段执行的一些常见内容:
    1. 执行雷暴相关逻辑。
    2. 执行结冰、积雪、炼药锅收集水相关逻辑。
    3. 执行随机刻。随机刻控制着农作物、树苗等的生长、冰雪融化、草方块蔓延、红石矿石发光与熄灭等游戏中随机发生的事件。关于随机刻的详细内容,读者可以自行查阅Minecraft Wiki #刻 - 随机刻,此处不作过多罗列。
  4. 方块事件(Block Event,简称BE)

    • 这一阶段最常见的 “工作内容” 是活塞相关的行为。在最常见的情况中,活塞在此阶段推动方块,被推动的方块经过一定变化,在2gt 后的TE阶段中到位。读者在此处仅需初步认识活塞即可,更多有关方块事件和活塞的内容详见后续章节。

    • 除此之外,音符盒、钟发出声音等一些行为也在此阶段执行。

  5. 实体运算(Entity Update,简称EU)

    • 实体会在这一阶段执行自己的行为逻辑,如生物移动、怪物攻击、TNT 爆炸等实体自身的行为,以及非玩家实体激活压力板、绊线钩并使它们发出红石信号等实体触发红石元件的行为。这些红石元件通常在此阶段(或 AT 阶段,见下文)被激活并发出红石信号,而在计划刻阶段停止发出红石信号。
  6. 方块实体(Block Entity / Tile Entity,简称TE)

    • 一些具有特殊行为的方块会在这一阶段执行自己相关的运算,如漏斗吸取与传输物品、被活塞推动的方块到位等。
  7. 异步事件(Async Task / Network Update,简称AT/NU)

    • 与玩家相关的各种操作都在这一阶段运算,例如玩家放置与破坏方块、触发压力板、绊线钩等行为。

在接下来的内容中,我们将围绕这几个主要阶段展开。

在上文中,我们认识到 1gt 内又划分成了不同的阶段。就像早饭只能在早上吃、午饭只能在中午吃一样,Minecraft 中的许多事件只能遵循一定的顺序,发生在特定的阶段。但还有一些 “立刻响应” 的事件,就像我们渴了就可以立刻去喝水,而不关心早上、中午、还是晚上。

如果一个方块的行为可以在任意阶段发生的、只由方块更新触发,那么这个方块就称为瞬时元件。

举例来说,红石粉亮灭是瞬时的。如果玩家关闭了一个拉杆,那么可以导致红石粉在玩家操作阶段熄灭;如果活塞推走了一个红石块,就可以导致红石粉在方块事件阶段熄灭。

既然有瞬时事件,就必然有 “延时” 事件。举例来说,如果玩家放置了一个红石块,红石块激活了一个中继器,这个中继器就会在 2gt 后亮起。中继器亮起的这一行为具有延时,且由游戏控制(由计划刻控制),在特定阶段发生(计划刻阶段),中继器就不是瞬时事件。

在接下来的几部分中,我们将详细地展开这些不同的游戏阶段。

元件种类运行阶段
命令方块运行指令计划刻 TT
中继器、比较器、红石火把、侦测器的亮灭计划刻 TT
红石粉、铁轨改变状态瞬时
栅栏门、活板门改变状态瞬时
漏斗因红石信号改变状态瞬时
漏斗吸收、传递物品方块实体 TE
音符盒、钟因红石信号改变状态瞬时
音符盒、钟发出声音方块事件 BE
发射器、投掷器因红石信号改变状态瞬时
发射器发射/投掷器投出物品计划刻 TT
红石灯的亮起瞬时
红石灯的熄灭计划刻 TT
按钮、压力板、绊线的亮起瞬时
按钮、压力板、绊线的熄灭计划刻 TT
重力方块判定下落、创建实体计划刻 TT
重力方块下落、到位实体运算 EU
活塞推出或收回方块事件 BE
b36 推动实体方块实体 TE
b36 自然到位方块实体 TE
b36 被粘性活塞收回到位方块事件 BE

在这里,我们给出一个基本的例子。

下图中,所有的命令方块内指令都为 time query gametime

基础分析

上升沿 (拉下拉杆,粘性活塞推出):

刻数阶段事件
0AT玩家拉下拉杆
0AT第一个活塞添加方块事件
1BE第一个活塞推出
3TE第一个红石块到位
3TE命令方块计划在 4 刻(延迟 1 刻)运行
3TE第二个活塞添加方块事件
4TT第一个命令方块读数 4
4BE第二个活塞推出
6TE第二个红石块到位
7TT第二个命令方块读数 7

下降沿 (拉回拉杆,粘性活塞收回):

刻数阶段事件
0AT玩家关闭拉杆
0AT第一个活塞添加方块事件
1BE第一个活塞收回
1BE第一个红石被撤去
1BE第二个活塞添加方块事件
1BE第二个活塞收回
3TE两个红石块到位
4TT两个命令方块都读数 4

(改自 void 的例子)

  1. 此处我们仅介绍微时序理论分析时最常用的游戏阶段。对于更加完整、复杂的游戏阶段划分,读者可以自行前往 Minecraft Wiki #刻 - 游戏刻流程 - java 版 下的 “每个维度执行游戏刻的流程如下:……” 中查阅。其中 WTU 即对应 “更新游戏时间”。 ↩

  2. Next Tick Entry(NTE)并不是一个标准的称呼。我们更建议读者称呼 计划刻(阶段) 为 TT(阶段) ,在此处提及 NTE 只是为了读者在阅读其他部分资料时能够识别该称呼。 ↩