From f3d0e4e681ee94c603c9e6000816a560839e7cd3 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 27 Nov 2016 12:45:10 +0100 Subject: [PATCH] Fix craftable items having stack size 0 --- .../raoulvdberge/refinedstorage/RSUtils.java | 3 +- .../storage/item/ItemStorageCache.java | 13 ++------ .../apiimpl/util/ItemStackList.java | 6 ++-- .../refinedstorage/gui/grid/GuiGrid.java | 2 +- .../gui/grid/stack/ClientStackItem.java | 20 ++++++++++-- .../network/MessageGridItemDelta.java | 13 +++++--- .../network/MessageGridItemUpdate.java | 31 +++++++++++++++++-- 7 files changed, 62 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java b/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java index c89aa7b42..1db95742d 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java @@ -59,13 +59,14 @@ public final class RSUtils { QUANTITY_FORMATTER.setRoundingMode(RoundingMode.DOWN); } - public static void writeItemStack(ByteBuf buf, INetworkMaster network, ItemStack stack) { + public static void writeItemStack(ByteBuf buf, INetworkMaster network, ItemStack stack, boolean outputFromPattern) { buf.writeInt(Item.getIdFromItem(stack.getItem())); buf.writeInt(stack.getCount()); buf.writeInt(stack.getItemDamage()); ByteBufUtils.writeTag(buf, stack.getItem().getNBTShareTag(stack)); buf.writeInt(API.instance().getItemStackHashCode(stack)); buf.writeBoolean(network.hasPattern(stack)); + buf.writeBoolean(outputFromPattern); } public static void writeFluidStack(ByteBuf buf, FluidStack stack) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/item/ItemStorageCache.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/item/ItemStorageCache.java index 47e2203a7..c842ab0e6 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/item/ItemStorageCache.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/item/ItemStorageCache.java @@ -1,6 +1,5 @@ package com.raoulvdberge.refinedstorage.apiimpl.storage.item; -import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern; import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; import com.raoulvdberge.refinedstorage.api.storage.AccessType; import com.raoulvdberge.refinedstorage.api.storage.item.IItemStorage; @@ -39,20 +38,12 @@ public class ItemStorageCache implements IItemStorageCache { } for (ItemStack stack : storage.getStacks()) { - if (stack != null) { + if (!stack.isEmpty()) { add(stack, stack.getCount(), true); } } } - for (ICraftingPattern pattern : network.getPatterns()) { - for (ItemStack output : pattern.getOutputs()) { - ItemStack patternStack = output.copy(); - patternStack.setCount(0); - add(patternStack, patternStack.getCount(), true); - } - } - network.sendItemStorageToClient(); } @@ -67,7 +58,7 @@ public class ItemStorageCache implements IItemStorageCache { @Override public synchronized void remove(@Nonnull ItemStack stack, int size) { - if (list.remove(stack, size, !network.hasPattern(stack))) { + if (list.remove(stack, size, true)) { network.sendItemStorageDeltaToClient(stack, -size); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/ItemStackList.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/ItemStackList.java index 51360b838..c44259eae 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/ItemStackList.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/ItemStackList.java @@ -39,7 +39,7 @@ public class ItemStackList implements IItemStackList { @Override public boolean remove(@Nonnull ItemStack stack, int size, boolean removeIfReachedZero) { for (ItemStack otherStack : stacks.get(stack.getItem())) { - if (otherStack.getCount() > 0 && API.instance().getComparer().isEqualNoQuantity(otherStack, stack)) { + if (API.instance().getComparer().isEqualNoQuantity(otherStack, stack)) { if (otherStack.getCount() - size <= 0 && removeIfReachedZero) { stacks.remove(otherStack.getItem(), otherStack); } else { @@ -56,7 +56,7 @@ public class ItemStackList implements IItemStackList { @Override public boolean trackedRemove(@Nonnull ItemStack stack, int size, boolean removeIfReachedZero) { for (ItemStack otherStack : stacks.get(stack.getItem())) { - if (otherStack.getCount() > 0 && API.instance().getComparer().isEqualNoQuantity(otherStack, stack)) { + if (API.instance().getComparer().isEqualNoQuantity(otherStack, stack)) { ItemStack removed = ItemHandlerHelper.copyStackWithSize(otherStack, Math.min(size, otherStack.getCount())); this.removeTracker.add(removed); @@ -91,7 +91,7 @@ public class ItemStackList implements IItemStackList { public ItemStack get(@Nonnull ItemStack stack, int flags) { // When the oredict flag is set all stacks need to be checked not just the ones matching the item for (ItemStack otherStack : (flags & IComparer.COMPARE_OREDICT) == IComparer.COMPARE_OREDICT ? stacks.values() : stacks.get(stack.getItem())) { - if (otherStack.getCount() > 0 && API.instance().getComparer().isEqual(otherStack, stack, flags)) { + if (API.instance().getComparer().isEqual(otherStack, stack, flags)) { return otherStack; } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java index fea06210e..f73386363 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java @@ -369,7 +369,7 @@ public class GuiGrid extends GuiBase { if (grid.getType() != EnumGridType.FLUID && (held.isEmpty() || (!held.isEmpty() && clickedButton == 2))) { ClientStackItem stack = (ClientStackItem) STACKS.get(slotNumber); - if (stack.isCraftable() && (stack.getQuantity() == 0 || (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown()))) { + if (stack.isCraftable() && (stack.isOutputFromPattern() || (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown()))) { FMLCommonHandler.instance().showGuiScreen(new GuiCraftingStart(this, container.getPlayer(), stack)); } else { int flags = 0; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/ClientStackItem.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/ClientStackItem.java index e52e82ec9..2e20a8c5e 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/ClientStackItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/ClientStackItem.java @@ -17,12 +17,14 @@ public class ClientStackItem implements IClientStack { private int hash; private ItemStack stack; private boolean craftable; + private boolean outputFromPattern; public ClientStackItem(ByteBuf buf) { stack = new ItemStack(Item.getItemById(buf.readInt()), buf.readInt(), buf.readInt()); stack.setTagCompound(ByteBufUtils.readTag(buf)); hash = buf.readInt(); craftable = buf.readBoolean(); + setOutputFromPattern(buf.readBoolean()); } public ItemStack getStack() { @@ -33,6 +35,18 @@ public class ClientStackItem implements IClientStack { return craftable; } + public boolean isOutputFromPattern() { + return outputFromPattern; + } + + public void setOutputFromPattern(boolean outputFromPattern) { + this.outputFromPattern = outputFromPattern; + + if (outputFromPattern) { + stack.setCount(1); + } + } + @Override public int getHash() { return hash; @@ -72,12 +86,12 @@ public class ClientStackItem implements IClientStack { private String getQuantityForDisplay(boolean advanced) { int qty = stack.getCount(); - if (advanced && qty > 1) { + if (outputFromPattern) { + return I18n.format("gui.refinedstorage:grid.craft"); + } else if (advanced && qty > 1) { return String.valueOf(qty); } else if (qty == 1) { return null; - } else if (qty == 0) { - return I18n.format("gui.refinedstorage:grid.craft"); } return RSUtils.formatQuantity(qty); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridItemDelta.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridItemDelta.java index faa81238b..106cd07d7 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridItemDelta.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridItemDelta.java @@ -35,7 +35,7 @@ public class MessageGridItemDelta implements IMessage, IMessageHandler