From 8ad836db55307b2ce45693d7c654edb1e2a3ca58 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 26 Nov 2016 21:18:28 +0100 Subject: [PATCH] Fix subtle bugs, not finished yet in a long shot --- .../com/raoulvdberge/refinedstorage/RS.java | 2 +- .../raoulvdberge/refinedstorage/RSUtils.java | 9 ++++-- .../apiimpl/autocrafting/CraftingPattern.java | 30 +++++++++++-------- .../apiimpl/network/grid/ItemGridHandler.java | 16 +++++----- .../apiimpl/util/ItemStackList.java | 10 +++---- .../container/ContainerBase.java | 14 ++++----- .../container/ContainerGrid.java | 7 +++-- .../refinedstorage/gui/grid/GuiGrid.java | 6 ++-- .../inventory/ItemHandlerFluid.java | 2 +- .../network/MessageGridItemDelta.java | 4 +-- .../tile/config/IFilterable.java | 4 +-- 11 files changed, 57 insertions(+), 47 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RS.java b/src/main/java/com/raoulvdberge/refinedstorage/RS.java index 0e6b0b2d7..e7548b9a8 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RS.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RS.java @@ -35,7 +35,7 @@ public final class RS { public final CreativeTabs tab = new CreativeTabs(ID) { @Override public ItemStack getTabIconItem() { - return getIconItemStack(); + return new ItemStack(RSItems.STORAGE_HOUSING); } }; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java b/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java index feb83954f..3a2a15004 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java @@ -31,6 +31,7 @@ import net.minecraftforge.items.wrapper.InvWrapper; import net.minecraftforge.items.wrapper.SidedInvWrapper; import org.apache.commons.lang3.tuple.Pair; +import javax.annotation.Nullable; import java.math.RoundingMode; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; @@ -84,6 +85,10 @@ public final class RSUtils { } } + public static ItemStack getStack(@Nullable ItemStack stack) { + return stack == null ? ItemStack.EMPTY : stack; + } + public static NonNullList toNonNullList(List list) { NonNullList other = NonNullList.create(); @@ -100,7 +105,7 @@ public final class RSUtils { NBTTagList tagList = new NBTTagList(); for (int i = 0; i < handler.getSlots(); i++) { - if (handler.getStackInSlot(i) != null) { + if (!handler.getStackInSlot(i).isEmpty()) { NBTTagCompound stackTag = new NBTTagCompound(); stackTag.setInteger(NBT_SLOT, i); @@ -134,7 +139,7 @@ public final class RSUtils { NBTTagList tagList = new NBTTagList(); for (int i = 0; i < inventory.getSizeInventory(); i++) { - if (inventory.getStackInSlot(i) != null) { + if (!inventory.getStackInSlot(i).isEmpty()) { NBTTagCompound stackTag = new NBTTagCompound(); stackTag.setInteger(NBT_SLOT, i); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingPattern.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingPattern.java index 57ac3cbea..3ab92832b 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingPattern.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingPattern.java @@ -42,8 +42,12 @@ public class CraftingPattern implements ICraftingPattern { for (int i = 0; i < 9; ++i) { ItemStack slot = ItemPattern.getSlot(stack, i); + inputs.add(slot); - inv.setInventorySlotContents(i, slot); + + if (slot != null) { + inv.setInventorySlotContents(i, slot); + } } if (!ItemPattern.isProcessing(stack)) { @@ -88,7 +92,7 @@ public class CraftingPattern implements ICraftingPattern { List cleaned = new LinkedList<>(); for (ItemStack in : (List) input) { ItemStack stripped = in.copy(); - if (mekanism && stripped.hasTagCompound()){ + if (mekanism && stripped.hasTagCompound()) { stripped.getTagCompound().removeTag("mekData"); } if (stripped.getItemDamage() == OreDictionary.WILDCARD_VALUE) { @@ -125,17 +129,17 @@ public class CraftingPattern implements ICraftingPattern { if (ids == null || ids.length == 0) { oreInputs.add(Collections.singletonList(input)); } else { - oreInputs.add( - Arrays.stream(ids) - .mapToObj(OreDictionary::getOreName) - .map(OreDictionary::getOres) - .flatMap(List::stream) - .map(ItemStack::copy) - .map(s -> { - s.setCount(input.getCount()); - return s; - }) - .collect(Collectors.toList())); + oreInputs.add(Arrays.stream(ids) + .mapToObj(OreDictionary::getOreName) + .map(OreDictionary::getOres) + .flatMap(List::stream) + .map(ItemStack::copy) + .map(s -> { + s.setCount(input.getCount()); + return s; + }) + .collect(Collectors.toList()) + ); } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/ItemGridHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/ItemGridHandler.java index 18ae2ee8d..b45dd6445 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/ItemGridHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/ItemGridHandler.java @@ -1,6 +1,7 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.grid; import com.raoulvdberge.refinedstorage.RS; +import com.raoulvdberge.refinedstorage.RSUtils; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler; @@ -40,10 +41,10 @@ public class ItemGridHandler implements IItemGridHandler { ItemStack held = player.inventory.getItemStack(); if (single) { - if (held != null && (!API.instance().getComparer().isEqualNoQuantity(item, held) || held.getCount() + 1 > held.getMaxStackSize())) { + if (!held.isEmpty() && (!API.instance().getComparer().isEqualNoQuantity(item, held) || held.getCount() + 1 > held.getMaxStackSize())) { return; } - } else if (player.inventory.getItemStack() != null) { + } else if (!player.inventory.getItemStack().isEmpty()) { return; } @@ -69,7 +70,7 @@ public class ItemGridHandler implements IItemGridHandler { if ((flags & EXTRACT_SHIFT) == EXTRACT_SHIFT) { IItemHandler playerInventory = player.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.UP); - if (ItemHandlerHelper.insertItem(playerInventory, took, true) == null) { + if (ItemHandlerHelper.insertItem(playerInventory, took, true).isEmpty()) { took = network.extractItem(item, size, false); ItemHandlerHelper.insertItem(playerInventory, took, false); @@ -77,7 +78,7 @@ public class ItemGridHandler implements IItemGridHandler { } else { took = network.extractItem(item, size, false); - if (single && held != null) { + if (single && !held.isEmpty()) { held.grow(1); } else { player.inventory.setItemStack(took); @@ -109,7 +110,7 @@ public class ItemGridHandler implements IItemGridHandler { @Override public void onInsertHeldItem(EntityPlayerMP player, boolean single) { - if (player.inventory.getItemStack() == null) { + if (player.inventory.getItemStack().isEmpty()) { return; } @@ -123,11 +124,11 @@ public class ItemGridHandler implements IItemGridHandler { stack.shrink(size); if (stack.getCount() == 0) { - player.inventory.setItemStack(null); + player.inventory.setItemStack(ItemStack.EMPTY); } } } else { - player.inventory.setItemStack(network.insertItem(stack, size, false)); + player.inventory.setItemStack(RSUtils.getStack(network.insertItem(stack, size, false))); } player.updateHeldItem(); @@ -168,6 +169,7 @@ public class ItemGridHandler implements IItemGridHandler { ICraftingTask task = new CraftingTask(network, stack, network.getPattern(stack), quantity); task.calculate(); + task.getMissing().clear(); network.addCraftingTask(task); 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 08f9d6140..51360b838 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/ItemStackList.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/ItemStackList.java @@ -40,15 +40,13 @@ public class ItemStackList implements IItemStackList { 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)) { - otherStack.shrink(size); - - boolean success = otherStack.getCount() >= 0; - - if (otherStack.getCount() <= 0 && removeIfReachedZero) { + if (otherStack.getCount() - size <= 0 && removeIfReachedZero) { stacks.remove(otherStack.getItem(), otherStack); + } else { + otherStack.shrink(size); } - return success; + return true; } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerBase.java b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerBase.java index 44bb42c5c..c4474b08b 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerBase.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerBase.java @@ -60,8 +60,8 @@ public abstract class ContainerBase extends Container { if (slot instanceof SlotSpecimen) { if (((SlotSpecimen) slot).isWithSize()) { if (clickType == ClickType.QUICK_MOVE) { - slot.putStack(null); - } else if (player.inventory.getItemStack() != null) { + slot.putStack(ItemStack.EMPTY); + } else if (!player.inventory.getItemStack().isEmpty()) { int amount = player.inventory.getItemStack().getCount(); slot.putStack(ItemHandlerHelper.copyStackWithSize(player.inventory.getItemStack(), amount)); @@ -76,16 +76,16 @@ public abstract class ContainerBase extends Container { slot.getStack().setCount(amount); } - } else if (player.inventory.getItemStack() == null) { - slot.putStack(null); + } else if (player.inventory.getItemStack().isEmpty()) { + slot.putStack(ItemStack.EMPTY); } else if (slot.isItemValid(player.inventory.getItemStack())) { slot.putStack(player.inventory.getItemStack().copy()); } return player.inventory.getItemStack(); } else if (slot instanceof SlotSpecimenLegacy) { - if (player.inventory.getItemStack() == null) { - slot.putStack(null); + if (player.inventory.getItemStack().isEmpty()) { + slot.putStack(ItemStack.EMPTY); } else if (slot.isItemValid(player.inventory.getItemStack())) { slot.putStack(player.inventory.getItemStack().copy()); } @@ -100,7 +100,7 @@ public abstract class ContainerBase extends Container { @Override public ItemStack transferStackInSlot(EntityPlayer player, int slotIndex) { - return null; + return ItemStack.EMPTY; } protected ItemStack mergeItemStackToSpecimen(ItemStack stack, int begin, int end) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerGrid.java index 11b26d6e5..88765bf84 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerGrid.java @@ -1,5 +1,6 @@ package com.raoulvdberge.refinedstorage.container; +import com.raoulvdberge.refinedstorage.RSUtils; import com.raoulvdberge.refinedstorage.block.EnumGridType; import com.raoulvdberge.refinedstorage.container.slot.*; import com.raoulvdberge.refinedstorage.tile.TileBase; @@ -109,9 +110,9 @@ public class ContainerGrid extends ContainerBase { ((TileGrid) grid).onCraftedShift(this, player); } else if (slot != patternResultSlot && !(slot instanceof SlotSpecimenLegacy)) { if (grid.getType() != EnumGridType.FLUID && grid.getItemHandler() != null) { - slot.putStack(grid.getItemHandler().onInsert((EntityPlayerMP) player, slot.getStack())); + slot.putStack(RSUtils.getStack(grid.getItemHandler().onInsert((EntityPlayerMP) player, slot.getStack()))); } else if (grid.getType() == EnumGridType.FLUID && grid.getFluidHandler() != null) { - slot.putStack(grid.getFluidHandler().onInsert(slot.getStack())); + slot.putStack(RSUtils.getStack(grid.getFluidHandler().onInsert(slot.getStack()))); } detectAndSendChanges(); @@ -119,6 +120,6 @@ public class ContainerGrid extends ContainerBase { } } - return null; + return ItemStack.EMPTY; } } 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 b957761e1..fea06210e 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java @@ -361,12 +361,12 @@ public class GuiGrid extends GuiBase { ItemStack held = container.getPlayer().inventory.getItemStack(); - if (isOverSlotArea(mouseX - guiLeft, mouseY - guiTop) && held != null && (clickedButton == 0 || clickedButton == 1)) { + if (isOverSlotArea(mouseX - guiLeft, mouseY - guiTop) && !held.isEmpty() && (clickedButton == 0 || clickedButton == 1)) { RS.INSTANCE.network.sendToServer(grid.getType() == EnumGridType.FLUID ? new MessageGridFluidInsertHeld() : new MessageGridItemInsertHeld(clickedButton == 1)); } if (isOverSlotWithItem()) { - if (grid.getType() != EnumGridType.FLUID && (held == null || (held != null && clickedButton == 2))) { + 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()))) { @@ -388,7 +388,7 @@ public class GuiGrid extends GuiBase { RS.INSTANCE.network.sendToServer(new MessageGridItemPull(stack.getHash(), flags)); } - } else if (grid.getType() == EnumGridType.FLUID && held == null) { + } else if (grid.getType() == EnumGridType.FLUID && held.isEmpty()) { RS.INSTANCE.network.sendToServer(new MessageGridFluidPull(STACKS.get(slotNumber).getHash(), GuiScreen.isShiftKeyDown())); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/inventory/ItemHandlerFluid.java b/src/main/java/com/raoulvdberge/refinedstorage/inventory/ItemHandlerFluid.java index de9522ee8..d7d4a2bfc 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/inventory/ItemHandlerFluid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/inventory/ItemHandlerFluid.java @@ -21,7 +21,7 @@ public class ItemHandlerFluid extends ItemHandlerBasic { ItemStack stack = getStackInSlot(slot); - if (stack == null) { + if (stack.isEmpty()) { fluids[slot] = null; } else { fluids[slot] = RSUtils.getFluidFromStack(ItemHandlerHelper.copyStackWithSize(stack, 1), true); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridItemDelta.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridItemDelta.java index 0900fed11..faa81238b 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridItemDelta.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridItemDelta.java @@ -31,8 +31,6 @@ public class MessageGridItemDelta implements IMessage, IMessageHandler