红石科技基础之方块更新
方块更新的种类
在《我的世界》中,世界看起来是由无数静止的方块组成的,但实际上,这些方块一直在“互相通知变化”。这种“通知机制”,就叫做 方块更新(Block Update)
如果没有方块更新:红石不会响应,沙子不会掉落,火把不会熄灭,门、活塞、电路都会失灵。可以说方块更新,是 Minecraft 世界能动起来的底层逻辑之一。在Java版中,有两种主要的方块更新,即PP更新和NC更新
PP更新(Shape Update/Post-Placement Update)
PP更新是游戏内最广泛的方块更新类型。它用于方块的放置、修改和移除等各种方块变化中,执行改变方块的形状与检查附着性等操作。你可以将PP更新简单理解为检查“我还能不能待在这里?”当一个方块被放置、移除或形状发生变化时,
周围的方块会进行一次结构与附着检查
- 产生PP更新
PP更新必须由一次方块放置、修改或移除产生。当方块被放置、破坏,或方块状态产生变化时,系统会在这个方块修改之后依次向西、东、北、南、下、上的方块传播PP更新

图 1:PP更新范围
- PP 更新行为对照表
| 行为类别 | 涉及方块(示例) | 接收到 PP 更新后的主要行为 |
|---|---|---|
| 附着检查 | 火把、按钮、拉杆、告示牌、压力板等(不含铁轨) | 检查是否仍能附着在更新来源方向的方块上;不能则掉落或延迟 1 刻后破坏 |
| 重力检查 | 沙子、沙砾、混凝土粉末 | 检查下方是否有支撑;无支撑则变为下落方块(混凝土粉末可能进一步固化) |
| 流体更新 | 水、岩浆、含水方块 | 添加流体计划刻以重新计算流动或含水状态 |
| 含水方块特殊处理 | 含水栅栏 | 先处理流体更新,再更新连接形状 |
| 连接关系更新 | 箱子、栅栏、玻璃板、绊线 | 检查是否需要与更新方向上的方块建立或断开连接 |
| 多方块结构检查 | 床、门 | 检查多方块结构是否完整;若破坏且更新源在结构范围内则掉落 |
| 生物方块存活检查 | 珊瑚 | 检查周围是否有水;无水则延迟数秒后死亡 |
| 植物状态更新 | 树叶 | 延迟 1 刻后重新计算与原木的距离并更新状态 |
| 地表方块退化检查 | 耕地、草径、草方块、菌丝 | 接收到来自上方的 PP 更新时检查是否退化或改变状态 |
| 气泡柱相关 | 气泡柱、岩浆块、灵魂沙 | 检查是否需要生成、更新或移除气泡柱(可能延迟执行) |
| 功能状态判断 | 营火 | 接收到来自下方的 PP 更新时检查是否成为信号火 |
| 音效 / 表现变化 | 音符盒 | 接收到来自上下方的 PP 更新时改变乐器类型 |
| 红石形态检查 | 红石线、中继器、比较器 | 检查附着、连接或锁定状态(不直接计算信号强度) |
| 侦测器触发 | 侦测器 | 在未激活状态下接收到面对方向的 PP 更新会延迟输出红石信号 |
| 红石线间接传播 | 红石线 | 在间接 PP 更新时额外向斜上、斜下传播,用于更新红石线形态 |
| 活塞结构检查 | 活塞头 | 接收到来自后方的 PP 更新时检查对应活塞是否存在,不存在则立刻破坏 |
NC更新(Neighbor Changed Update)
NC更新,指的是最基础的,是最广为人知的方块更新,主要用于红石元件。你可以将PP更新简单理解为“我旁边的方块变了,我要不要改变状态?”这是红石能工作的关键
产生NC更新
与PP更新类似,NC更新也必须由一次方块放置、修改或移除产生,方块实体的变化也可能产生NC更新
为了简化说明,在这里我们引入更新核和二阶更新核的概念:
- 若一个方块为更新核,则它会依次向本方块的西、东、下、上、北、南方向(或排除其中某一个方向)上的方块传播NC更新。(与PP更新一致)
- 若一个方块为二阶更新核,则它本质上等价于本方块和周围6个方块都为更新核。在传播更新时,先执行本方块更新核的NC更新传播,再依次执行本方块下、上、北、南、西、东方向上的更新核进行NC更新传播。有些二阶更新核本方块不会产生NC更新,也有一些二阶更新核调用子更新核的顺序随机
绝大多数的方块放置、破坏、更新方块状态和方块实体更新都会以自身方块为更新核传播NC更新,即按照西、东、下、上、北、南的顺序依次传播NC更新

图 2:二阶更新核范围- 特殊NC更新表
方块类型 触发情况 NC 更新的更新核 主要特征 压力板 / 按钮 / 拉杆 / 避雷针 / 绊线钩 切换激活状态;激活时被破坏 自身 + 附着方块 更新中心偏向“所附着的方块” 讲台 / 陷阱箱 / 幽匿感测体 激活状态变化;激活时被破坏 自身 + 下方方块 更新向下传播,是下方 BUD 的基础 红石火把 放置、破坏、状态变化 自身(作为二阶更新核) 更新层级更深,易引发连锁反应 侦测器 激活状态变化 输出方向方块 不以自身为核,认为变化发生在“输出端” 激活时被破坏 自身 破坏时行为回归正常 拉杆(更新顺序特性) 切换激活状态 先自身 → 再附着方块 双阶段 NC 更新 幽匿感测体(更新顺序特性) 切换激活状态 先自身 → 再下方方块 双阶段 NC 更新 潜影盒 开合、结束开合动画 自身 动画本身会触发 NC 更新 铁轨(通用) 被破坏 上方 / 自身 / 下方(取决于状态) 更新核位置与倾斜、类型有关 动力 / 激活 / 探测铁轨 放置、破坏、状态变化 上方 + 自身 + 下方(按顺序) NC 更新范围最大、次数最多 倾斜铁轨 状态变化 上方方块(优先) 更新“向上抬一格” 红石中继器 / 比较器 放置、破坏 自身 + 输出方向方块 输出端优先 接收 NC 更新且下方无支撑 自身(二阶更新核) 会额外触发一轮 NC 更新 红石比较器 输出信号变化 输出方向方块 不包含更新源自身 红石线(总体) 放置、破坏、信号变化 自身 / 上下方 / 邻近红石线 NC 更新极其复杂 红石线(传播顺序) 任意 NC 更新 北 → 东 → 南 → 西 顺序固定,是红石特性的来源 红石线 + 红石导体 状态变化 导体上方或下方红石线 更新会被“抬高或压低” 红石线形态变化(点 ↔ 十字) 形态切换 水平方向红石导体 更新核不在红石线自身 可输出模拟信号的方块 / 容器 状态或内容变化 红石比较器 触发“比较器更新”(特殊 NC 更新)
*详细内容见wiki:https://zh.minecraft.wiki/w/%E6%96%B9%E5%9D%97%E6%9B%B4%E6%96%B0
- NC更新行为对照表
| 行为类别 | 涉及方块 | 接收到 NC 更新后的主要行为 |
|---|---|---|
| 铁轨状态更新 | 各类铁轨(普通、动力、激活、探测) | 更新激活状态并检查自身附着情况 |
| 流体传播 | 水、岩浆等流体 | 在可传播条件下添加流体计划刻,重新计算流动 |
| 命令执行 | 命令方块 | 更新激活状态;若被激活,延迟 1 游戏刻后执行命令 |
| 结构操作 | 结构方块 | 执行对应的保存 / 加载 / 检测等结构操作 |
| 声音输出(红石驱动) | 钟 | 更新激活状态,激活时发出声音 |
| 音符盒 | 更新激活状态,激活时发出音符 | |
| 植物行为 | 大型垂滴叶 | 在有红石信号时重置倾斜程度 |
| 开关类方块 | 门、活板门、栅栏门 | 更新开闭状态;含水活板门状态改变时额外更新流体 |
| 红石器件逻辑 | 红石中继器、红石比较器 | 检查附着并尝试重新计算输出信号 |
| 投掷与发射 | 投掷器、发射器 | 切换激活状态;激活时延迟 4 游戏刻执行投掷/发射 |
| 红石灯逻辑 | 红石灯 | 有信号但未亮:延迟点亮;无信号但已亮:立刻熄灭 |
| 红石火把稳定性检查 | 红石火把 | 若输出异常且本刻无计划刻,延迟 2 游戏刻切换状态 |
| 红石信号传播 | 红石线 | 重新计算红石信号并检查附着 |
| 环境变化 | 霜冰 | 尝试融化 |
| 海绵 | 尝试吸收周围水 | |
| 红石控制容器 | 漏斗 | 尝试更新启用 / 禁用状态 |
| 爆炸触发 | TNT | 在存在红石信号时被激活并点燃 |
更新的优先级
PP 更新(Post Placement Update)与NC 更新(Neighbor Changed Update)并非同时发生,而是具有严格的执行顺序
当一个方块被放置、破坏或其状态发生改变时,游戏通常会按照既定流程依次触发不同类型的更新
在正常情况下,一次方块状态变更会依照以下顺序执行:
- 修改子区块内的方块状态
- 更新高度图
- 调用被替代方块状态的破坏行为
- 调用新方块状态的放置行为
- 更新方块实体(Block Entity)信息
- 产生 NC 更新
- 产生 比较器更新
- 产生 PP 更新
在该流程中,NC 更新先于 PP 更新执行,这是红石系统设计中的默认行为
部分方块具有特殊的更新实现,其 NC 更新与 PP 更新的触发时机可能与上述流程不同。这些行为通常被称为非正常 NC 更新
激活状态切换相关
以下方块在切换激活状态时,先产生 PP 更新,再产生 NC 更新:压力板,侦测器,红石火把
当这些方块被破坏时,会在破坏行为中先执行非正常 NC 更新,随后继续执行正常更新流程
双阶段 NC 更新
以下方块在切换激活状态时,会在正常流程结束后额外产生一次 NC 更新,即 NC 更新被分为两个阶段:按钮,拉杆,讲台,避雷针,幽匿感测体,绊线钩
当这些方块被破坏时,同样会在破坏行为中先执行非正常 NC 更新,其后流程与正常情况一致
铁轨类方块
铁轨类方块在切换激活状态时:
- 先执行原状态破坏时产生的非正常 NC 更新
- 再正常执行放置流程
- 最后再次产生非正常 NC 更新
这种行为使铁轨类方块在红石系统中具有较高的更新复杂度
红石线
在切换点状 / 十字状形态时,红石线会在正常流程结束后额外产生一次非正常 NC 更新(NC 更新分为两次)。
在其他情况下,红石线通常先进行 PP 更新,再进行 NC 更新,与一般规则相反。
中继器与比较器的特殊破坏情况
当红石中继器或红石比较器接收到 NC 更新,且其下方失去支撑并因此被破坏时:
会在正常更新流程完成后,额外产生一次非正常 NC 更新
即 NC 更新同样被拆分为两个阶段执行
唱片机
当唱片机的方块状态 has_record 发生变化时:
先产生 PP 更新,再产生NC 更新
自更新(Self Update)
部分方块在执行放置行为或破坏行为时,会在其内部再次设置自身的方块状态,这种行为被称为自更新。
自更新中触发的方块状态设置会完整执行正常的更新流程;
而外层的更新流程会在产生 NC 更新之前终止,因此外层原本应产生的 NC 更新和 PP 更新可能被忽略。
示例:漏斗
- 玩家放置漏斗时,若周围存在红石信号
- 漏斗在执行放置行为过程中会修改自身的激活状态
- 该内部状态修改不会产生 NC 更新
- 外层更新流程因此提前结束
- 最终仅产生 PP 更新,而不会产生 NC 更新
方块更新的检测
BUD(Block Update Detector)
BUD(方块更新探测器)是一类利用方块更新机制工作的红石结构,用于在不直接接收到红石信号的情况下,感知周围方块的更新事件并产生红石输出。
BUD 并非一种独立的方块或游戏内明确标识的机制,而是玩家基于NC 更新、PP 更新及其传播顺序所设计的一种红石原理结构。
在展示BUD结构之前需要补充一个概念:QC(Quasi-connectivity,半连接性)。在正常情况下,方块是否被红石信号激活,取决于其相邻方块是否提供直接供能或强供能。然而,在 QC 机制下,部分方块在进行供能判断时,会额外检查自身上方或斜上方的方块是否存在红石信号。以活塞为例:活塞在判断是否应当伸出时,不仅会检查与自身相邻的供能方块,还会检查其上方一格的方块是否被红石信号激活如果满足条件,即使活塞本身并未直接接触红石信号,也可能被视为“已供能”。这种并非严格相邻,却被视为连接的供能方式,被称为 半连接性(Quasi-Connectivity)。
并非所有方块都支持 QC,在 Java 版中,QC 主要影响以下方块:活塞,粘性活塞,投掷器,发射器

图 3:透明玻璃为QC位
位于活塞上方方块的五个毗邻位置(排除了活塞自身)时,活塞也可以被激活,即使活塞的上方根本没有机械元件或红石导体(即便在上方方块是空气时也仍然有效)。这五个位置被称为非常规激活位,或称QC位。通过非常规激活位激活的方式称为半连接激活,或称非常规激活、QC位激活。

图 4:QC位激活演示
BUD活塞
图 5:NC激活检测
一个被 QC 激活的 bud 态活塞,即为一个 NC 更新检测器,这也是最常用的 NC 更新检测器
对于检测PP更新,最常用的就是游戏内自带的侦测器,更多的方块更新感应器,详见Wiki:https://zh.minecraft.wiki/w/Tutorial:%E6%96%B9%E5%9D%97%E6%9B%B4%E6%96%B0%E6%84%9F%E5%BA%94%E5%99%A8?variant=zh-cn