From 605e4f4ec69ec2ed0bba434bf834e175fbaa1d3c Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 28 Jan 2017 21:11:59 +0100 Subject: [PATCH] Protect against null in cyclops storage --- .../externalstorage/StorageItemCyclops.java | 16 ++++-- .../SlotlessItemHandlerHelper.java | 52 ++++++++++--------- 2 files changed, 40 insertions(+), 28 deletions(-) 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 b06455f04..3b56ae229 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 @@ -73,7 +73,7 @@ public class StorageItemCyclops extends StorageItemExternal { public ItemStack insert(@Nonnull ItemStack stack, int size, boolean simulate) { InventoryTileEntityBase inv = cyclopsInv.get(); - if (IFilterable.canTake(externalStorage.getItemFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) { + if (inv != null && IFilterable.canTake(externalStorage.getItemFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) { return SlotlessItemHandlerHelper.insertItem(inv, opposite, stack, size, simulate); } @@ -84,16 +84,24 @@ public class StorageItemCyclops extends StorageItemExternal { @Override public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, boolean simulate) { InventoryTileEntityBase inv = cyclopsInv.get(); - return SlotlessItemHandlerHelper.extractItem(inv, opposite, stack, size, flags, simulate); + + return inv != null ? SlotlessItemHandlerHelper.extractItem(inv, opposite, stack, size, flags, simulate) : null; } private NonNullList getStacks(@Nullable InventoryTileEntityBase inv) { if (inv != null) { if (inv.getInventory() instanceof IndexedSlotlessItemHandlerWrapper.IInventoryIndexReference) { return ((IndexedSlotlessItemHandlerWrapper.IInventoryIndexReference) inv.getInventory()) - .getIndex().values().stream().flatMap(m -> m.valueCollection().stream()).map(ItemStack::copy).collect(RSUtils.toNonNullList()); + .getIndex() + .values() + .stream() + .flatMap(m -> m.valueCollection().stream()) + .map(ItemStack::copy) + .collect(RSUtils.toNonNullList()); } else { - return Arrays.stream(((SimpleInventory) inv.getInventory()).getItemStacks()).map(ItemStack::copy).collect(RSUtils.toNonNullList()); + return Arrays.stream(((SimpleInventory) inv.getInventory()).getItemStacks()) + .map(ItemStack::copy) + .collect(RSUtils.toNonNullList()); } } else { return RSUtils.emptyNonNullList(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/cyclopscore/SlotlessItemHandlerHelper.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/cyclopscore/SlotlessItemHandlerHelper.java index a79cd385e..bf7b6c01c 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/integration/cyclopscore/SlotlessItemHandlerHelper.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/cyclopscore/SlotlessItemHandlerHelper.java @@ -15,45 +15,48 @@ public class SlotlessItemHandlerHelper { return entity != null && entity.hasCapability(SlotlessItemHandlerConfig.CAPABILITY, facing); } - public static ISlotlessItemHandler getSlotlessHandler(TileEntity entity, EnumFacing facing) { - return entity.getCapability(SlotlessItemHandlerConfig.CAPABILITY, facing); + public static ISlotlessItemHandler getSlotlessHandler(TileEntity tile, EnumFacing facing) { + return tile.getCapability(SlotlessItemHandlerConfig.CAPABILITY, facing); } - public static ItemStack insertItem(TileEntity entity, EnumFacing facing, @Nonnull ItemStack stack, boolean simulate) { - return insertItem(getSlotlessHandler(entity, facing), stack, stack.getCount(), simulate); + public static ItemStack insertItem(TileEntity tile, EnumFacing facing, @Nonnull ItemStack stack, boolean simulate) { + return insertItem(getSlotlessHandler(tile, facing), stack, stack.getCount(), simulate); } - public static ItemStack insertItem(TileEntity entity, EnumFacing facing, @Nonnull ItemStack stack, int size, boolean simulate) { - return insertItem(getSlotlessHandler(entity, facing), stack, size, simulate); + public static ItemStack insertItem(TileEntity tile, EnumFacing facing, @Nonnull ItemStack stack, int size, boolean simulate) { + return insertItem(getSlotlessHandler(tile, facing), stack, size, simulate); } - public static ItemStack insertItem(ISlotlessItemHandler slotlessItemHandler, @Nonnull ItemStack stack, int size, boolean simulate) { - ItemStack remainder = slotlessItemHandler.insertItem(ItemHandlerHelper.copyStackWithSize(stack, size), simulate); + public static ItemStack insertItem(ISlotlessItemHandler handler, @Nonnull ItemStack stack, int size, boolean simulate) { + ItemStack remainder = handler.insertItem(ItemHandlerHelper.copyStackWithSize(stack, size), simulate); int remainderCount = -1; - while (!remainder.isEmpty() && remainder.getCount() != remainderCount) - { + + while (!remainder.isEmpty() && remainder.getCount() != remainderCount) { remainderCount = remainder.getCount(); - remainder = slotlessItemHandler.insertItem(remainder.copy(), simulate); + remainder = handler.insertItem(remainder.copy(), simulate); } + return remainder; } - public static ItemStack extractItem(TileEntity entity, EnumFacing facing, @Nonnull ItemStack stack, int size, int flags, boolean simulate) { - return extractItem(getSlotlessHandler(entity, facing), stack, size, flags, simulate); + public static ItemStack extractItem(TileEntity tile, EnumFacing facing, @Nonnull ItemStack stack, int size, int flags, boolean simulate) { + return extractItem(getSlotlessHandler(tile, facing), stack, size, flags, simulate); } - public static ItemStack extractItem(TileEntity entity, EnumFacing facing, @Nonnull ItemStack stack, int size, boolean simulate) { - return extractItem(getSlotlessHandler(entity, facing), stack, size, simulate); + public static ItemStack extractItem(TileEntity tile, EnumFacing facing, @Nonnull ItemStack stack, int size, boolean simulate) { + return extractItem(getSlotlessHandler(tile, facing), stack, size, simulate); } - public static ItemStack extractItem(ISlotlessItemHandler slotlessItemHandler, @Nonnull ItemStack stack, int size, boolean simulate) { - return extractItem(slotlessItemHandler, stack, size, IComparer.COMPARE_DAMAGE | IComparer.COMPARE_NBT, simulate); + public static ItemStack extractItem(ISlotlessItemHandler handler, @Nonnull ItemStack stack, int size, boolean simulate) { + return extractItem(handler, stack, size, IComparer.COMPARE_DAMAGE | IComparer.COMPARE_NBT, simulate); } - public static ItemStack extractItem(ISlotlessItemHandler slotlessItemHandler, @Nonnull ItemStack stack, int size, int flags, boolean simulate) { - ItemStack extracted = slotlessItemHandler.extractItem(ItemHandlerHelper.copyStackWithSize(stack, size), CyclopsComparer.comparerFlagsToItemMatch(flags), simulate); + public static ItemStack extractItem(ISlotlessItemHandler handler, @Nonnull ItemStack stack, int size, int flags, boolean simulate) { + ItemStack extracted = handler.extractItem(ItemHandlerHelper.copyStackWithSize(stack, size), CyclopsComparer.comparerFlagsToItemMatch(flags), simulate); + while (!extracted.isEmpty() && extracted.getCount() < size) { - ItemStack extraExtract = slotlessItemHandler.extractItem(ItemHandlerHelper.copyStackWithSize(extracted, size - extracted.getCount()), CyclopsComparer.comparerFlagsToItemMatch(flags), simulate); + ItemStack extraExtract = handler.extractItem(ItemHandlerHelper.copyStackWithSize(extracted, size - extracted.getCount()), CyclopsComparer.comparerFlagsToItemMatch(flags), simulate); + if (!extraExtract.isEmpty()) { extracted.grow(extraExtract.getCount()); } else { @@ -61,14 +64,15 @@ public class SlotlessItemHandlerHelper { break; } } + return extracted; } - public static ItemStack extractItem(TileEntity entity, EnumFacing facing, int size, boolean simulate) { - return extractItem(getSlotlessHandler(entity, facing), size, simulate); + public static ItemStack extractItem(TileEntity tile, EnumFacing facing, int size, boolean simulate) { + return extractItem(getSlotlessHandler(tile, facing), size, simulate); } - public static ItemStack extractItem(ISlotlessItemHandler slotlessItemHandler, int size, boolean simulate) { - return slotlessItemHandler.extractItem(size, simulate); + public static ItemStack extractItem(ISlotlessItemHandler handler, int size, boolean simulate) { + return handler.extractItem(size, simulate); } }