方块更新

发表时间: 2025-11-12 20:30:01

最后更新: 2025-11-12 20:30:01(1小时前)

本文标签: 方块机制

用户头像-Connie 等1名 热心馆友编辑完成

方块更新是我的世界的一种游戏内容

介绍

  1. 方块更新(Block Update)是一个在游戏中用于处理方块变化的机制。

  2. 由于计算机的性能并不能支持即时处理所有方块的状态,因而引入了方块更新这一机制。

  3. 当方块因例如实体动作或计划刻等因素发生变化时,它会通知其周围的方块,以便它们判断是否需要作出反应。

  4. 在Minecraft Java版中,方块更新主要有两种类型,分别是PP更新和NC更新。

Java版

一、 PP更新

  1. PP更新(Shape Update/Post-Placement Update[1])是游戏内最广泛的方块更新类型。
  2. 它用于方块的放置、修改和移除等各种方块变化中,执行改变方块的形状与检查附着性等操作。
产生
  1. 在《我的世界》中,方块的放置、修改或移除是产生方块更新(PP更新)的必要条件。

  2. 当一个方块进行放置、破坏或者其状态发生变化时,系统会依次向六个方向(西、东、北、南、下、上)传播这一更新。

  3. 有一些特殊方块或行为在产生PP更新时会表现出不同于常规的方式。

  4. 例如,当玩家放置时,PP更新会以床为中心,向周围十个方块扩散,这一过程会分两次进行,先是从床尾开始,再从床头进行,更新顺序依然遵循常规的PP更新规则。

  5. 潜影盒在开启或关闭时(区块未卸载的情况下)同样会产生正常的PP更新。

  6. 使用调试棒来改变方块状态并不会引发PP更新。

  7. 在生成下界传送时,其内部的下界方块不会触发PP更新。

  8. 除了常规的PP更新之外,还有一种特殊的更新类型,仅红石线会接收,这种更新被称为间接PP更新。

  9. 间接PP更新的产生条件与常规PP更新相似,在正常PP更新执行前后都会分别触发一次,除非特别说明,PP更新通常包含间接PP更新。

接收
  1. 当一个方块接收到红石信号(PP更新)时,它会以特定方式响应,所有附着性方块在此情况下需确认是否能稳固地附着于相邻方块。

  2. 若附着条件不满足,则这些方块将尝试掉落为物品,或者设定一个延迟为1游戏刻(约0.05秒)的计划,导致其转变为物品。

  3. 这种行为的检查仅限于更新信号传播的方向,如果方块A紧贴北面的其他方块,来自其他方向的红石信号不会影响方块A的附着。

  4. 具备层或流体性质的方块在接受红石信号时,会向自身添加流体的延迟计划。

  5. 含水栅栏会首先增加液体的延迟计划,然后再进行形状更新。

  6. 可以相连的方块,如箱子栅栏和绊线,会检视是否与更新传播方向上的方块连接。

  7. 多方块组成的结构,比如和门,会检查其组合的完整性;若发现不完整,方块会尝试掉落为物品

  8. 如果更新源不在多方块结构的作用范围内,该结构不会对此红石信号做出反应。

  9. 对于珊瑚类方块,它们会检查周围水的存在,一旦没有水,会设置60游戏刻(3秒)至99游戏刻(4.95秒)的延迟。

  10. 气泡柱会检视自身是否需要更新,若需更新,会加入5游戏刻(0.25秒)的延迟。

  11. 营火在接收下方红石信号时,会检查是否转变为信号

  12. 混凝土粉末会尝试进行固化。

  13. 耕地和草径在接收到上方红石信号后,会判断是否需要退化,若有可能则添加1游戏刻(0.05秒)的延迟。

  14. 受重力影响的方块如沙子沙砾,会进行支撑检查,若无法被支撑将设置计划刻延迟转变为下落方块。

  15. 树叶设定1游戏刻(0.05秒)的延迟来检查与原木的距离,若距离不符会调整状态。

  16. 岩浆块灵魂沙接收来自上方的红石信号,如果上方有水,则会添加20游戏刻(1秒)的延迟,生成气泡柱。

  17. 音符盒在收到上下方的红石信号时,会尝试更改乐器类型。

  18. 侦测器在非激活状态下接收到来自面对方向的红石信号时,会添加2游戏刻(0.1秒)的延迟以产生红石信号。

  19. 红石线、红石中继器红石比较器在收到来自下方的信号时,会检查附着情况。

  20. 红石中继器还会检视来自侧方和上下方方块的信号以判定锁定状态。

  21. 脚手架接收红石信号时,会设置1游戏刻(0.05秒)的延迟。

  22. 草方块和菌丝在接收到上方红石信号后会检查是否转变为积状态。

  23. 在发生间接红石信号更新时,若红石线方块水平指向的方块不是红石线,则会额外向上下方的红石线传播信号,以更新斜下方的红石线状态。

  24. 活塞头在收到来自后方的红石信号时,会检查是否可以找到对应的活塞,若未找到,则会立即销毁自身。

二、 NC更新

  1. NC更新(Neighbor Changed Update)是最广为人知的方块更新,主要用于红石元件。
产生
  1. 与PP更新类似,NC更新的流程也依赖于方块的放置、变化或移除,这其中方块实体的改变也可能触发NC更新。

  2. 为便于理解,本文引入“更新核”和“二阶更新核”的概念:若某方块被视为更新核,则它会向其周围的西、东、下、上、北、南方向(或特定方向除外)传递NC更新。

  3. 二阶更新核则相当于该方块及其近邻六个方块同时被视为更新核。在进行更新传播时,首先会处理本方块的NC更新,随后依次处理中、下、北、南、西、东各方向的更新核。

  4. 大多数情况下,当方块被放置、移除或者状态更新时,都会以自身作为更新核,按西、东、下、上、北、南的顺序传递NC更新。

  5. 但有些方块和行为不会引起NC更新,例如使用调试棒改变方块状态、铁砧的损坏、大型垂滴叶片的倾斜等。

  6. 其他不引起NC更新的行为还包括酿造台药水数量的变化、气泡柱的生成和消失、植物类方块的生长等。

  7. 另外,诸如门、活板门的开启与关闭、龙蛋的传送、草方块转变为积等情形,也同样不引发NC更新。

  8. 一些方块在发生NC更新的行为上与一般情况有所不同,诸如压力板按钮等激活状态变化时会以自身及附属方块产生NC更新。

  9. 特殊情况下,红石火把、红石中继器和比较器在不同状态下也会引发不同的NC更新行为,具体依赖其周围方块的状态。

  10. 红石线在变化模式时,更新逻辑相对复杂,包含了对相邻方块的遍历与状态确认等一系列过程。

  11. 在特定情况下,例如红石信号变化,红石线会以其所在方块为二阶更新核来传播NC更新,并对相邻方块及红石导体进行一系列的响应。

  12. 此外,触发比较器更新的方块在变化或被破坏时,同样会在NC更新之外产生额外的信号更新。

  13. 最后,确保方块间的互动与更新机制的精确性是Minecraft游戏体验的重要组成部分。

 
 
接收
  1. 在接收块更新时,方块会表现出不同的行为。
  2. 铁轨类方块会检测其激活状态并检查与其他方块的附着情况。
  3. 液体方块在条件允许的情况下,会在各个方向上进行流体传播。
  4. 命令方块状态更新时,如果已被激活,它会为执行命令延迟1个游戏刻(相当于0.05秒)。
  5. 结构方块则会执行其预定的特定操作。
  6. 的状态在被激活时会更新,并且会发出相应的声音。
  7. 音符盒同样会在激活后发出声音。
  8. 大型垂滴叶在接收到红石信号后,其倾斜程度将被重置。
  9. 门、活板栅栏门在接收更新时会改变化状态以打开或关闭。
  10. 如果活板门含水且状态发生变化,则将额外添加流体传播的计划刻。
  11. 红石中继器和红石比较器会检查附着情况并尝试更新它们的输出信号。
  12. 投掷器发射器在状态切换时,会在被激活后添加4个游戏刻(0.2秒)的延迟以进行投掷或发射操作。
  13. 红石灯处于关闭且有红石信号的情况下,会延迟4个游戏刻(0.2秒)后点亮;若红石灯亮且周围无红石信号,则会立即熄灭。
  14. 红石火把若没有计划刻且当前输出状态与正常状态不一致,则会增加2个游戏刻(0.1秒)的延迟以切换状态。
  15. 红石线的更新将导致红石信号的变化以及附着情况的检查。
  16. 霜冰在条件适合时会尝试融化。
  17. 漏斗会尝试更新自身的启用状态。
  18. 海绵会尝试吸收周围的分。
  19. TNT在接收到红石信号时会被激活。

三、 更新优先级

  1. 在Minecraft中,PP更新和NC更新的执行顺序是有规律可循的。

  2. 一般情况下,当玩家放置、破坏或修改方块时,会按照特定流程进行操作。

  3. 首先,会更改子区块内的方块状态,随后更新高度图。

  4. 接着,系统调用被替代方块状态的破坏行为和替代方块状态的放置行为。

  5. 在此之后,方块的实体信息会被更新,接着会产生NC更新与比较器更新,最后再产生PP更新。

  6. 不过,对于大多数非正常NC更新行为的方块,其NC与PP更新的顺序会有所不同。

  7. 例如,当压力板侦测器红石火把切换激活状态时,它们会首先产生PP更新,随之产生NC更新;而在被破坏时,则会优先执行非正常的NC更新,后续流程仍然按照常规进行。

  8. 针对按钮拉杆讲台避雷针幽匿感测体绊线钩,当它们切换激活状态时,会在正常更新流程后额外进行一次NC更新;在被破坏时,同样先执行非正常的NC更新,之后再进行通常的更新流程。

  9. 铁轨类方块在激活状态切换时,会优先执行原状态破坏所产生的非正常NC更新,然后再进行正常的更新流程。

  10. 在红石信号切换点或十字形状时,系统会先执行上述正常流程,然后再产生非正常的NC更新,在其他情况中,红石线则会先进行PP更新,后进行NC更新。

  11. 红石中继器红石比较器在接收到NC更新时,如下方无支撑会按照正常流程执行更新后再进行非正常的NC更新。

  12. 唱片机在其状态has_record变化时,会首先产生PP更新,随后才产生NC更新。

  13. 有些方块在进行破坏或放置时,会自我更新其方块状态,这种现象称为自更新。

  14. 自更新的过程中,内部设置方块状态的更新流程与正常一致,却会在产生NC更新之前结束。

  15. 例如,当玩家放置漏斗时,如果周围有红石信号,漏斗会自我修改激活状态,此更改不会引发NC更新,最终只会产生PP更新,而忽略了外层的NC更新和PP更新。

四、 更新传播

  1. 在Minecraft中,方块更新的传播机制主要依赖于深度优先搜索的算法。
  2. 当某个方块产生更新时,它会将该更新或更新核推入一个栈中,并相应地增加更新计数。
  3. 系统将持续执行以下操作,直到栈或待更新列表为空:
  4. 如果待更新列表不为空,系统会按照添加的时间从最新到最旧的顺序将其内容压入栈中,然后清空待更新列表。
  5. 接下来,将重复以下步骤,直至待更新列表中仍有内容:
  6. 执行栈顶的更新或更新核,而此更新核在一个方向上只能执行一次,所以通常需要进行5至6轮才能完成所有更新。
  7. 在这个过程中,可能会产生新的更新或更新核,这些新产生的内容会被加入待更新列表,并增加更新计数。
  8. 当更新计数超过服务器配置文件中设定的最大连续邻居更新数量时,后续的更新或更新核将被忽略,但已添加的更新仍会被执行。
  9. 如果栈顶的更新或更新核已完成执行,该项将从栈中弹出,以结束内部循环。
  10. 一旦所有更新计算完成,系统将重置存储更新的栈和待更新列表,并将更新数量归零。
  11. 如果最初导致更新的方块是邻接更新核,并且在更新过程中未发生异常,即便更新数量超过了最大值,更新核中的六个方块仍将会被更新。
📑
🤔
⬆️