1. 关于流体容器之间的交互

有鉴于某些设计决定,如果你要跟某个其他 Mod 的流体容器打交道,你会这么写:

TileEntity tile = world.getTileEntity(pos);
if (tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, facing.getOpposite())) {
    IFluidHandler handler = tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, facing.getOpposite());
    FluidStack drained = handler.drain(..., true);
    if (drained != null && ...) {
        handler.drain(..., false);
    }
}

最坏的情况下你大概要重复这样的代码几十遍。和玩家手里的物品打交道的情况只会更糟。 值得庆幸的是,早在万能桶被引入的那个 PR 中,有一个名为 FluidUtil 的类也被随之引入了。这个类下有一大批已经封装好的标准化的和流体容器打交道的方法,直接复用即可。