外部流体黏土桶 Compat Clay Buckets

本 mod 通过 ClayBucketHandler.registerClayBucket(Item, Fluid, Block) 提供了一个开放的注册接口,任何模组都可以为自家流体加一个黏土桶。本条目收录本 mod 自身编写的 4 个兼容桶(4 个独立类,全部可选加载)。

通用机制:registerClayBucket 做三件事——

  1. FluidContainerRegistry.registerFluidContainer(fluid, filledContainer, emptyContainer),空容器为 烧制黏土桶(若该桶声明了容器物品则 1 个,否则 0 个);
  2. 把「流体方块 → 桶物品」记入 ClayBucketHandler.customClayBuckets(IdentityHashMap);
  3. 使 bucketFill 在命中该流体方块时 ALLOW 并返回该桶。

4 个兼容桶

桶物品 注册名 前置 mod modid 探测 流体 流体方块
毒液黏土桶 clayBucketPoison Biomes O’ Plenty BiomesOPlenty BOPCFluids.poison BOPCBlocks.poison
血黏土桶 clayBucketBlood Biomes O’ Plenty BiomesOPlenty BOPCFluids.blood BOPCBlocks.blood
油黏土桶 clayBucketOil BuildCraft Energy BuildCraft|Core BuildCraftEnergy.fluidOil BuildCraftEnergy.blockOil
杂酚油黏土桶 clayBucketCreosote Railcraft Railcraft RailcraftFluids.CREOSOTE.standardFluid.get() RailcraftFluids.CREOSOTE.getBlock()

实现差异

  • 前三个走 ClayBucket(本地化名经 Reference.prefix() 自动加上 iguana.tcon. 前缀,纹理经 Reference.resource() 加命名空间)。
  • 杂酚油桶是唯一直接用 BaseClayBucket 构造并手动传 Reference.prefix("clayBucket.creosote") / Reference.resource("clayBucketCreosote") 的(因为 Railcraft 流体不在静态 import 的 tconstruct.smeltery.TinkerSmeltery.* 里)。

注册时机

全部在 IguanaItems.preInit 内以 Loader.isModLoaded(...) 直接 if 判断后调用静态 register(),没有用 @Optional.Interface。未安装对应 mod 时这些类根本不会被加载,因此不存在硬依赖问题。

装填异常

bucketFill 中有一段额外的方块名硬编码判断,先于 customClayBuckets 查表:命中 tile.blockFuel、tile.blockOil、tile.railcraft.fluid.creosote 时直接把结果设成空的烧制黏土桶并 DENY 事件。这是一条独立于兼容注册的旁路——即使没装 BuildCraft/Railcraft 也会生效。