package mekanism.generators.common.content.turbine;
import mekanism.common.util.MekanismUtils;
import mekanism.generators.common.tile.turbine.TileEntityTurbineCasing;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidTank;
public class TurbineFluidTank implements IFluidTank
{
public TileEntityTurbineCasing turbine;
public TurbineFluidTank(TileEntityTurbineCasing tileEntity)
{
turbine = tileEntity;
}
@Override
public FluidStack getFluid()
{
return turbine.structure != null ? turbine.structure.fluidStored : null;
}
@Override
public int getCapacity()
{
return turbine.structure != null ? turbine.structure.getFluidCapacity() : 0;
}
@Override
public int fill(FluidStack resource, boolean doFill)
{
if(turbine.structure != null && !turbine.getWorld().isRemote)
{
if(resource == null || resource.getFluid() == null)
{
return 0;
}
if(turbine.structure.fluidStored != null && !turbine.structure.fluidStored.isFluidEqual(resource))
{
return 0;
}
if(turbine.structure.fluidStored == null || turbine.structure.fluidStored.getFluid() == null)
{
if(resource.amount <= getCapacity())
{
if(doFill)
{
turbine.structure.fluidStored = resource.copy();
if(resource.amount > 0)
{
MekanismUtils.saveChunk(turbine);
}
}
return resource.amount;
}
else {
if(doFill)
{
turbine.structure.fluidStored = resource.copy();
turbine.structure.fluidStored.amount = getCapacity();
if(getCapacity() > 0)
{
MekanismUtils.saveChunk(turbine);
}
}
return getCapacity();
}
}
else if(resource.amount <= getNeeded())
{
if(doFill)
{
turbine.structure.fluidStored.amount += resource.amount;
if(resource.amount > 0)
{
MekanismUtils.saveChunk(turbine);
}
}
return resource.amount;
}
else {
int prevNeeded = getNeeded();
if(doFill)
{
turbine.structure.fluidStored.amount = getCapacity();
if(prevNeeded > 0)
{
MekanismUtils.saveChunk(turbine);
}
}
return prevNeeded;
}
}
return 0;
}
@Override
public FluidStack drain(int maxDrain, boolean doDrain)
{
if(turbine.structure != null && !turbine.getWorld().isRemote)
{
if(turbine.structure.fluidStored == null || turbine.structure.fluidStored.getFluid() == null)
{
return null;
}
if(turbine.structure.fluidStored.amount <= 0)
{
return null;
}
int used = maxDrain;
if(turbine.structure.fluidStored.amount < used)
{
used = turbine.structure.fluidStored.amount;
}
if(doDrain)
{
turbine.structure.fluidStored.amount -= used;
}
FluidStack drained = new FluidStack(turbine.structure.fluidStored.getFluid(), used);
if(turbine.structure.fluidStored.amount <= 0)
{
turbine.structure.fluidStored = null;
}
if(drained.amount > 0 && doDrain)
{
MekanismUtils.saveChunk(turbine);
turbine.sendPacketToRenderer();
}
return drained;
}
return null;
}
public int getNeeded()
{
return getCapacity()-getFluidAmount();
}
@Override
public int getFluidAmount()
{
if(turbine.structure != null)
{
return turbine.structure.fluidStored.amount;
}
return 0;
}
@Override
public FluidTankInfo getInfo()
{
return new FluidTankInfo(this);
}
}