1. 物品形式的流体容器

和方块形式的流体容器一样,物品形式的流体容器也是以 Capability 的形式出现的,惟其拥有一个专门的 IFluidHandlerItem 接口。 这个接口在继承 IFluidHandler 的基础上多了一个 getContainerItem 方法用于获取作为流体容器存在的 ItemStack

你可以在 net.minecraftforge.fluids.capability.template 包下找到一些开箱即用的实现,例如下面这个例子所展示的 FluidHandlerItemStack

// WIP
import net.minecraftforge.fluids.capability.templates.FluidHandlerItemStack;

public class MyFluidContainer extends Item {
    @Override
    public ICapabilityProvider initCapabilities(ItemStack item, NBTTagCompound data) {
        // 第二个参数代表容积,单位为毫桶(千分之一桶,mB)
        return new FluidHandlerItemStack(item, 8000);
    }
}

1.1. 重新实现 IFluidHandlerItem:getContainerItem

IFluidHandlerItem 相比于普通的 IFluidHandler 只多了一个 getContainerItem 方法需要实现,其他方法的含义均和普通的 IFluidHandler 一致。

// WIP
@Override
public ItemStack getContainerItem() {
    // 这样一来,这个流体容器就会被认为是“一次性”的。
    // 即,当流体被清空时,它返还的容器是 ItemStack.EMPTY,即空物品。
    // 但请注意,容器返还的具体逻辑是在其他地方完成的,不受这个接口它自己的控制。
    return ItemStack.EMPTY;
}