From 3d01f50100300d00bdef80264ef32cd3fb17ca69 Mon Sep 17 00:00:00 2001 From: firenoo <49818773+firenoo@users.noreply.github.com> Date: Sat, 5 Aug 2023 08:15:07 -0700 Subject: [PATCH] Fix fluid stack not doubling (#151) --- .../base/FCContainerEncodeTerminal.java | 23 ++++++++++++++----- .../github/common/item/ItemFluidPacket.java | 17 ++++++++++++++ 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/glodblock/github/client/gui/container/base/FCContainerEncodeTerminal.java b/src/main/java/com/glodblock/github/client/gui/container/base/FCContainerEncodeTerminal.java index 6fc897f9..abc2c1b7 100644 --- a/src/main/java/com/glodblock/github/client/gui/container/base/FCContainerEncodeTerminal.java +++ b/src/main/java/com/glodblock/github/client/gui/container/base/FCContainerEncodeTerminal.java @@ -525,10 +525,18 @@ public abstract class FCContainerEncodeTerminal extends ContainerItemMonitor static boolean canDouble(SlotFake[] slots, int mult) { for (Slot s : slots) { - if (s.getStack() != null) { - long result = (long) s.getStack().stackSize * mult; - if (result > Integer.MAX_VALUE) { - return false; + ItemStack st = s.getStack(); + if (st != null) { + if (st.getItem() instanceof ItemFluidPacket) { + long result = (long) ItemFluidPacket.getFluidAmount(st) * mult; + if (result > Integer.MAX_VALUE) { + return false; + } + } else { + long result = (long) s.getStack().stackSize * mult; + if (result > Integer.MAX_VALUE) { + return false; + } } } } @@ -540,8 +548,11 @@ public abstract class FCContainerEncodeTerminal extends ContainerItemMonitor for (final Slot s : enabledSlots) { ItemStack st = s.getStack(); if (st != null) { - st.stackSize *= mult; - s.putStack(st); + if (st.getItem() instanceof ItemFluidPacket) { + ItemFluidPacket.setFluidAmount(st, ItemFluidPacket.getFluidAmount(st) * mult); + } else { + st.stackSize *= mult; + } } } } diff --git a/src/main/java/com/glodblock/github/common/item/ItemFluidPacket.java b/src/main/java/com/glodblock/github/common/item/ItemFluidPacket.java index 6bffaaf9..bb475cb3 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemFluidPacket.java +++ b/src/main/java/com/glodblock/github/common/item/ItemFluidPacket.java @@ -12,6 +12,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.Constants; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; @@ -88,6 +89,22 @@ public class ItemFluidPacket extends FCBaseItem { return stack != null ? getFluidStack(stack.getItemStack()) : null; } + public static void setFluidAmount(ItemStack stack, int amount) { + if (stack == null || !stack.hasTagCompound() + || stack.getTagCompound().hasKey("FluidStack", Constants.NBT.TAG_COMPOUND)) { + return; + } + stack.getTagCompound().getCompoundTag("FluidStack").setInteger("Amount", amount); + } + + public static int getFluidAmount(ItemStack stack) { + if (stack == null || !stack.hasTagCompound()) { + return 0; + } + // Default to 0 if no tag exists + return stack.getTagCompound().getCompoundTag("FluidStack").getInteger("Amount"); + } + @Nullable public static ItemStack newStack(@Nullable FluidStack fluid) { if (fluid == null || fluid.amount == 0) {