package net.minecraftforge.fluids; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; /** * Reference implementation of {@link IFluidContainerItem}. Use/extend this or implement your own. * * @author King Lemming * */ public class ItemFluidContainer extends Item implements IFluidContainerItem { protected int capacity; public ItemFluidContainer(int itemID) { super(); } public ItemFluidContainer(int itemID, int capacity) { super(); this.capacity = capacity; } public ItemFluidContainer setCapacity(int capacity) { this.capacity = capacity; return this; } /* IFluidContainerItem */ @Override public FluidStack getFluid(ItemStack container) { if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("Fluid")) { return null; } return FluidStack.loadFluidStackFromNBT(container.stackTagCompound.getCompoundTag("Fluid")); } @Override public int getCapacity(ItemStack container) { return capacity; } @Override public int fill(ItemStack container, FluidStack resource, boolean doFill) { if (resource == null) { return 0; } if (!doFill) { if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("Fluid")) { return Math.min(capacity, resource.amount); } FluidStack stack = FluidStack.loadFluidStackFromNBT(container.stackTagCompound.getCompoundTag("Fluid")); if (stack == null) { return Math.min(capacity, resource.amount); } if (!stack.isFluidEqual(resource)) { return 0; } return Math.min(capacity - stack.amount, resource.amount); } if (container.stackTagCompound == null) { container.stackTagCompound = new NBTTagCompound(); } if (!container.stackTagCompound.hasKey("Fluid")) { NBTTagCompound fluidTag = resource.writeToNBT(new NBTTagCompound()); if (capacity < resource.amount) { fluidTag.setInteger("Amount", capacity); container.stackTagCompound.setTag("Fluid", fluidTag); return capacity; } container.stackTagCompound.setTag("Fluid", fluidTag); return resource.amount; } NBTTagCompound fluidTag = container.stackTagCompound.getCompoundTag("Fluid"); FluidStack stack = FluidStack.loadFluidStackFromNBT(fluidTag); if (!stack.isFluidEqual(resource)) { return 0; } int filled = capacity - stack.amount; if (resource.amount < filled) { stack.amount += resource.amount; filled = resource.amount; } else { stack.amount = capacity; } container.stackTagCompound.setTag("Fluid", stack.writeToNBT(fluidTag)); return filled; } @Override public FluidStack drain(ItemStack container, int maxDrain, boolean doDrain) { if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("Fluid")) { return null; } FluidStack stack = FluidStack.loadFluidStackFromNBT(container.stackTagCompound.getCompoundTag("Fluid")); if (stack == null) { return null; } int currentAmount = stack.amount; stack.amount = Math.min(stack.amount, maxDrain); if (doDrain) { if (currentAmount == stack.amount) { container.stackTagCompound.removeTag("Fluid"); if (container.stackTagCompound.hasNoTags()) { container.stackTagCompound = null; } return stack; } NBTTagCompound fluidTag = container.stackTagCompound.getCompoundTag("Fluid"); fluidTag.setInteger("Amount", currentAmount - stack.amount); container.stackTagCompound.setTag("Fluid", fluidTag); } return stack; } }