package advancedsystemsmanager.compatibility.appliedenergistics.buffer;
import advancedsystemsmanager.api.execution.IBufferElement;
import advancedsystemsmanager.flow.execution.buffers.elements.BufferElementBase;
import advancedsystemsmanager.flow.setting.Setting;
import advancedsystemsmanager.compatibility.appliedenergistics.TileEntityAENode;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
public class AEFluidBufferElement extends BufferElementBase<Fluid>
{
protected TileEntityAENode node;
public AEFluidBufferElement(int id, TileEntityAENode node, int amount, Fluid fluid, Setting<Fluid> setting, boolean whitelist)
{
this(id, node, amount, fluid);
this.setting = setting;
this.whitelist = whitelist;
}
public AEFluidBufferElement(int id, TileEntityAENode node, int amount, Fluid fluid)
{
super(id);
this.node = node;
this.amount = amount;
this.content = fluid;
}
@Override
public void remove()
{
}
@Override
public void onUpdate()
{
}
@Override
public int getSizeLeft()
{
FluidStack stack = node.getTank().drain(ForgeDirection.UNKNOWN, new FluidStack(content, amount), false);
return stack == null ? 0 : getMaxWithSetting(stack.amount);
}
@Override
public int reduceBufferAmount(int amount)
{
amount = Math.min(amount, this.amount);
FluidStack stack = node.getTank().drain(ForgeDirection.UNKNOWN, new FluidStack(content, amount), true);
return stack == null ? 0 : stack.amount;
}
@Override
public IBufferElement<Fluid> getSplitElement(int elementAmount, int id, boolean fair)
{
AEFluidBufferElement element = new AEFluidBufferElement(this.id, this.node, this.amount, this.content, this.setting, this.whitelist);
int oldAmount = getSizeLeft();
int amount = oldAmount / elementAmount;
if (!fair)
{
int amountLeft = oldAmount % elementAmount;
if (id < amountLeft)
{
amount++;
}
}
element.amount = amount;
return element;
}
}