Forge 流体桥接(IFluidHandler)
PluginIFluidHandler 是一个通用接口桥接插件:它不针对任何具体 mod,而是挂钩 Forge 的 net.minecraftforge.fluids.IFluidHandler 接口。凡是方块实体实现了该接口,WAILA 就会把它的储液罐内容与容量写进提示栏。
这是本 mod 中覆盖范围最广的一个插件——它不声明 deps,因此无需任何第三方 mod 存在即可加载。
基本信息
| 属性 | 值 |
|---|---|
| 插件类 | tterrag.wailaplugins.plugins.PluginIFluidHandler |
| 目标 mod | 无特定目标——挂钩 Forge IFluidHandler 接口 |
@Plugin 注解 |
name = "IFluidHandler",deps 为空,order 未设置(默认 0) |
| 注册类型 | Body + NBT provider,目标类 net.minecraftforge.fluids.IFluidHandler |
| 默认启用 | 是([plugins] 段与 WAILA [modules] 段默认均为 true) |
| 挂钩的 API | IFluidHandler.getTankInfo(ForgeDirection)、FluidTankInfo、FluidStack |
WAILA 元数据键(NBT)
writeFluidInfoToNBT(IFluidHandler, NBTTagCompound):
- 若
getTankInfo(ForgeDirection.UNKNOWN)返回null或长度为 0,不写入任何键。 - 否则写入
fluidInfo(NBTTagList),列表每个元素是一个复合标签:
| NBT 键 | 层级 | 类型 | 含义 |
|---|---|---|---|
fluidInfo |
顶层 | NBTTagList | 储液罐列表;每项一个储液罐,顺序与 getTankInfo() 一致 |
fluid |
每个储液罐内 | NBTTagCompound | FluidStack.writeToNBT 的结果;空罐时该键不存在 |
capacity |
每个储液罐内 | int | 该罐容量(mB) |
显示内容
addTankTooltip 对每个储液罐输出一行,使用 WAILA 的 SpecialChars.getRenderString("waila.fluid", ...) 渲染(即 WAILA 自带的流体图标 + 名称格式):
| 情况 | 显示 |
|---|---|
储液罐为空(tank.fluid == null) |
流体名与本地化名均取 EMPTYFLUID,数量显示 0 |
| 储液罐有液体 | Fluid.getName() / FluidStack.getLocalizedName(),数量取 tank.fluid.amount,并附 tank.capacity |
空罐同样显示(只是名称为 EMPTYFLUID、数量为 0),因此玩家能看出"该罐有容量但当前是空的"。
与其他插件的交互
- 血魔法会主动抹掉本插件的行:
PluginBloodMagic.getBody首行执行((ITaggedList<String, String>) currenttip).removeEntries("IFluidHandler"),把由本插件写入的、带IFluidHandler标签的条目从提示栏移除,避免 Blood Magic 祭坛同时出现通用流体行与专用血魔法行。 - Railcraft 复用本插件的读写工具:
PluginRailcraft直接调用本类的静态方法readFluidInfoFromNBT/writeFluidInfoToNBT来显示机器储液罐,因此两者共用同一套 NBT 格式,详见 Railcraft 集成。 addTankTooltip、writeFluidInfoToNBT、readFluidInfosFromNBT、writeFluidInfoToNBT(FluidTankInfo, ...)、readFluidInfoFromNBT均为public static,供同 mod 内其他插件复用。
配置开关
本插件没有注册任何功能开关——load() 中没有调用 PluginBase.addConfig,语言文件中也不存在 wp.config.IFluidHandler.* 键。因此它只受插件级总开关 IFluidHandler(enabled() 读取)控制:关闭后整个插件的 NBT 采集与提示栏输出都停用。
相关条目
- 血魔法集成 - 会移除本插件输出行的插件
- Railcraft 集成 - 复用本插件静态读写方法的插件
- WAILA 模块开关 - 本插件只有总开关,无功能开关
- 插件 API 与生命周期 - 按接口类注册 provider 的机制