Skip to content

Commit

Permalink
make ender io conduit can drain from multi fluid tank (#75)
Browse files Browse the repository at this point in the history
  • Loading branch information
GlodBlock authored Jun 29, 2022
1 parent fab7b9b commit 3ed88d8
Showing 1 changed file with 26 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,31 @@ public boolean extractFrom(AbstractEnderLiquidConduit con, ForgeDirection conDir
if(tank == null || !tank.isValid()) {
return false;
}

if(tank.externalTank.getTankInfo(conDir.getOpposite()) != null) {
for (FluidTankInfo tankInfo : tank.externalTank.getTankInfo(conDir.getOpposite())) {
if(tankInfo == null || tankInfo.fluid == null) {
continue;
}
FluidStack tryDrain = tankInfo.fluid.copy();
tryDrain.amount = type.getMaxExtractPerTick();
FluidStack drained = tank.externalTank.drain(conDir.getOpposite(), tryDrain, false);
if(drained == null || drained.amount <= 0 || !matchedFilter(drained, con, conDir, true) || !tryDrain.isFluidEqual(drained)) {
continue;
}
int amountAccepted = fillFrom(tank, drained.copy(), true);
if(amountAccepted <= 0) {
continue;
}
tryDrain.amount = amountAccepted;
drained = tank.externalTank.drain(conDir.getOpposite(), tryDrain, true);
if(drained == null || drained.amount <= 0) {
continue;
}
return true;
}
}

FluidStack drained = tank.externalTank.drain(conDir.getOpposite(), type.getMaxExtractPerTick(), false);
if(drained == null || drained.amount <= 0 || !matchedFilter(drained, con, conDir, true)) {
return false;
Expand All @@ -90,14 +115,7 @@ public boolean extractFrom(AbstractEnderLiquidConduit con, ForgeDirection conDir
return false;
}
drained = tank.externalTank.drain(conDir.getOpposite(), amountAccepted, true);
if(drained == null || drained.amount <= 0) {
return false;
}
// if(drained.amount != amountAccepted) {
// Log.warn("AbstractEnderLiquidConduit.extractFrom: Extracted fluid volume is not equal to inserted volume. Drained=" + drained.amount + " filled="
// + amountAccepted + " Fluid: " + drained + " Accepted=" + amountAccepted);
// }
return true;
return drained != null && drained.amount > 0;
}

private NetworkTank getTank(AbstractEnderLiquidConduit con, ForgeDirection conDir) {
Expand Down

0 comments on commit 3ed88d8

Please sign in to comment.