mirror of
https://github.com/GTNewHorizons/AE2FluidCraft-Rework.git
synced 2026-11-11 15:57:55 +00:00
fix fluid dupe from simulate drain
This commit is contained in:
1 parent
948dcdcbce
commit
161e38cbda
2 files changed
+29
-19
No files matched your search
+22
-10
@@ -224,26 +224,38 @@ public class ContainerFluidMonitor extends FCContainerMonitor<IAEFluidStack> {
|
||||
MutablePair<Integer, ItemStack> fillStack = Util.FluidUtil.fillStack(out, toExtract.getFluidStack());
|
||||
if (fillStack.right == null || fillStack.left <= 0) continue;
|
||||
toExtract.setStackSize((long) fillStack.left * fluidContainer.stackSize);
|
||||
IAEFluidStack tmp = this.host.getFluidInventory()
|
||||
.extractItems(toExtract, Actionable.SIMULATE, this.getActionSource());
|
||||
if (tmp == null) continue;
|
||||
fillStack.right.stackSize = (int) (tmp.getStackSize() / fillStack.left);
|
||||
this.dropItem(fillStack.right);
|
||||
out.stackSize = fillStack.right.stackSize;
|
||||
// The real result may don't match simulation result.
|
||||
if (fillStack.right.getItem() instanceof IFluidContainerItem) {
|
||||
this.host.getFluidInventory().extractItems(toExtract, Actionable.MODULATE, this.getActionSource());
|
||||
if ((int) (tmp.getStackSize() % fillStack.left) > 0) {
|
||||
IAEFluidStack real = this.host.getFluidInventory()
|
||||
.extractItems(toExtract, Actionable.MODULATE, this.getActionSource());
|
||||
if (real == null) continue;
|
||||
// Refill the container
|
||||
out = fluidContainer.copy();
|
||||
out.stackSize = 1;
|
||||
fillStack = Util.FluidUtil.fillStack(out, real.getFluidStack());
|
||||
fillStack.right.stackSize = (int) (real.getStackSize() / fillStack.left);
|
||||
out.stackSize = fillStack.right.stackSize;
|
||||
if ((int) (real.getStackSize() % fillStack.left) > 0) {
|
||||
this.dropItem(
|
||||
Util.FluidUtil.setFluidContainerAmount(
|
||||
fillStack.right,
|
||||
(int) (tmp.getStackSize() % fillStack.left)),
|
||||
(int) (real.getStackSize() % fillStack.left)),
|
||||
1);
|
||||
out.stackSize++;
|
||||
}
|
||||
} else if (FluidContainerRegistry.isContainer(fillStack.right)) {
|
||||
IAEFluidStack real = this.host.getFluidInventory()
|
||||
.extractItems(toExtract, Actionable.MODULATE, this.getActionSource());
|
||||
if (real == null) continue;
|
||||
// Refill the container
|
||||
out = fluidContainer.copy();
|
||||
out.stackSize = 1;
|
||||
fillStack = Util.FluidUtil.fillStack(out, real.getFluidStack());
|
||||
fillStack.right.stackSize = (int) (real.getStackSize() / fillStack.left);
|
||||
out.stackSize = fillStack.right.stackSize;
|
||||
toExtract.setStackSize((long) fillStack.right.stackSize * fillStack.left);
|
||||
this.host.getFluidInventory().extractItems(toExtract, Actionable.MODULATE, this.getActionSource());
|
||||
}
|
||||
this.dropItem(fillStack.right);
|
||||
} else if (!Util.FluidUtil.isEmpty(fluidContainer)) {
|
||||
// add fluid to ae network
|
||||
AEFluidStack fluidStack = Util.getAEFluidFromItem(fluidContainer);
|
||||
|
||||
@@ -110,17 +110,15 @@ public class PartFluidExportBus extends FCSharedFluidBus implements ICraftingReq
|
||||
this.source);
|
||||
}
|
||||
|
||||
final IAEFluidStack out = inv.extractItems(toExtract, Actionable.SIMULATE, this.source);
|
||||
final IAEFluidStack real = inv.extractItems(toExtract, Actionable.MODULATE, this.source);
|
||||
|
||||
if (out != null && isAllowed) {
|
||||
int wasInserted = fh.fill(this.getSide().getOpposite(), out.getFluidStack(), true);
|
||||
|
||||
if (wasInserted > 0) {
|
||||
toExtract.setStackSize(wasInserted);
|
||||
inv.extractItems(toExtract, Actionable.MODULATE, this.source);
|
||||
|
||||
return TickRateModulation.FASTER;
|
||||
if (real != null && isAllowed) {
|
||||
int realInserted = fh.fill(this.getSide().getOpposite(), real.getFluidStack(), true);
|
||||
if (realInserted < real.getStackSize()) {
|
||||
toExtract.setStackSize(real.getStackSize() - realInserted);
|
||||
inv.injectItems(toExtract, Actionable.MODULATE, this.source);
|
||||
}
|
||||
return TickRateModulation.FASTER;
|
||||
}
|
||||
|
||||
if (this.isCraftingEnabled()) {
|
||||
|
||||
Reference in new issue
Block a user