活塞

发表时间: 2025-11-06 15:22:40

最后更新: 2025-11-10 13:47:02(2天前)

本文标签: 机械元件

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

活塞是我的世界中的一种红石方块,可以通过合成获得。

属性

活塞

活塞

我的世界百科活塞属性配图

黏性活塞

我的世界百科活塞属性配图

合适挖掘工具
硬度 1.5
爆炸抗性 1.5
窒息生物 收回时:是;伸出时:否
红石导体
固体方块 (固体方块 (JE)
固体方块 (BE)
材料固体方块 (BE)
活塞推动行为 收回时:可推动,可拉动;伸出时:不可推动,不可拉动
乐器 竖琴/钢琴
地图基色 #707070
方块ID piston
活塞(物品属性)
创造标签页(JE) 红石方块
创造分类(BE) 物品
最大堆叠 64
可再生
物品ID piston

介绍

  1. 活塞(Piston)是一种在收到红石信号激活后,能够推动大多数方块和实体的块状物体。
  2. 相较于普通活塞,黏性活塞(Sticky Piston)具备相似的功能,但在红石信号停止后,它还能够将被移动的方块拉回原位。
  3. 当活塞被放置时,其朝向始终指向玩家的位置。
  4. 附着性方块如拉杆可以放置在活塞或黏性活塞的顶部,而无法置于激活的活塞的侧面(仅限于Java版)。
  5. 初始化活塞后,活塞头的木质表面会在激活延迟之后尝试伸出,进而推动前方的方块;而当活塞失去激活状态时,活塞头则会被收回。
  6. 在使用黏性活塞时,活塞头在收回时同时会试图将前方的方块一起拉回。
  7. 需要注意的是,黏性活塞仅在收回时表现出黏性,因此在静止状态下,它头上的方块不会被吸附。

生成

  1. 普通的活塞不会生成在世界中。

一、 自然生成

  1. 丛林神庙中会自然生成3个黏性活塞。
  2. 远古城市中心的红石地下室里会自然生成5个黏性活塞。

获取

一、 合成

名称 材料 合成配方
活塞 任意木板 +
圆石 +
铁锭 +
红石粉
我的世界百科活塞获取配图
黏性活塞 黏液球 +
活塞
我的世界百科活塞获取配图

破坏

  1. 在《我的世界》中,挖掘活塞、黏性活塞以及活塞头时,最有效的工具是镐。

  2. 需要注意的是,处于移动状态的活塞无法被玩家破坏。

  3. 当活塞或黏性活塞被破坏时,它们会掉落自身,并且如果伸出状态下有活塞头,也会同时破坏该活塞头。

  4. 一旦活塞头被破坏,正在伸出的活塞在进行方块更新后也将遭到毁坏。

  5. 另一方面,若移动的活塞被破坏,它将掉落所对应的方块。

方块 我的世界百科活塞破坏配图活塞
我的世界百科活塞破坏配图黏性活塞
我的世界百科活塞破坏配图活塞头
我的世界百科活塞破坏配图移动的活塞
硬度 1.5 -1
工具 我的世界百科活塞破坏配图
挖掘时间
徒手 2.25
我的世界百科活塞破坏配图木质 1.15
我的世界百科活塞破坏配图石质 0.6
我的世界百科活塞破坏配图铜质 0.45
我的世界百科活塞破坏配图铁质 0.4
我的世界百科活塞破坏配图钻石 0.3
我的世界百科活塞破坏配图下界合金质 0.25
我的世界百科活塞破坏配图金质 0.2

 

用途

一、 红石元件

激活
  1. 活塞是一种机械组件,玩家可以通过多种方式激活它。
  2. 活塞可以被与其面对面相邻的开启电源激活,但有例外情况,例如红石火把并不能点亮附着的活塞。
  3. 此外,活塞还可以被与其相邻的充能方块激活。
  4. 红石中继器红石比较器或红石粉等导体,如果与活塞相邻并指向它,也可用于激活该活塞(在Java版中,活塞正上方的红石粉也算在内)。
  5. 需要注意的是,未指向活塞的红石粉只能在Java版中激活,而在基岩版中,则可主动指向并激活活塞。
  6. 在Java版中,活塞还可以借助半连接性来触发。
  7. 如果活塞正上方的方块满足激活条件(即便没有红石元件,空气方块或非红石导体均可),其在接收到方块更新时将被激活。
  8. 在基岩版中,如果信号在电容器更新阶段前存在,但在更新阶段被取消,该信号将无法激活活塞。
  9. 需要指出的是,活塞本身并不是红石导体,因此无法被充能。
行为
  1. 活塞被激活或取消激活后会在启动延迟后推出或拉回。
  2. 在基岩版中,活塞正在推拉时不响应输入变化。

二、 启动延迟

  1. 活塞在被激活或者解除激活后,通常不会立即开始推拉动作,其中的延迟称为启动延迟。
  2. 在《我的世界》基岩版中,启动延迟是固定的,为2个游戏刻(0.1秒),也就是说,在输入变化发生后的第2个游戏刻开始执行推拉动作。
  3. 而在Java版中,启动延迟的长度则取决于活塞输入变化发生于游戏计算的哪个阶段。
  4. 如果活塞的输入变化发生在计算计划刻、区块刻或方块事件阶段(即在方块事件阶段之前或同时发生),那么活塞事件将在此次游戏刻的方块事件阶段被执行,此时启动延迟为0个游戏刻(0秒),也被称为“同刻启动”。
  5. 反之,如果活塞的输入变化发生在计算实体、方块实体或玩家运算阶段(即在方块事件阶段之后),那么活塞事件需要等待下一游戏刻的方块事件阶段后才能执行,此时启动延迟为1个游戏刻(0.05秒),称为“下一刻启动”。

三、 移动方块结构

  1. 工作中的活塞可以推动或拉动方块,从而使这些方块以及与其关联的方块随之移动。

  2. 方块在以下情况下会被尝试推动:当其位于即将推出的活塞前方,或者当其位于另一方块的移动方向前方。

  3. 方块会在以下情况下被尝试拉动:当其位于黏性活塞前方,或者当其处于即将移动的黏液块蜂蜜块的侧方或后方。

  4. 如果一个方块同时符合推动和拉动的条件,则该方块被视为可以被推动。

  5. 方块在被推或拉的过程中,会展现出不同的行为特征。

  6. 根据其性质,方块可以被分类为:既可推动又可拉动、可推动但不可拉动、被推动时会被破坏且不可拉动,以及不可推动与拉动。

  7. 在活塞伸出、收回或已经伸出的状态下,活塞自身是无法推动或拉动方块的,但在其尚未伸出时则可以。

  8. 黏液块和蜂蜜块之间不能相互拉动。

  9. 在Java版中,所有方块实体都无可推动或拉动的能力。

  10. 活塞所推动或拉回的方块结构称为移动方块结构,特定的原理图会用星号标记出活塞推送方块时的移动方块结构。

  11. 移动方块结构受到多重条件的制约,在特定情况下,活塞或黏性活塞将无法推动或拉动方块。

  12. 例如,当移动方块结构中的方块数量超过12个时,黏性活塞将无法拉动方块,尽管可以收回活塞头。

  13. 另外,如果移动方块结构的移动方向前方存在不可推动的方块,活塞也将无法进行推动。

  14. 在进行移动时,附着在这移动方块结构上的附着性方块会被销毁,而推动的破坏方块也会遭到破坏,整个结构将进入移动状态。

  15. 一般情况下,移动方块结构将在2个游戏刻(约0.1秒)后到位,之后恢复为普通方块状态。

  16. 在Java版中,当黏性活塞接收到少于3个游戏刻(即0.15秒)的信号时,将会在下一个方块事件阶段开始收回,并且该方块将会立即到位。

  17. 在这种情况下,黏性活塞无法完整地推拉结构。

  18. 推出和拉回方块的过程中,活塞会发出声音,这种声音在以活塞为中心的31×31×31区域内均可听见。

活塞推拉行为列表
方块 Java版行为 基岩版行为
不可推动或拉动
不可推动或拉动 可推动或拉动
  • 我的世界百科活塞用途配图我的世界百科活塞用途配图大箱子
可推动或拉动,但会被拆分成两个箱子
推动到位后若没有被别的方块支撑则会被破坏并掉落为物品;不可拉动
推动时会被破坏,当可掉落为物品时会掉落为物品;不可拉动
可推动或拉动 可推动,不可拉动
推动时会被破坏,当可掉落为物品时会掉落为物品;不可拉动 不可推动,不可拉动
可推动,不可拉动
可推动或拉动;在沿Y轴拉动时会被破坏并掉落为物品
推动时会被破坏,当可掉落为物品时会掉落为物品;不可拉动 可推动或拉动
推动时会被破坏,当可掉落为物品时会掉落为物品;不可拉动
不可拉动;仅在下落状态时可被推动。 可推动或拉动,但下方没有方块支撑时会下落而非黏在黏性活塞上
可推动或拉动,但在下方没有方块支撑时会下落而非黏在黏性活塞上
可推动或拉动,但在下方没有方块支撑时会被破坏并掉落为物品
  • 我的世界百科活塞用途配图允许方块
  • 我的世界百科活塞用途配图拒绝方块
  • 我的世界百科活塞用途配图边界
N/A 不可推动或拉动
可推动或拉动
推动时会被破坏,当可掉落为物品时会掉落为物品;不可拉动
不可推动或拉动 N/A

 

四、 推动实体

  1. 在Minecraft中,当一组方块组成的结构正在移动时,这些方块会对其周围的实体施加推力,使得这些实体跟随方块的移动。

  2. 如果某个实体被推后无法沿着移动的方向前进, mover的方块可能会将其推进。

  3. 特别地,如果推动的方块是窒息方块,那么在与生物接触时,可能会导致生物窒息致死。

  4. 虽然大多数实体都可以被推动,但是某些实体类型,如区域效果云、将Marker设置为true的盔甲架展示实体交互实体以及标记(仅适用于Java版),则不受推动影响。

  5. 需要注意的是,被活动的黏液块推动时,实体会以更快的速度被弹开。

技术性组件

一、 活塞头

  1. 活塞头(Piston Head),又被称为活塞臂,是一种技术方块,属于已经伸出状态的活塞。

  2. 在《Minecraft》的Java版中,活塞头无法通过常规方式放置,只能借助/setblock指令或调试工具放入游戏中。

  3. 此外,Java版中并没有专对应的活塞头方块物品。

  4. 相较之下,在基岩版中,玩家可以通过命令/give @s pistonarmcollision和/give @s stickypistonarmcollision分别获取活塞头和黏性活塞头的方块物品。

  5. 当活塞头的后方受到区块更新影响时(仅限Java版)或相应的更新(仅限基岩版),它会检查后方是否与对应的活塞正确相连。

  6. 如果活塞头与活塞未正确连接,或者方向不符,活塞头将迅速被摧毁,并且不会掉落任何物品。

  7. 一旦活塞头被消除,它所对应的活塞也会被销毁,并掉落相关的物品。

  8. 在Java版中,活塞头的状态由一个方块状态定义,区分普通活塞头和黏性活塞头,而在基岩版中,这两种类型则是通过不同的ID加以识别。

活塞头
活塞头
我的世界百科活塞技术性组件配图

Java版

我的世界百科活塞技术性组件配图

基岩版

黏性活塞头
我的世界百科活塞技术性组件配图

Java版

我的世界百科活塞技术性组件配图

基岩版

合适挖掘工具
硬度 1.5
爆炸抗性 1.5
窒息生物
红石导体
固体方块 (JE)
固体方块 (BE)
材料固体方块 (BE)
活塞推动行为 不可推动,不可拉动
乐器 竖琴/钢琴
地图基色 #707070
方块ID Java版:piston_head;基岩版:活塞头 piston_arm_collision;黏性活塞头:sticky_piston_arm_collision

二、 移动的活塞

  1. 移动的活塞(Moving Piston)在Java版中被称为移动的活塞,而在基岩版则称为移动的方块(Moving Block),其编号为36号方块(Block 36)。

  2. 作为一种技术性方块,移动的活塞无法被玩家直接获取,它在活塞的推拉操作中起到了替代正在移动方块的功能。

  3. 在活塞操作时,方块需在网格之间移动,因此不可能被当作普通方块存储。

  4. 当活塞拖动方块时,会将活塞自身以及被推动的方块替换为“移动的活塞”,同时原有方块的数据会保存在方块实体中。

  5. 一旦活塞推拉动作完成,移动的活塞会恢复为最初的方块状态。

  6. 在Java版中,移动的活塞没有相应的方块物品,使用命令生成的移动的活塞不会创建方块实体,因此该状态不会自动转变为常规方块。

  7. 移动的活塞的特性包括:虽然该方块本身不可见,但其方块实体会以存储的方块的移动动方式渲染并可见。

  8. 移动的活塞没有自身的碰撞箱,而是根据存储的方块的碰撞箱位置来改变。

  9. 此外,它没有轮廓箱,这意味着玩家无法选中该方块。

  10. 在没有使用命令的情况下,该方块只能被爆炸摧毁,其爆炸抗性值为0,且与所存储方块的抗性无关。

  11. 这意味着某些本身抗爆的方块在被移动时如果受到爆炸影响,也会因为移动的活塞的抗性为0而被破坏。

  12. 移动的活塞是不可替换的方块,玩家无法在它的位置直接放置其他方块。

  13. 玩家踩上移动的活塞时,会发出与石头相似的声音,这与所存储的方块没有关联。

  14. 其他的固体方块有所不同,移动的活塞在Java版中不能使耕地转变为泥土

  15. 同时,移动的活塞也不能完全继承其代表方块的特性,例如,在被活塞推动的瞬间,发光方块会短暂变暗,而光照不透明的方块在移动时则能透光。

移动的活塞
我的世界百科活塞技术性组件配图
合适挖掘工具
硬度 -1
爆炸抗性 0
窒息生物
红石导体
固体方块 (JE)
固体方块 (BE)
材料固体方块 (BE)
活塞推动行为 不可推动,不可拉动
乐器 Java版:竖琴/钢琴;基岩版:底鼓
地图基色 #707070
方块ID Java版:moving_piston;基岩版:moving_block

 

活塞移动细节

一、 Java版

创建移动方块结构
  1. 当活塞或黏性活塞执行推出或收回时,系统将以活塞前方的方块作为创建移动方块结构的“起始点”,并对此结构进行递归计算,以确定其可移动性及移动时会破坏哪些周围方块。

  2. 创建移动方块结构的过程首先需要确定移动方向,若活塞正在推出,该方向与活塞相同;若活塞在收回,则方向则为其反向。

  3. 接着,系统会生成一个移动列表和一个破坏列表,前者用于储存将会移动的方块,后者则记录在移动开始时将被破坏的方块。

  4. 如果起始点恰好是一个正在被推动及破坏的方块,而活塞又是在推出状态,则该方块会被加入破坏列表,创建移动方块结构的过程会随即停止。

  5. 然后,系统会从起始点向后(即移动方向相反的方向)查找可被拉动的方块,并依次编号添加至移动列表中,直到遇到空气或要移动的活塞本身为止。

  6. 若在查找过程中,移动列表的大小超过12,则该过程会被中止,表明整个结构无法移动。

  7. 接着,系统会从起始点向前(移动方向)查找方块,依次编号并添加入移动列表,直到遇到空气、即将移动的活塞、推动破坏的方块、不可推动的方块或已经存在于移动列表中的方块。

  8. 如果在查找中移动列表的大小超过12,同样会中止创建移动方块结构,整个结构将无法移动。

  9. 在查找到推动破坏的方块时,若中止查找,则会将该方块加入破坏列表。

  10. 若查找中碰到不可推动的方块或即将移动的活塞自然而然地中止,说明整个移动方块结构被阻挡,创建过程将停止,整个结构无法移动。

  11. 如果查找到的方块已存在于移动列表中且中止查找,这意味着当前移动列表的元素顺序存在问题,需要将新计算的方块插入到导致查找中止的方块之前。

  12. 最后,按移动列表内方块的顺序逐个遍历这些元素(包括在循环中新增的方块),需要检查每个方块是否为黏液块或蜂蜜块;若不是,则不再进行后续分支的创建;若是,则执行相关流程。

  13. 在此过程中,会尝试按照下、上、北、南、西、东的顺序添加分支,若当前方向为推动方向或其反向,则不创建该方向的分支。

  14. 若对应方向上的方块不可拉动(包括黏液块蜂蜜块之间互不拉动),同样不创建此方向上的分支。

  15. 以对应方向的方块为新的起始点,重复执行前面提到的步骤。

  16. 当遍历结束后,移动列表和破坏列表将被完整填充,移动方块结构的创建过程也就此完成。

  17. 从这一流程可以看出,活塞移动方块结构内的编号是按照移动方向逐个递增的;在与移动方向垂直的视角下,离活塞越近的方块,其编号则越小。

产生更新
  1. 当活塞开始伸展或收缩时,它会以特定的顺序与移动方块结构进行方块更新

  2. 如果活塞没有伸出,但接收到红石信号,活塞则会被激活并尝试推出方块;若无法推出,则不会产生更新。

  3. 此过程中会计算移动方块结构,生成移动列表和破坏列表。

  4. 在破坏列表中,方块将按照逆序被破坏,此过程不会引起NC更新和PP更新。

  5. 然后在移动后的位置逆序放置移动的活塞方块,并保存相关信息,此步骤同样不会产生NC更新。

  6. 活塞还需在其头的位置生成移动的活塞,记录活塞头信息,此过程同样不引发NC更新。

  7. 对于留下的“空位”,依据位置的哈希码从小到大进行排序,并将其设置为空气,这一过程同样不引起NC更新和PP更新。

  8. 设置完成后,将再次按照该顺序遍历这些方块以产生PP更新;位置的哈希码计算公式为x + 31y + 961z,并取最后32位有符号整数。

  9. 随后,对于破坏方块列表中的方块,将逆序产生间接PP更新和NC更新,并在移动方块列表中逆序产生NC更新,最后在活塞头位置产生NC更新。

  10. 移动准备过程结束后,活塞会更新自身方块状态,并产生NC更新和PP更新。

  11. 若活塞已经伸出但当前没有红石信号,则会取消激活并尝试收回;如果活塞头位置为移动的活塞方块实体,则会立即到位。

  12. 此时会设置自身状态为移动的活塞,不引发NC更新和PP更新,接着添加方块实体,产生NC更新和PP更新。

  13. 若活塞为普通活塞,则将活塞头位置设置为空气,并引发NC更新和PP更新,完成移动准备。

  14. 如果活塞为黏性活塞,则需要检查相应方向前方的第二格方块(即可能被黏性活塞拉回的方块)。

  15. 如果该方块是移动的活塞方块实体,且方向与黏性活塞相符并处于推出状态,其将立即到位。

  16. 若该方块不是满足条件的方块,将检查前方方块是否为移动的活塞方块实体:若是,并且方向与黏性活塞一致,且推动进度小于一半或者刚刷新过,将在活塞头位置设为空气,产生NC更新和PP更新,未拉回任何方块。

  17. 若都不满足条件,则需检查前方的第二格方块是否为黏性活塞所能拉动的方块(但不检查移动方块结构)。

  18. 如果该方块不可以拉动,则将活塞头位置设为空气,并产生NC更新和PP更新。

  19. 若该方块是可拉动的,并且移动方块结构也可以被拉动,则与之前的推出过程类似,创建移动列表和破坏列表,并进行相应的NC更新和PP更新。

  20. 如果该方块可以拉动,但移动方块结构无法被拉动,则仅将活塞头位置设为空气,不产生任何更新。

到位
  1. 在Minecraft的方块移动机制中,当一个活塞方块被移动时,其状态将经历两次游戏刻的计算。

  2. 如果将活塞开始伸出的游戏刻标记为第0刻,那么普通到位的过程会在第2刻的方块实体阶段被激活。

  3. 如果在活塞移动的过程中活塞被破坏,那么该方块会立即进入到位状态。

  4. 普通到位的流程首先会删除方块实体,并检查当前方块是否为活动的活塞,如果不是,则停止流程。

  5. 接下来,系统会验证内部的方块在到位后是否能够附着于当前方块上,并正确调整方块的形状,这一过程相当于周围六个方块对该方块的PP更新。

  6. 如果检查没有通过,则会将当前方块的位置设置为目标方块,并完成过程,这一过程不会产生NC更新和PP更新,最后再产生NC更新和PP更新。

  7. 若检查通过,系统将清除目标方块的含水状态,并将当前位置设定为目标方块,这一过程会产生NC更新和PP更新,随后再次对当前位置进行一次NC更新。

  8. 瞬间到位的操作流程同样是删除方块实体并检查当前方块是否为活动的活塞,若不是,则终止此流程。

  9. 如果当前方块是活塞或活塞头,它将立即被设置为空气,这一过程会产生NC更新和PP更新,并再次接收一次NC更新。

  10. 如果当前方块不是活塞,则目标方块将被转换为最终目标块,同时执行关于周围六个方块的PP更新来检查方块的有效性。

  11. 随后,系统将当前位置设置为最后目标方块,这一过程会产生NC更新和PP更新,并再次对当前位置进行一次NC更新。

  12. 普通到位和瞬间到位之间的主要区别在于是否清除方块的含水状态,普通到位时会清除而瞬间到位则不会。

二、 基岩版

活塞方块实体更新
  1. 当活塞被放置后,会在首次更新时初始化一系列参数,包括活塞头的位置和推出的方向,并发送相关通知。

  2. 在首次更新完成后,活塞的代码状态在被删除之前将保持不变,不会再执行初始化过程。

  3. 活塞的行为会依赖于红石信号的状态和自身的推出状态,并进行相应的计算。

  4. 如果活塞的推出状态为1(表示需要推出),系统将调用相应的检查函数以确认是否可以顺利推出。

  5. 如果检查结果为0,则表明推出失败,此时函数会直接结束,不会进行后续操作。

  6. 活塞的红石状态与推出状态会进行同步调整。

  7. 接着,会调用主函数以执行活塞推出方块及破坏方块的相关行为。

  8. 在这一过程中,活塞的六个面会收到更新通知,以确保状态得到及时同步。

  9. 如果活塞的推出状态为2,则将执行每个位置的方块转化处理,确保移动方块正确转换。

  10. 对于状态为3(表示需要收回)的活塞,将执行与状态4相似的操作,额外包含删除方块的位置的步骤。

  11. 收回方块的处理方法与推出方块的处理相似,确保活塞的状态得到正确反映。

活塞推出检查
  1. checkattachedblocks函数的主要作用是判断活塞是否能够推送相应的方块。

  2. 这个函数的工作内容不仅包括位置和方向的计算,还涉及到事件的传播和内存的释放,它会调用真正负责检查的函数pistonblockactor::attachedblockwalker。

  3. 在递归检查时,函数会遍历所有可能的位置,识别能被活塞推送或破坏的方块并将其添加到一个列表中。

  4. 为了进行检查,函数需要接受几个参数,包括一个方块实体对象、一个blocksource对象以及正在检查的方块的三维坐标向量,还有两个指针。

  5. 在已经加入列表的方块中,如果参数中的三维坐标已经存在,函数将会提前返回1。

  6. 函数还需计算目标方块移动后是否超出了高度限制。

  7. 此外,它会判断活塞的坐标与正在检查的坐标之间是否满足特定的关系,并检查该坐标是否为正在移动的方块。

  8. 对液体方块进行处理也是该函数的一个重要步骤。

  9. 若在当前检查的位置上存在其他方块实体,函数将检查这些实体是否可以移动。

  10. 如果检测到该位置为空气,函数会继续进行检查。

  11. 液体方块仍需再次处理,以确保准确性。

  12. 导致函数自身再次调用attachedblockwalker,若返回值为0,表示无法推送,函数将相应地返回0。

活塞推出方块主函数
  1. 调用pistonblockactor::sortattachedblocks函数排序方块推出列表中的方块。
  2. 检查列表是否过长以至于溢出。
  3. 生成一个random对象,也就是处理随机数的,用于处理活塞推方块掉落物品
  4. 遍历破坏列表里的方块,生成破坏后的掉落物并破坏方块。
  5. 遍历移动列表里的方块,对每个遍历到的坐标执行pistonblockactor::spawnmovingblock函数。
  6. 一些检查,释放内存。

活塞移动方块函数

  1. 在进行方块移动的过程中,首先需要判断被移动方块是否存在方块实体,并确认其是否为“2LL”类别的实体,通常指容器类型。

  2. 若存在这种方块实体,应强制关闭其连接,尤其是当该方块是大型箱子时。

  3. 此外,还需检查相关成就,以确定是否满足特定条件。

  4. 如果被移动的方块为空气并包含“19LL”类的方块实体,则可以将该方块实体中的方块直接替换为目标位置的方块,注意此过程不会触发区块更新。

  5. 接着,需构建一个新的移动方块并将其放置于目标位置。

  6. 在有方块实体的情况下,需要记录该方块实体的两个值到另外的变量中,并将其自身的值重置为0,以便于与移动状态相对应,同时移除该方块实体。

  7. 如果没有方块实体,仍需执行删除方块实体的操作,以确保在该位置的清理。

  8. 如果在新建的移动方块位置上未能成功创建所需的方块实体,则直接跳至流程末尾,删除原位置的方块。

  9. 处理活塞移动时的一些特殊情况时,如果被移动的方块包含其他方块,并且这些方块不具备“0x2000000L”的性质(例如液体方块),则应将它们一并移动,并记录到新的移动方块中。

  10. 最后,发送通知,并调用新生成的移动方块函数,以移动可能碰撞到的实体,随后删除原位置的方块。

活塞处理方块转方块函数

  1. 首先,需检查活塞的当前状态,如果状态不是0或2,则需要进行方块的转换操作。

  2. 接下来,要遍历活塞所推动的方块列表,以了解具体的信息。

  3. 在遍历过程中,检查每一个正在处理的方块,确认其是否为被移动的方块。

  4. 如果被推动的方块包含液体类型的方块,还需进一步检查其周围是否有其他液体方块,并据此处理连接的渲染状态。

  5. 最后,将被移动方块所包含的额外方块(extrablock)进行放置处理,从而完成方块的移动操作。

移动的方块实体更新函数

  1. 作为方块实体类的子类,调用blockactor::tick。
  2. 判断自身记录的方块是否为移动的方块(也就是被移动的movingblock),若是,则把记录的movingblock直接替换成空气,它的extrablock也会被替换。
  3. 若检查自身记录的活塞位置没有活塞,则转方块。

数据值

一、 ID

Java版:

名称 命名空间ID 方块标签(JE) 本地化键名
我的世界百科活塞数据值配图 活塞 piston mineable/pickaxe
block.minecraft.piston
我的世界百科活塞数据值配图 黏性活塞 sticky_piston
block.minecraft.sticky_piston
我的世界百科活塞数据值配图 活塞头 piston_head
block.minecraft.piston_head
我的世界百科活塞数据值配图 移动的活塞 moving_piston dragon_immune
wither_immune
block.minecraft.moving_piston
名称 命名空间ID
我的世界百科活塞数据值配图 移动的活塞方块实体 piston

基岩版:

名称 命名空间ID 别名ID(BE) 本地化键名
我的世界百科活塞数据值配图 活塞 piston
tile.piston.name
我的世界百科活塞数据值配图 黏性活塞 sticky_piston
tile.sticky_piston.name
我的世界百科活塞数据值配图 活塞头 piston_arm_collision pistonArmCollision
tile.piston_arm_collision.name
我的世界百科活塞数据值配图 黏性活塞头 sticky_piston_arm_collision stickyPistonArmCollision
tile.sticky_piston_arm_collision.name
我的世界百科活塞数据值配图 移动的方块 moving_block movingBlock
tile.moving_block.name
名称 命名空间ID
我的世界百科活塞数据值配图 活塞方块实体 PistonArm
我的世界百科活塞数据值配图 移动的活塞方块实体 MovingBlock

二、 方块数据

描述
0x1
0x2
0x4
一个值范围0-5的3位二进制数,储存活塞朝向:
  • 0:活塞朝下
  • 1:活塞朝上
  • 2:活塞朝北
  • 3:活塞朝南
  • 4:活塞朝西
  • 5:活塞朝东
0x8 (未使用)

三、 方块状态

Java版:

方块 方块属性 默认值 接受值 描述
我的世界百科活塞数据值配图活塞
我的世界百科活塞数据值配图黏性活塞
extended false true 活塞已伸出
false 活塞未伸出
facing north north 方块朝向北方
east 方块朝向东方
south 方块朝向南方
west 方块朝向西方
up 方块朝向上方
down 方块朝向下方
我的世界百科活塞数据值配图活塞头 facing north north 方块朝向北方
east 方块朝向东方
south 方块朝向南方
west 方块朝向西方
up 方块朝向上方
down 方块朝向下方
short false true 活塞头较短,整体长1格
false 正常的活塞头,整体长1.25格
type normal normal 该方块属于一个普通活塞
sticky 该方块属于一个黏性活塞
我的世界百科活塞数据值配图移动的活塞 facing north north 方块朝向北方
east 方块朝向东方
south 方块朝向南方
west 方块朝向西方
up 方块朝向上方
down 方块朝向下方
type normal normal 该方块属于一个普通活塞
sticky 该方块属于一个黏性活塞

基岩版:

方块 方块属性 默认值 接受值 描述
我的世界百科活塞数据值配图移动的方块 无法获取到此方块的方块状态
我的世界百科活塞数据值配图活塞
我的世界百科活塞数据值配图黏性活塞
我的世界百科活塞数据值配图活塞头
我的世界百科活塞数据值配图黏性活塞
facing_direction 0 0 方块朝向下方
1 方块朝向上方
2 方块朝向南方
3 方块朝向北方
4 方块朝向东方
5 方块朝向西方
📑
🤔
⬆️