package advancedsystemsmanager.compatibility.thaumcraft.buffer;
import advancedsystemsmanager.api.execution.IBufferElement;
import advancedsystemsmanager.flow.execution.buffers.elements.BufferElementBase;
import advancedsystemsmanager.flow.setting.Setting;
import thaumcraft.api.aspects.Aspect;
import thaumcraft.api.aspects.IAspectContainer;
public class AspectBufferElement extends BufferElementBase<Aspect>
{
protected IAspectContainer container;
public AspectBufferElement(int id, IAspectContainer container, Aspect aspect, int amount, Setting<Aspect> setting, boolean whitelist)
{
this(id, container, aspect, amount);
this.setting = setting;
this.whitelist = whitelist;
}
public AspectBufferElement(int id, IAspectContainer container, Aspect aspect, int amount)
{
super(id);
this.amount = amount;
this.content = aspect;
this.container = container;
}
@Override
public void remove()
{
}
@Override
public void onUpdate()
{
}
@Override
public int getSizeLeft()
{
return getMaxWithSetting(Math.min(this.container.getAspects().getAmount(this.content), this.amount));
}
@Override
public int reduceBufferAmount(int amount)
{
this.amount -= amount;
this.container.takeFromContainer(this.content, amount);
return amount;
}
@Override
public IBufferElement<Aspect> getSplitElement(int elementAmount, int id, boolean fair)
{
AspectBufferElement element = new AspectBufferElement(this.id, this.container, this.content, this.amount, 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;
}
}