package advancedsystemsmanager.compatibility.appliedenergistics.buffer;
import advancedsystemsmanager.api.execution.IBufferElement;
import advancedsystemsmanager.api.execution.Key;
import advancedsystemsmanager.flow.execution.buffers.elements.BufferElementBase;
import advancedsystemsmanager.flow.setting.Setting;
import advancedsystemsmanager.compatibility.appliedenergistics.TileEntityAENode;
import appeng.api.storage.data.IAEItemStack;
import net.minecraft.item.ItemStack;
public class AEItemBufferElement extends BufferElementBase<ItemStack>
{
private TileEntityAENode node;
private IAEItemStack stack;
public AEItemBufferElement(int id, TileEntityAENode node, IAEItemStack stack, Setting<ItemStack> setting, boolean whitelist)
{
this(id, node, stack);
this.setting = setting;
this.whitelist = whitelist;
}
private AEItemBufferElement(int id, TileEntityAENode node, IAEItemStack stack)
{
super(id);
this.node = node;
this.stack = stack;
this.amount = (int)Math.min(Integer.MAX_VALUE, stack.getStackSize());
}
@Override
public void remove()
{
}
@Override
public void onUpdate()
{
}
@Override
public int getSizeLeft()
{
return (int)Math.min(stack.getStackSize(), amount);
}
@Override
public int reduceBufferAmount(int amount)
{
IAEItemStack extracted = node.helper.extract(stack.copy().setStackSize(amount));
return extracted == null ? 0 : (int)extracted.getStackSize();
}
@Override
public IBufferElement<ItemStack> getSplitElement(int elementAmount, int id, boolean fair)
{
AEItemBufferElement element = new AEItemBufferElement(this.id, this.node, this.stack, this.setting, this.whitelist);
int oldAmount = this.getSizeLeft();
int amount = oldAmount / elementAmount;
if (!fair)
{
int amountLeft = oldAmount % elementAmount;
if (id < amountLeft)
{
++amount;
}
}
element.amount = amount;
return element;
}
@Override
public Key<ItemStack> getKey()
{
return new Key.ItemKey(stack.getItemStack());
}
@Override
public ItemStack getContent()
{
return stack.getItemStack();
}
}