外部流体黏土桶 Compat Clay Buckets
本 mod 通过 ClayBucketHandler.registerClayBucket(Item, Fluid, Block) 提供了一个开放的注册接口,任何模组都可以为自家流体加一个黏土桶。本条目收录本 mod 自身编写的 4 个兼容桶(4 个独立类,全部可选加载)。
通用机制:registerClayBucket 做三件事——
FluidContainerRegistry.registerFluidContainer(fluid, filledContainer, emptyContainer),空容器为 烧制黏土桶(若该桶声明了容器物品则 1 个,否则 0 个);- 把「流体方块 → 桶物品」记入
ClayBucketHandler.customClayBuckets(IdentityHashMap); - 使
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 也会生效。