From 1efa92adad54bbe51883456b307cb1271c1c36fa Mon Sep 17 00:00:00 2001 From: miozune Date: Wed, 25 Oct 2023 23:01:56 +0900 Subject: [PATCH] Fix stacksize overflow when overlaying recipe (#167) --- .../container/base/FCContainerEncodeTerminal.java | 3 +-- .../github/common/tile/TileFluidAutoFiller.java | 3 +-- .../com/glodblock/github/nei/object/OrderStack.java | 10 ++++------ src/main/java/com/glodblock/github/util/Util.java | 12 ++++++++++++ 4 files changed, 18 insertions(+), 10 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 e081d967..8360d040 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 @@ -492,8 +492,7 @@ public abstract class FCContainerEncodeTerminal extends ContainerItemMonitor protected NBTBase createItemTag(final ItemStack i) { final NBTTagCompound c = new NBTTagCompound(); if (i != null) { - i.writeToNBT(c); - c.setInteger("Count", i.stackSize); + Util.writeItemStackToNBT(i, c); } return c; } diff --git a/src/main/java/com/glodblock/github/common/tile/TileFluidAutoFiller.java b/src/main/java/com/glodblock/github/common/tile/TileFluidAutoFiller.java index d8ef4059..44c3eb5c 100644 --- a/src/main/java/com/glodblock/github/common/tile/TileFluidAutoFiller.java +++ b/src/main/java/com/glodblock/github/common/tile/TileFluidAutoFiller.java @@ -180,8 +180,7 @@ public class TileFluidAutoFiller extends AENetworkInvTile protected NBTBase createItemTag(final ItemStack i) { final NBTTagCompound c = new NBTTagCompound(); if (i != null) { - i.writeToNBT(c); - c.setInteger("Count", i.stackSize); + Util.writeItemStackToNBT(i, c); } return c; } diff --git a/src/main/java/com/glodblock/github/nei/object/OrderStack.java b/src/main/java/com/glodblock/github/nei/object/OrderStack.java index 255544f4..79d73a8e 100644 --- a/src/main/java/com/glodblock/github/nei/object/OrderStack.java +++ b/src/main/java/com/glodblock/github/nei/object/OrderStack.java @@ -94,14 +94,12 @@ public class OrderStack { if (RealStack instanceof ItemStack) { NBTTagCompound tmp = new NBTTagCompound(); tmp.setByte("t", (byte) ITEM); - ((ItemStack) RealStack).writeToNBT(tmp); + Util.writeItemStackToNBT(((ItemStack) RealStack), tmp); // replacement items if (items != null) { NBTTagList list = new NBTTagList(); for (ItemStack is : this.items) { - NBTTagCompound t = new NBTTagCompound(); - is.writeToNBT(t); - list.appendTag(t); + Util.writeItemStackToNBT(is, new NBTTagCompound()); } tmp.setTag(index + ":", list); } @@ -130,10 +128,10 @@ public class OrderStack { NBTTagList items = info.getTagList(index + ":", 10); for (int x = 0; x < items.tagCount(); x++) { final NBTTagCompound item = items.getCompoundTagAt(x); - list.add(ItemStack.loadItemStackFromNBT(item)); + list.add(Util.loadItemStackFromNBT(item)); } } - return new OrderStack<>(ItemStack.loadItemStackFromNBT(info), index, list.toArray(new ItemStack[0])); + return new OrderStack<>(Util.loadItemStackFromNBT(info), index, list.toArray(new ItemStack[0])); } case FLUID -> { return new OrderStack<>(FluidStack.loadFluidStackFromNBT(info), index); diff --git a/src/main/java/com/glodblock/github/util/Util.java b/src/main/java/com/glodblock/github/util/Util.java index 4b59962d..795c1e02 100644 --- a/src/main/java/com/glodblock/github/util/Util.java +++ b/src/main/java/com/glodblock/github/util/Util.java @@ -304,6 +304,18 @@ public final class Util { } } + public static void writeItemStackToNBT(ItemStack itemStack, NBTTagCompound tag) { + itemStack.writeToNBT(tag); + tag.setInteger("Count", itemStack.stackSize); + } + + public static ItemStack loadItemStackFromNBT(NBTTagCompound tag) { + ItemStack itemStack = ItemStack.loadItemStackFromNBT(tag); + if (itemStack == null) return null; + itemStack.stackSize = tag.getInteger("Count"); + return itemStack; + } + public static IAEFluidStack loadFluidStackFromNBT(final NBTTagCompound i) { final FluidStack t = FluidRegistry.getFluidStack(i.getString("FluidName"), 1); if (t == null) return null;