红石粉更新研究报告【MC刨根问底#1】
基础定义
连接性
概念:
该方向有红石粉与源红石粉相连接,包括玻璃下传(有连接但不传递信号),不包括被方块阻断
(相关资料图)
红石粉的更新:pp nc prepare
pp更新
常规pp更新:向毗邻的西东北南下上6个方块发出pp更新
prepare更新
22w13a 以前- 红石线放置、破坏、改变状态时,对它水平指向的任意方块,若它不是另一个红石线,则向它上下侧的方块(侦测器除外)发送PP更新。
22w13a 及以后- 红石线对斜上斜下的PP更新仅作用于其他红石线。
——Minecraft WiKi - 红石粉
性质
prepare更新本质上是:检查方块和状态并进行0~8次pp更新
更新流程
源红石粉按照北东南西的顺序依次进行以下步骤:
检查连接性,连接性成立则继续
检查该方向毗邻方块下方是否为侦测器,若不是侦测器,则向该方向毗邻方块下方发送pp更新
同2,其中方向变为上方
nc更新
流程
红石粉执行二阶毗邻更新:源红石粉本身及其毗邻的6个方块作为7个更新源,各向西东下上北南六个方向发出总计6*7=42次nc更新
更新源顺序
7个更新源的先后顺序是基于红石粉坐标的哈希信息随机排列的,其顺序见下表。这些更新源有97%的概率被分为三组。
各组别内的更新顺序是固定的,但组别排列顺序随机。除此之外,还有一些其他的概率极低的排列选项。
总更新流程
受到nc更新
红石粉受到nc更新时检查自身能量等级
改变自身能量等级 -> 周围与自身有连接的红石粉的最大能量值减一(即max-1)
发送prepare更新
发送pp更新
发送prepare更新
发送nc更新
受到pp更新
红石粉受到pp更新时检查自身连接状态
改变连接状态side
发送prepare更新
发送pp更新
发送prepare更新
常见“更新次数”解释
“42次更新”
指的是红石粉及其毗邻的7个更新源发出的总计42次nc更新
“最多22次更新”
指的是红石粉发出的两次prepare更新(包含最多8*2=16次pp更新)及常规pp更新(6次)总计最多22次pp更新
感谢@Fanzhitianyu的源码分析,并感谢@LazyAlienServer中所有帮助分析的成员
关键词: