From 3248514a65a11737ebcd36a6b7cad9ab499df7e2 Mon Sep 17 00:00:00 2001 From: BlueAgent Date: Sun, 26 Apr 2020 16:16:27 +0800 Subject: [PATCH] Fix extractFluid voiding excess in OC driver (#2363) --- .../integration/oc/EnvironmentNetwork.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/oc/EnvironmentNetwork.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/oc/EnvironmentNetwork.java index ecdef86fa..e41192cbc 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/integration/oc/EnvironmentNetwork.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/oc/EnvironmentNetwork.java @@ -258,10 +258,16 @@ public class EnvironmentNetwork extends AbstractManagedEnvironment { } // Actually do it and return how much fluid we've inserted - FluidStack extracted = node.getNetwork().extractFluid(stack, stack.amount, Action.PERFORM); - handler.fill(extracted, true); + FluidStack extractedActual = node.getNetwork().extractFluid(stack, filledAmountSim, Action.PERFORM); + int filledAmountActual = handler.fill(extractedActual, true); - return new Object[]{filledAmountSim}; + // Attempt to insert excess fluid back into the network + // This shouldn't need to happen for most tanks, unless input cap decreases based on insert amount + if (extractedActual != null && extractedActual.amount > filledAmountActual) { + node.getNetwork().insertFluid(stack, extractedActual.amount - filledAmountActual, Action.PERFORM); + } + + return new Object[]{filledAmountActual}; } @Callback(doc = "function(stack:table):table -- Gets a fluid from the network.")