package advancedsystemsmanager.flow.execution.buffers.elements; import advancedsystemsmanager.api.execution.IBufferElement; import advancedsystemsmanager.flow.setting.Setting; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidHandler; public class FluidBufferElement extends BufferElementBase<Fluid> { protected IFluidHandler tank; protected ForgeDirection direction; public FluidBufferElement(int id, IFluidHandler tank, ForgeDirection direction, int amount, Fluid fluid, Setting<Fluid> setting, boolean whitelist) { this(id, tank, direction, amount, fluid); this.setting = setting; this.whitelist = whitelist; } public FluidBufferElement(int id, IFluidHandler tank, ForgeDirection direction, int amount, Fluid fluid) { super(id); this.amount = amount; this.content = fluid; this.tank = tank; this.direction = direction; } @Override public void remove() { } @Override public void onUpdate() { } @Override public int getSizeLeft() { FluidStack stack = tank.drain(direction, 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 = tank.drain(direction, new FluidStack(content, amount), true); return stack == null ? 0 : stack.amount; } @Override public IBufferElement<Fluid> getSplitElement(int elementAmount, int id, boolean fair) { FluidBufferElement element = new FluidBufferElement(this.id, this.tank, this.direction, this.amount, this.content); int oldAmount = getSizeLeft(); int amount = oldAmount / elementAmount; if (!fair) { int amountLeft = oldAmount % elementAmount; if (id < amountLeft) { amount++; } } element.amount = amount; return element; } }