Protect against null in cyclops storage
This commit is contained in:
@@ -73,7 +73,7 @@ public class StorageItemCyclops extends StorageItemExternal {
|
|||||||
public ItemStack insert(@Nonnull ItemStack stack, int size, boolean simulate) {
|
public ItemStack insert(@Nonnull ItemStack stack, int size, boolean simulate) {
|
||||||
InventoryTileEntityBase inv = cyclopsInv.get();
|
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);
|
return SlotlessItemHandlerHelper.insertItem(inv, opposite, stack, size, simulate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,16 +84,24 @@ public class StorageItemCyclops extends StorageItemExternal {
|
|||||||
@Override
|
@Override
|
||||||
public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, boolean simulate) {
|
public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, boolean simulate) {
|
||||||
InventoryTileEntityBase inv = cyclopsInv.get();
|
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<ItemStack> getStacks(@Nullable InventoryTileEntityBase inv) {
|
private NonNullList<ItemStack> getStacks(@Nullable InventoryTileEntityBase inv) {
|
||||||
if (inv != null) {
|
if (inv != null) {
|
||||||
if (inv.getInventory() instanceof IndexedSlotlessItemHandlerWrapper.IInventoryIndexReference) {
|
if (inv.getInventory() instanceof IndexedSlotlessItemHandlerWrapper.IInventoryIndexReference) {
|
||||||
return ((IndexedSlotlessItemHandlerWrapper.IInventoryIndexReference) inv.getInventory())
|
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 {
|
} 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 {
|
} else {
|
||||||
return RSUtils.emptyNonNullList();
|
return RSUtils.emptyNonNullList();
|
||||||
|
|||||||
@@ -15,45 +15,48 @@ public class SlotlessItemHandlerHelper {
|
|||||||
return entity != null && entity.hasCapability(SlotlessItemHandlerConfig.CAPABILITY, facing);
|
return entity != null && entity.hasCapability(SlotlessItemHandlerConfig.CAPABILITY, facing);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ISlotlessItemHandler getSlotlessHandler(TileEntity entity, EnumFacing facing) {
|
public static ISlotlessItemHandler getSlotlessHandler(TileEntity tile, EnumFacing facing) {
|
||||||
return entity.getCapability(SlotlessItemHandlerConfig.CAPABILITY, facing);
|
return tile.getCapability(SlotlessItemHandlerConfig.CAPABILITY, facing);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ItemStack insertItem(TileEntity entity, EnumFacing facing, @Nonnull ItemStack stack, boolean simulate) {
|
public static ItemStack insertItem(TileEntity tile, EnumFacing facing, @Nonnull ItemStack stack, boolean simulate) {
|
||||||
return insertItem(getSlotlessHandler(entity, facing), stack, stack.getCount(), 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) {
|
public static ItemStack insertItem(TileEntity tile, EnumFacing facing, @Nonnull ItemStack stack, int size, boolean simulate) {
|
||||||
return insertItem(getSlotlessHandler(entity, facing), stack, size, simulate);
|
return insertItem(getSlotlessHandler(tile, facing), stack, size, simulate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ItemStack insertItem(ISlotlessItemHandler slotlessItemHandler, @Nonnull ItemStack stack, int size, boolean simulate) {
|
public static ItemStack insertItem(ISlotlessItemHandler handler, @Nonnull ItemStack stack, int size, boolean simulate) {
|
||||||
ItemStack remainder = slotlessItemHandler.insertItem(ItemHandlerHelper.copyStackWithSize(stack, size), simulate);
|
ItemStack remainder = handler.insertItem(ItemHandlerHelper.copyStackWithSize(stack, size), simulate);
|
||||||
int remainderCount = -1;
|
int remainderCount = -1;
|
||||||
while (!remainder.isEmpty() && remainder.getCount() != remainderCount)
|
|
||||||
{
|
while (!remainder.isEmpty() && remainder.getCount() != remainderCount) {
|
||||||
remainderCount = remainder.getCount();
|
remainderCount = remainder.getCount();
|
||||||
remainder = slotlessItemHandler.insertItem(remainder.copy(), simulate);
|
remainder = handler.insertItem(remainder.copy(), simulate);
|
||||||
}
|
}
|
||||||
|
|
||||||
return remainder;
|
return remainder;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ItemStack extractItem(TileEntity entity, EnumFacing facing, @Nonnull ItemStack stack, int size, int flags, boolean simulate) {
|
public static ItemStack extractItem(TileEntity tile, EnumFacing facing, @Nonnull ItemStack stack, int size, int flags, boolean simulate) {
|
||||||
return extractItem(getSlotlessHandler(entity, facing), stack, size, flags, 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) {
|
public static ItemStack extractItem(TileEntity tile, EnumFacing facing, @Nonnull ItemStack stack, int size, boolean simulate) {
|
||||||
return extractItem(getSlotlessHandler(entity, facing), stack, size, simulate);
|
return extractItem(getSlotlessHandler(tile, facing), stack, size, simulate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ItemStack extractItem(ISlotlessItemHandler slotlessItemHandler, @Nonnull ItemStack stack, int size, boolean simulate) {
|
public static ItemStack extractItem(ISlotlessItemHandler handler, @Nonnull ItemStack stack, int size, boolean simulate) {
|
||||||
return extractItem(slotlessItemHandler, stack, size, IComparer.COMPARE_DAMAGE | IComparer.COMPARE_NBT, 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) {
|
public static ItemStack extractItem(ISlotlessItemHandler handler, @Nonnull ItemStack stack, int size, int flags, boolean simulate) {
|
||||||
ItemStack extracted = slotlessItemHandler.extractItem(ItemHandlerHelper.copyStackWithSize(stack, size), CyclopsComparer.comparerFlagsToItemMatch(flags), simulate);
|
ItemStack extracted = handler.extractItem(ItemHandlerHelper.copyStackWithSize(stack, size), CyclopsComparer.comparerFlagsToItemMatch(flags), simulate);
|
||||||
|
|
||||||
while (!extracted.isEmpty() && extracted.getCount() < size) {
|
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()) {
|
if (!extraExtract.isEmpty()) {
|
||||||
extracted.grow(extraExtract.getCount());
|
extracted.grow(extraExtract.getCount());
|
||||||
} else {
|
} else {
|
||||||
@@ -61,14 +64,15 @@ public class SlotlessItemHandlerHelper {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return extracted;
|
return extracted;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ItemStack extractItem(TileEntity entity, EnumFacing facing, int size, boolean simulate) {
|
public static ItemStack extractItem(TileEntity tile, EnumFacing facing, int size, boolean simulate) {
|
||||||
return extractItem(getSlotlessHandler(entity, facing), size, simulate);
|
return extractItem(getSlotlessHandler(tile, facing), size, simulate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ItemStack extractItem(ISlotlessItemHandler slotlessItemHandler, int size, boolean simulate) {
|
public static ItemStack extractItem(ISlotlessItemHandler handler, int size, boolean simulate) {
|
||||||
return slotlessItemHandler.extractItem(size, simulate);
|
return handler.extractItem(size, simulate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user