模块方块

基本信息

属性 值
类 net.bdew.lib.multiblock.block.BlockModule[T <: TileModule]
父类 net.minecraft.block.Block
混入 trait HasTE[T] / ConnectedTextureBlock / BlockTooltip
构造参数 name、kind、material、TEClass、machines
源码行 multiblock/block/BlockModule.scala:26-34

功能

BlockModule 是多方块框架中可重复堆叠的功能模块方块基类。它的 kind 参数是该模块的类型标识 —— 配置段 Modules 与 Required 中的键即为 kind,因此同类模块方块可以在同一个结构中放置多个。

构造参数

参数 类型 作用
name String 方块注册名
kind String 模块种类标识,用于匹配 Modules / Required 配置项
material Material 传给 Block 父类的材质
TEClass Class[T] 绑定的 TileEntity 类(经 HasTE 混入后用于自动注册)
machines MachineManagerMultiblock 反查该模块可用于哪些控制器机器

连接判定

canConnect(BlockModule.scala:77-84)的实现刻意排除了「新结构互吸」的情况:只有当两个方块已经共享同一个 core 时才返回 true,否则两者都能判定对方可连接,从而在放置瞬间互相吸附成一个非法结构。判定条件为 me.connected.contains(target) 或 other.getCore == me.getCore,且 me.getCore.isDefined。

canPlaceBlockAt(BlockModule.scala:41-42)配合该规则:放置前用 Tools.findConnections(world, BlockRef(x, y, z), kind) 统计已连接的同 kind 模块,超过 1 个则拒绝。

连接纹理与图标

通过 ConnectedTextureBlock 混入获得自动连接纹理,edgeIcon 覆写为 resources.edge(BlockModule.scala:39-40),资源由 resources: ResourceProvider 抽象方法提供。

生命周期钩子

模块方块把全部结构性行为委托给 Tile:

方块方法 委托调用 源码行
onBlockPlacedBy getTE(...).tryConnect() BlockModule.scala:44-59
onNeighborBlockChange getTE(...).tryConnect() BlockModule.scala:55-70
breakBlock getTE(...).onBreak() 后调用父类 BlockModule.scala:65-74

数值

数值名 值
覆写的方块生命周期方法 4(canPlaceBlockAt / onBlockPlacedBy / onNeighborBlockChange / breakBlock)
放置时允许的同 kind 连接数上限 1
混入的 trait 数 3
构造参数数 5
本模组提供的具体模块方块 0(BlockModule 为 abstract class)

交互

BlockModule 是抽象类,不存在可直接放置的实例。其交互行为供下游模组继承后使用:

触发 行为
玩家手持模块方块放置 邻接同 kind 模块数 > 1 时拒绝放置
放置成功 / 相邻方块变化 Tile 尝试 tryConnect() 并入结构;kind 相同的模块会优先聚合
玩家拆除模块方块 Tile 执行 onBreak(),若结构因此不再满足 Required 则该机器转入 incomplete 状态
玩家查看方块 经 BlockTooltip 显示 bdlib.multiblock.tip.* 系列提示,说明该模块可安装到哪些机器中

相关条目