/* * Copyright (c) CovertJaguar, 2014 http://railcraft.info * * This code is the property of CovertJaguar * and may only be used with explicit written * permission unless otherwise specified on the * license page at http://railcraft.info/wiki/info:license. */ package mods.railcraft.common.fluids; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; /** * This class provides some convenience functions for ITankContainers * * @author CovertJaguar <http://www.railcraft.info> */ public class TankToolkit implements IFluidHandler { private final IFluidHandler tankContainer; public TankToolkit(IFluidHandler c) { tankContainer = c; } public int getFluidQty(Fluid fluid) { if (fluid == null) return 0; int amount = 0; for (FluidTankInfo tank : getTankInfo(ForgeDirection.UNKNOWN)) { if (tank.fluid != null && fluid == tank.fluid.getFluid()) amount += tank.fluid.amount; } return amount; } public boolean isTankEmpty(Fluid fluid) { if (fluid == null) return areTanksEmpty(); return getFluidQty(fluid) <= 0; } public boolean isTankFull(Fluid fluid) { if (fluid == null) return areTanksFull(); int fill = fill(ForgeDirection.UNKNOWN, new FluidStack(fluid, 1), false); return fill <= 0; } public boolean areTanksFull() { for (FluidTankInfo tank : getTankInfo(ForgeDirection.UNKNOWN)) { if (tank.fluid == null || tank.fluid.amount < tank.capacity) return false; } return true; } public boolean areTanksEmpty() { return !isFluidInTank(); } public boolean isFluidInTank() { for (FluidTankInfo tank : getTankInfo(ForgeDirection.UNKNOWN)) { boolean empty = tank.fluid == null || tank.fluid.amount <= 0; if (!empty) return true; } return false; } public float getFluidLevel() { int amount = 0; int capacity = 0; for (FluidTankInfo tank : getTankInfo(ForgeDirection.UNKNOWN)) { FluidStack liquid = tank.fluid; amount += liquid == null ? 0 : liquid.amount; capacity += tank.capacity; } return capacity == 0 ? 0 : amount / capacity; } public float getFluidLevel(Fluid fluid) { int amount = 0; int capacity = 0; for (FluidTankInfo tank : getTankInfo(ForgeDirection.UNKNOWN)) { FluidStack liquid = tank.fluid; if (liquid == null || liquid.getFluid() != fluid) continue; amount += liquid.amount; capacity += tank.capacity; } return capacity == 0 ? 0 : amount / (float) capacity; } public boolean canPutFluid(ForgeDirection from, FluidStack liquid) { if (liquid == null) return false; return fill(from, liquid, false) > 0; } @Override public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { return tankContainer.fill(from, resource, doFill); } @Override public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { return tankContainer.drain(from, maxDrain, doDrain); } @Override public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { return tankContainer.drain(from, resource, doDrain); } @Override public FluidTankInfo[] getTankInfo(ForgeDirection side) { return tankContainer.getTankInfo(side); } @Override public boolean canFill(ForgeDirection from, Fluid fluid) { return tankContainer.canFill(from, fluid); } @Override public boolean canDrain(ForgeDirection from, Fluid fluid) { return tankContainer.canDrain(from, fluid); } }