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 采集与提示栏输出都停用。

相关条目