紅石粉更新研究報(bào)告【MC刨根問底#1】

基礎(chǔ)定義
連接性
概念:
該方向有紅石粉與源紅石粉相連接,包括玻璃下傳(有連接但不傳遞信號(hào)),不包括被方塊阻斷
紅石粉的更新:pp nc prepare
pp更新
常規(guī)pp更新:向毗鄰的西東北南下上6個(gè)方塊發(fā)出pp更新
prepare更新
1.19 22w13a 以前?- 紅石線放置、破壞、改變狀態(tài)時(shí),對(duì)它水平指向的任意方塊,若它不是另一個(gè)紅石線,則向它上下側(cè)的方塊(偵測器除外)發(fā)送PP更新。
1.19 22w13a 及以后?- 紅石線對(duì)斜上斜下的PP更新僅作用于其他紅石線。
——Minecraft WiKi - 紅石粉
性質(zhì)
prepare更新本質(zhì)上是:檢查方塊和狀態(tài)并進(jìn)行0~8次pp更新
更新流程
源紅石粉按照北東南西的順序依次進(jìn)行以下步驟:
檢查連接性,連接性成立則繼續(xù)
檢查該方向毗鄰方塊下方是否為偵測器,若不是偵測器,則向該方向毗鄰方塊下方發(fā)送pp更新
同2,其中方向變?yōu)樯戏?/p>
nc更新
流程
紅石粉執(zhí)行二階毗鄰更新:源紅石粉本身及其毗鄰的6個(gè)方塊作為7個(gè)更新源,各向西東下上北南六個(gè)方向發(fā)出總計(jì)6*7=42次nc更新
更新源順序
7個(gè)更新源的先后順序是基于紅石粉坐標(biāo)的哈希信息隨機(jī)排列的,其順序見下表。這些更新源有97%的概率被分為三組。

各組別內(nèi)的更新順序是固定的,但組別排列順序隨機(jī)。除此之外,還有一些其他的概率極低的排列選項(xiàng)。
總更新流程
受到nc更新
紅石粉受到nc更新時(shí)檢查自身能量等級(jí)
改變自身能量等級(jí) -> 周圍與自身有連接的紅石粉的最大能量值減一(即max-1)
發(fā)送prepare更新
發(fā)送pp更新
發(fā)送prepare更新
發(fā)送nc更新
受到pp更新
紅石粉受到pp更新時(shí)檢查自身連接狀態(tài)
改變連接狀態(tài)side
發(fā)送prepare更新
發(fā)送pp更新
發(fā)送prepare更新
常見“更新次數(shù)”解釋
“42次更新”
指的是紅石粉及其毗鄰的7個(gè)更新源發(fā)出的總計(jì)42次nc更新
“最多22次更新”
指的是紅石粉發(fā)出的兩次prepare更新(包含最多8*2=16次pp更新)及常規(guī)pp更新(6次)總計(jì)最多22次pp更新
感謝@Fanzhitianyu的源碼分析,并感謝@LazyAlienServer中所有幫助分析的成員