DataSlot 数据槽框架

基本信息

属性 值
基础类型 net.bdew.lib.data.base.DataSlot(trait)
容器 net.bdew.lib.data.base.DataSlotContainer
Tile 集成 net.bdew.lib.data.base.TileDataSlots
同步方向枚举 net.bdew.lib.data.base.UpdateKind
具体槽位实现 12 个 + base 8 个
NBT 存储格式 NBTTagCompound,以槽位 name 为子标签键

功能

DataSlot 是 BD lib 处理「机器状态」的基础设施:一个槽位代表机器上的一个可序列化状态量(整数、浮点、物品栏、流体罐、方向、开关……),框架自动负责它的存档、客户端同步与 GUI 刷新。

槽位基类

DataSlot(data/base/DataSlot.scala:15)要求实现者提供 parent(所属容器)与 name(唯一名)两个抽象字段,并在构造时就把自身登记进容器(parent.dataSlots += (name -> this))。源码注释明确警告:这两个字段在构造函数中被访问,因此必须是构造参数或 lazy val,否则会崩溃。

默认同步目标为 Set(UpdateKind.GUI)(DataSlot.scala:31),可用 setUpdate(vals: _*) 覆盖。基类还提供两个带变更通知的包装器 execWithChangeNotify 与 execWithChangeConditional,执行后自动回调 parent.dataSlotChanged(this)。

UpdateKind

UpdateKind(data/base/UpdateKind.scala)是一个 Scala Enumeration,定义 4 个同步目标:

值 含义
WORLD 需要通知客户端方块更新
GUI 需要在打开 GUI 时同步
SAVE 需要写入存档
RENDER 需要触发客户端重渲染

提供的具体槽位

data/ 目录下共 12 个具体实现(不含 base):

槽位类 承载状态
DataSlotInt 整数
DataSlotFloat 浮点数
DataSlotDouble 双精度浮点
DataSlotBoolean 布尔开关
DataSlotString 字符串
DataSlotOption 枚举选项
DataSlotDirection 六面方向
DataSlotFluidOption 流体选项
DataSlotItemStack 单个物品堆栈
DataSlotInventory 物品栏
DataSlotTank 流体罐
DataSlotGameProfile 玩家 UUID / 游戏档案
DataSlotMovingAverage 滑动平均(用于速率统计)

data/base/ 下的 8 个文件提供分层基类:DataSlot、DataSlotContainer、DataSlotNumeric、DataSlotOrdered、DataSlotVal、TileDataSlots、ContainerDataSlots、UpdateKind。

数值

数值名 值
UpdateKind 成员数 4(WORLD / GUI / SAVE / RENDER)
DataSlot 默认 updateKind Set(GUI)
具体槽位实现数 12
base 层文件数 8
data/ 目录 Scala 文件总数 21

交互

DataSlot 本身不产生玩家交互,它是其他机器 TileEntity 的内部组件。玩家能观察到的间接效果:

触发 行为
打开机器 GUI 自动把标记了 GUI 的槽位写入 NBT 并以 S35PacketUpdateTileEntity(ACT_GUI)发给客户端
存档 标记 SAVE 的槽位随 TileEntity 落盘
槽位值变化 若含 SAVE 标记,调用 markTileEntityChunkModified 标记区块脏

相关条目