From 72419e8e5b4fbef304512c79424a8a1a780a91a0 Mon Sep 17 00:00:00 2001 From: chrombread Date: Sun, 4 Jan 2026 12:34:41 -0800 Subject: [PATCH] add support for partial draining of things like gt cells --- .../modularui/value/sync/FluidSlotSyncHandler.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main/java/com/cleanroommc/modularui/value/sync/FluidSlotSyncHandler.java b/src/main/java/com/cleanroommc/modularui/value/sync/FluidSlotSyncHandler.java index 1a254705a..3dfae576f 100644 --- a/src/main/java/com/cleanroommc/modularui/value/sync/FluidSlotSyncHandler.java +++ b/src/main/java/com/cleanroommc/modularui/value/sync/FluidSlotSyncHandler.java @@ -9,11 +9,14 @@ import net.minecraft.item.ItemStack; import net.minecraft.network.PacketBuffer; import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidContainerItem; import net.minecraftforge.fluids.IFluidTank; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import static com.google.common.primitives.Ints.saturatedCast; + public class FluidSlotSyncHandler extends ValueSyncHandler { public static boolean isFluidEmpty(@Nullable FluidStack fluidStack) { @@ -294,6 +297,16 @@ protected void fillFluid(@NotNull FluidStack heldFluid, boolean processFullStack fluidAmountTaken = heldFluid.amount; } + if (itemStackEmptied == null && heldItemSizedOne.getItem() instanceof IFluidContainerItem container) { + // either partially accepted, or is IFluidContainerItem + FluidStack tDrained = container.drain(heldItemSizedOne, saturatedCast(freeSpace), true); + if (tDrained != null && tDrained.amount > 0) { + // something is actually drained - change the cell and drop it to player + itemStackEmptied = heldItemSizedOne; + fluidAmountTaken = tDrained.amount; + } + } + if (itemStackEmptied == null) { return; }