From d28ffa6adceb9987ecabbf3acc1d1d207f739308 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Dip=C4=8D=C3=A1r?= Date: Fri, 7 Oct 2022 23:39:00 +0200 Subject: [PATCH] Fix Fluid Import Bus to be able to import multiple fluids just like EIO conduits --- .../common/parts/PartFluidImportBus.java | 44 +++++++++++-------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/glodblock/github/common/parts/PartFluidImportBus.java b/src/main/java/com/glodblock/github/common/parts/PartFluidImportBus.java index 6cce7267..b2ede2e2 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidImportBus.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidImportBus.java @@ -22,6 +22,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; public class PartFluidImportBus extends PartSharedFluidBus { @@ -72,30 +73,35 @@ public class PartFluidImportBus extends PartSharedFluidBus { final IFluidHandler fh = (IFluidHandler) te; final IMEMonitor inv = this.getProxy().getStorage().getFluidInventory(); - final FluidStack fluidStack = fh.drain( this.getSide().getOpposite(), this.calculateAmountToSend(), false ); - - if( this.filterEnabled() && !this.isInFilter( fluidStack ) ) - { - return TickRateModulation.SLOWER; - } - - final AEFluidStack aeFluidStack = AEFluidStack.create( fluidStack ); - - if( aeFluidStack != null ) - { - final IAEFluidStack notInserted = inv.injectItems( aeFluidStack, Actionable.MODULATE, this.source ); - - if( notInserted != null && notInserted.getStackSize() > 0 ) - { - aeFluidStack.decStackSize( notInserted.getStackSize() ); + int maxDrain = this.calculateAmountToSend(); + boolean drained = false; + FluidTankInfo[] tanksInfo = fh.getTankInfo(this.getSide().getOpposite()); + for (FluidTankInfo tankInfo : tanksInfo) { + if (tankInfo.fluid == null) { + continue; } - fh.drain( this.getSide().getOpposite(), aeFluidStack.getFluidStack(), true ); + FluidStack fluidStack = new FluidStack(tankInfo.fluid, Math.min(tankInfo.fluid.amount, maxDrain)); + fluidStack = fh.drain(this.getSide().getOpposite(), fluidStack, false); + if (this.filterEnabled() && !this.isInFilter(fluidStack)) { + continue; + } - return TickRateModulation.FASTER; + final AEFluidStack aeFluidStack = AEFluidStack.create(fluidStack); + if (aeFluidStack != null) { + final IAEFluidStack notInserted = inv.injectItems(aeFluidStack, Actionable.MODULATE, this.source); + + if (notInserted != null && notInserted.getStackSize() > 0) { + aeFluidStack.decStackSize(notInserted.getStackSize()); + } + + fh.drain(this.getSide().getOpposite(), aeFluidStack.getFluidStack(), true); + maxDrain -= aeFluidStack.getFluidStack().amount; + drained = true; + } } - return TickRateModulation.IDLE; + return drained ? TickRateModulation.FASTER : TickRateModulation.SLOWER; } catch(GridAccessException e ) {