本文所有内容均基于Java版,基岩(BE)版不保证所有特性相同(部分已说明BE版的内容除外)!
计划刻(Scheduled tick,有时也往往会被称作Tile tick,但是他们的翻译都是计划刻)是指Minecraft底层中一种特殊的延时方案。这种方案相当一部分都被用到红石元件之中,如果打算深入研究Minecraft的红石系统(特别是生电相关方向),计划刻将会是玩家在游玩之中不可或缺的一部分。
(注:如无深入了解打算可以仅阅读开头的“作用与基础定义”部分)
作用与基础定义
一些方块可能会请求在将来的某一个游戏刻更新方块,这种更新方块的方式被称为计划刻。在一段时间后必定发生并且行为可以预测的变化,往往使用这种“计划刻”——比如在特定情况下,红石中继器会计划2游戏刻之后来改变它的状态,水会计划1游戏刻之后来流动。同一个方块上,计划刻与随机刻可能会起到不同的影响。
作为游戏刻(game tick)的一部分,之前请求的计划刻如果已到达指定时间,如果区块的加载等级小于33(不包括33)[仅Java版]或区块已加载[仅基岩版],计划刻就会被执行。否则推迟执行,直到区块被加载。
每个游戏刻所能计划的最大方块数是65536个。
本质
计划刻实际上是一种更新(名词,指update,而不是那个用于指代你的Minecraft版本从低版本换到高版本的过程的动词),方块在计划自己未来某一游戏刻要发生的变化时会将这个计划加入NTE列表(Next Tick Entry)中,并记录将要发生变化的时间,然后在若干gt之后发生某些变化。
应注意,计划刻其实是一种抽象的存在,它本质上是游戏对NTE列表的读取,计划刻的计划数量上限65536实际上是NTE列表的最大长度。
计划刻的触发条件
计划刻仅在被特定方块触发计划刻事件时会被创建,而非像随机刻一样在任何时候都在发生。
延时
一个计划被加入NTE列表后会被指定一个时间执行某些变化,计划刻事件被创建到执行并被移出列表之间的长度为计划刻的延迟长度。
不同的计划刻事件有着自己的延迟,显然的,在同一游戏刻被创建的计划刻事件延迟短的那个会被先执行。
以下是一些常用方块的计划刻事件的延迟长度(Java版1.12.2版本Minecraft):
方块 | 延迟长度(单位为gt) | 方块 | 延迟长度(单位为gt) |
中继器 | 中继器当前档数*2(即每一挡延迟2gt) | 发射器 | 4 |
比较器 | 2 | 投掷器 | 4 |
各种压力板 | 压下:0;弹起:20 | 红石火把 | 2 |
木质和石质按钮 | 按下:0;弹起:木质30gt石质20gt | 漏斗 | 0(NTE阶段) |
红石灯 | 亮起:0;熄灭4 | 水 | 1 |
值得强调的是,漏斗在NTE阶段下的延迟是0,它的物品传输延迟并不依赖于计划刻和NTE元件。
优先级
如果有一些计划刻方块的计划事件被指定在同一个游戏刻执行,这些计划的执行顺序将会由计划刻优先级决定,优先级数字越小的优先级越高(也就是优先级为-1的比优先级0的优先级更高,在同一gt中也就要更早执行)(优先级并非是计划刻的延迟,不要理解错误了,优先级指的是两个计划刻方块请求两个不同的更新计划后两个计划的指定时间恰巧在同一个tick时的不同计划刻方块更新时的先后顺序优先级)。
以下是所有(至Java版1.12.2版本Minecraft时)计划刻方块的优先级:
方块 | 优先级 | 方块 | 优先级 |
中继器 | -1 | 熔岩(岩浆) | 0 |
比较器 | 0 | 水(指mcmod百科的词条和教程) | 0 |
红石火把 | 0 | 落沙 | 0 |
比较器 | 0 | 木质和石质按钮 | 0 |
侦测器(观察者) | 0 | 红石灯 | 0 |
发射器 | 0 | 各种压力板(踏板) | 0 |
投掷器 | 0 | 探测铁轨 | 0 |
命令方块 | 0 | 绊线钩 | 0 |
除了中继器是-1以外其它都是0。
值得注意的是,中继器与比较器会检查自己是否指向另一个中继器或比较器,如果一个中继器指向一个比较器则会产生-3的优先级,而一个比较器指向一个中继器则产生-1优先级。
值得一提的是,不要将一些特殊的看上去是由计划刻决定的方块更新弄混了,如熔炉的烧制、小麦的成长、活塞的伸出收回等并不由计划刻决定。
部分方块的计划刻事件判定
其中中继器、比较器、红石火把以及侦测器在状态发生变化时(也就是它们开关的时候)创建计划刻事件。
命令方块、投掷器与发射器在被激活的时候创建计划刻事件,在被取消的时候没有。
水、熔岩以及沙子在被更新时创建计划刻事件。
各种按钮在被按下时创建计划刻事件。
压力板和探测铁轨被实体触发时创建计划刻事件。
绊线钩在被取消激活时创建计划刻事件。
红石灯在熄灭时创建计划刻事件(不是取消激活时,红石灯在被取消激活时到熄灭有4gt的延迟)。
参考资料:
bilibili“红石科技搬运组”的内容【熟肉】剖析MC#15
Minecraft wiki
资料分类: | 游戏底层事件 |