diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java b/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java index a638e899e..1023a337e 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java @@ -50,6 +50,7 @@ import net.minecraftforge.items.wrapper.InvWrapper; import net.minecraftforge.items.wrapper.SidedInvWrapper; import org.apache.commons.lang3.tuple.Pair; +import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.math.RoundingMode; import java.text.DecimalFormat; @@ -116,10 +117,15 @@ public final class RSUtils { return Pair.of(buf.readInt(), new FluidStack(FluidRegistry.getFluid(ByteBufUtils.readUTF8String(buf)), buf.readInt(), ByteBufUtils.readTag(buf))); } - public static ItemStack getStack(@Nullable ItemStack stack) { + public static ItemStack transformNullToEmpty(@Nullable ItemStack stack) { return stack == null ? ItemStack.EMPTY : stack; } + @Nullable + public static ItemStack transformEmptyToNull(@Nonnull ItemStack stack) { + return stack.isEmpty() ? null : stack; + } + @SuppressWarnings("unchecked") public static void createStorages(ItemStack disk, int slot, IStorageDisk[] itemStorages, IStorageDisk[] fluidStorages, Function itemStorageWrapper, Function fluidStorageWrapper) { if (disk.isEmpty()) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/FluidGridHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/FluidGridHandler.java index cc5b10e47..1dc6c2c83 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/FluidGridHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/FluidGridHandler.java @@ -89,7 +89,7 @@ public class FluidGridHandler implements IFluidGridHandler { @Override public void onInsertHeldContainer(EntityPlayerMP player) { - player.inventory.setItemStack(RSUtils.getStack(onInsert(player, player.inventory.getItemStack()))); + player.inventory.setItemStack(RSUtils.transformNullToEmpty(onInsert(player, player.inventory.getItemStack()))); player.updateHeldItem(); } } 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 a136d4afa..f0975c4cf 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 @@ -137,7 +137,7 @@ public class ItemGridHandler implements IItemGridHandler { } } } else { - player.inventory.setItemStack(RSUtils.getStack(network.insertItem(stack, size, false))); + player.inventory.setItemStack(RSUtils.transformNullToEmpty(network.insertItem(stack, size, false))); } player.updateHeldItem(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java index 96625b729..7d1cfe30b 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java @@ -256,7 +256,7 @@ public class NetworkNodeGrid extends NetworkNode implements IGrid { ItemStack took = network.extractItem(possibility, 1, IComparer.COMPARE_NBT | IComparer.COMPARE_STRIP_NBT | (possibility.getItem().isDamageable() ? 0 : IComparer.COMPARE_DAMAGE), false); if (took != null) { - matrix.setInventorySlotContents(i, RSUtils.getStack(took)); + matrix.setInventorySlotContents(i, RSUtils.transformNullToEmpty(took)); found = true; @@ -322,7 +322,7 @@ public class NetworkNodeGrid extends NetworkNode implements IGrid { } } else if (!slot.isEmpty()) { if (slot.getCount() == 1 && network != null) { - matrix.setInventorySlotContents(i, RSUtils.getStack(network.extractItem(slot, 1, false))); + matrix.setInventorySlotContents(i, RSUtils.transformNullToEmpty(network.extractItem(slot, 1, false))); } else { matrix.decrStackSize(i, 1); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java index 6988ec205..b13b28482 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java @@ -77,7 +77,7 @@ public class NetworkNodeInterface extends NetworkNode implements IComparable { if (wanted.isEmpty()) { if (!got.isEmpty()) { - exportItems.setStackInSlot(i, RSUtils.getStack(network.insertItemTracked(got, got.getCount()))); + exportItems.setStackInSlot(i, RSUtils.transformNullToEmpty(network.insertItemTracked(got, got.getCount()))); } } else { int delta = got.isEmpty() ? wanted.getCount() : (wanted.getCount() - got.getCount()); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java index fdaa5422e..02b9e80ad 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java @@ -168,12 +168,12 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab ItemStack stack = storage.getStacks().get(i); ItemStack extracted = storage.extract(stack, upgrades.getItemInteractCount(), compare, false); - if (extracted == null || extracted.isEmpty()) { + if (extracted == null) { continue; } ItemStack remainder = network.insertItem(extracted, extracted.getCount(), false); - if (remainder == null || remainder.isEmpty()) { + if (remainder == null) { break; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemCyclops.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemCyclops.java index 7064ea331..54b867a57 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemCyclops.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemCyclops.java @@ -42,6 +42,7 @@ public class StorageItemCyclops extends StorageItemExternal { if (inventoryHash != oldInventoryHash) { super.detectChanges(network); + oldInventoryHash = inventoryHash; } } @@ -75,7 +76,7 @@ public class StorageItemCyclops extends StorageItemExternal { InventoryTileEntityBase inv = cyclopsInv.get(); if (inv != null && IFilterable.canTake(externalStorage.getItemFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) { - return SlotlessItemHandlerHelper.insertItem(inv, opposite, stack, size, simulate); + return RSUtils.transformEmptyToNull(SlotlessItemHandlerHelper.insertItem(inv, opposite, stack, size, simulate)); } return ItemHandlerHelper.copyStackWithSize(stack, size); @@ -86,7 +87,7 @@ public class StorageItemCyclops extends StorageItemExternal { public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, boolean simulate) { InventoryTileEntityBase inv = cyclopsInv.get(); - return inv != null ? SlotlessItemHandlerHelper.extractItem(inv, opposite, stack, size, flags, simulate) : null; + return inv != null ? RSUtils.transformEmptyToNull(SlotlessItemHandlerHelper.extractItem(inv, opposite, stack, size, flags, simulate)) : null; } private NonNullList getStacks(@Nullable InventoryTileEntityBase inv) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemItemHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemItemHandler.java index e11cc082d..1c5162486 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemItemHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemItemHandler.java @@ -55,7 +55,7 @@ public class StorageItemItemHandler extends StorageItemExternal { IItemHandler handler = handlerSupplier.get(); if (handler != null && IFilterable.canTake(externalStorage.getItemFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) { - return ItemHandlerHelper.insertItem(handler, ItemHandlerHelper.copyStackWithSize(stack, size), simulate); + return RSUtils.transformEmptyToNull(ItemHandlerHelper.insertItem(handler, ItemHandlerHelper.copyStackWithSize(stack, size), simulate)); } return ItemHandlerHelper.copyStackWithSize(stack, size); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerGrid.java index 03b5d33c6..6b37037fc 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerGrid.java @@ -140,9 +140,9 @@ public class ContainerGrid extends ContainerBase { IFluidGridHandler fluidHandler = grid.getNetwork().getFluidGridHandler(); if (grid.getType() != EnumGridType.FLUID && itemHandler != null) { - slot.putStack(RSUtils.getStack(itemHandler.onInsert((EntityPlayerMP) player, slot.getStack()))); + slot.putStack(RSUtils.transformNullToEmpty(itemHandler.onInsert((EntityPlayerMP) player, slot.getStack()))); } else if (grid.getType() == EnumGridType.FLUID && fluidHandler != null) { - slot.putStack(RSUtils.getStack(fluidHandler.onInsert((EntityPlayerMP) player, slot.getStack()))); + slot.putStack(RSUtils.transformNullToEmpty(fluidHandler.onInsert((EntityPlayerMP) player, slot.getStack()))); } detectAndSendChanges(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridCraftingClear.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridCraftingClear.java index 039f68de9..7c822ca83 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridCraftingClear.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridCraftingClear.java @@ -40,7 +40,7 @@ public class MessageGridCraftingClear extends MessageHandlerPlayerToServer