diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageFluidExternal.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageFluidExternal.java index dcfe5b9dc..d54f5018f 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageFluidExternal.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageFluidExternal.java @@ -29,7 +29,7 @@ public class StorageFluidExternal implements IStorage { private IFluidTankProperties getProperties() { IFluidHandler handler = handlerSupplier.get(); - return handler.getTankProperties().length != 0 ? handler.getTankProperties()[0] : null; + return (handler != null && handler.getTankProperties().length != 0) ? handler.getTankProperties()[0] : null; } private FluidStack getContents() { @@ -60,10 +60,16 @@ public class StorageFluidExternal implements IStorage { @Override @Nullable public FluidStack extract(@Nonnull FluidStack stack, int size, int flags, boolean simulate) { + IFluidHandler handler = handlerSupplier.get(); + + if (handler == null) { + return null; + } + FluidStack toDrain = RSUtils.copyStackWithSize(stack, size); if (API.instance().getComparer().isEqual(getContents(), toDrain, flags)) { - return handlerSupplier.get().drain(toDrain, !simulate); + return handler.drain(toDrain, !simulate); } return null; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDSU.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDSU.java index b68188b39..20addca8c 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDSU.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDSU.java @@ -23,15 +23,21 @@ public class StorageItemDSU extends StorageItemExternal { @Override public int getCapacity() { - return dsuSupplier.get().getMaxStoredCount(); + IDeepStorageUnit dsu = dsuSupplier.get(); + + return dsu != null ? dsu.getMaxStoredCount() : 0; } @Override public NonNullList getStacks() { IDeepStorageUnit dsu = dsuSupplier.get(); - if (dsu.getStoredItemType() != null && dsu.getStoredItemType().getCount() > 0) { - return NonNullList.withSize(1, dsu.getStoredItemType().copy()); + if (dsu != null) { + ItemStack stored = dsu.getStoredItemType(); + + if (stored != null && stored.getCount() > 0) { + return NonNullList.withSize(1, stored.copy()); + } } return RSUtils.emptyNonNullList(); @@ -41,7 +47,7 @@ public class StorageItemDSU extends StorageItemExternal { public ItemStack insert(@Nonnull ItemStack stack, int size, boolean simulate) { IDeepStorageUnit dsu = dsuSupplier.get(); - if (IFilterable.canTake(externalStorage.getItemFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) { + if (dsu != null && IFilterable.canTake(externalStorage.getItemFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) { if (dsu.getStoredItemType() != null) { if (API.instance().getComparer().isEqualNoQuantity(dsu.getStoredItemType(), stack)) { if (getStored() + size > dsu.getMaxStoredCount()) { @@ -94,13 +100,13 @@ public class StorageItemDSU extends StorageItemExternal { public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, boolean simulate) { IDeepStorageUnit dsu = dsuSupplier.get(); - if (API.instance().getComparer().isEqual(stack, dsu.getStoredItemType(), flags)) { - if (size > dsu.getStoredItemType().getCount()) { - size = dsu.getStoredItemType().getCount(); - } - + if (dsu != null && API.instance().getComparer().isEqual(stack, dsu.getStoredItemType(), flags)) { ItemStack stored = dsu.getStoredItemType(); + if (size > stored.getCount()) { + size = stored.getCount(); + } + if (!simulate) { dsu.setStoredItemCount(stored.getCount() - size); } @@ -115,7 +121,15 @@ public class StorageItemDSU extends StorageItemExternal { public int getStored() { IDeepStorageUnit dsu = dsuSupplier.get(); - return dsu.getStoredItemType() != null ? dsu.getStoredItemType().getCount() : 0; + if (dsu != null) { + ItemStack stored = dsu.getStoredItemType(); + + if (stored != null) { + return stored.getCount(); + } + } + + return 0; } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawer.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawer.java index 504fbd6a8..83c8de5fd 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawer.java @@ -11,6 +11,7 @@ import net.minecraft.util.NonNullList; import net.minecraftforge.items.ItemHandlerHelper; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.util.function.Supplier; public class StorageItemDrawer extends StorageItemExternal { @@ -24,7 +25,9 @@ public class StorageItemDrawer extends StorageItemExternal { @Override public int getCapacity() { - return drawerSupplier.get().getMaxCapacity(); + IDrawer drawer = drawerSupplier.get(); + + return drawer != null ? drawer.getMaxCapacity() : 0; } @Override @@ -44,7 +47,9 @@ public class StorageItemDrawer extends StorageItemExternal { @Override public int getStored() { - return drawerSupplier.get().getStoredItemCount(); + IDrawer drawer = drawerSupplier.get(); + + return drawer != null ? drawer.getStoredItemCount() : 0; } @Override @@ -57,16 +62,16 @@ public class StorageItemDrawer extends StorageItemExternal { return externalStorage.getAccessType(); } - public static NonNullList getStacks(IDrawer drawer) { - if (!drawer.isEmpty() && drawer.getStoredItemCount() > 0) { + public static NonNullList getStacks(@Nullable IDrawer drawer) { + if (drawer != null && !drawer.isEmpty() && drawer.getStoredItemCount() > 0) { return NonNullList.withSize(1, ItemHandlerHelper.copyStackWithSize(drawer.getStoredItemPrototype(), drawer.getStoredItemCount())); } return RSUtils.emptyNonNullList(); } - public static ItemStack insert(NetworkNodeExternalStorage externalStorage, IDrawer drawer, @Nonnull ItemStack stack, int size, boolean simulate) { - if (IFilterable.canTake(externalStorage.getItemFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack) && drawer.canItemBeStored(stack)) { + public static ItemStack insert(NetworkNodeExternalStorage externalStorage, @Nullable IDrawer drawer, @Nonnull ItemStack stack, int size, boolean simulate) { + if (drawer != null && IFilterable.canTake(externalStorage.getItemFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack) && drawer.canItemBeStored(stack)) { int stored = drawer.getStoredItemCount(); int remainingSpace = drawer.getMaxCapacity(stack) - stored; @@ -96,8 +101,8 @@ public class StorageItemDrawer extends StorageItemExternal { return ItemHandlerHelper.copyStackWithSize(stack, size); } - public static ItemStack extract(IDrawer drawer, @Nonnull ItemStack stack, int size, int flags, boolean simulate) { - if (API.instance().getComparer().isEqual(stack, drawer.getStoredItemPrototype(), flags) && drawer.canItemBeExtracted(stack)) { + public static ItemStack extract(@Nullable IDrawer drawer, @Nonnull ItemStack stack, int size, int flags, boolean simulate) { + if (drawer != null && API.instance().getComparer().isEqual(stack, drawer.getStoredItemPrototype(), flags) && drawer.canItemBeExtracted(stack)) { if (size > drawer.getStoredItemCount()) { size = drawer.getStoredItemCount(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawerGroup.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawerGroup.java index 5cf9f4ef8..5d2b33596 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawerGroup.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawerGroup.java @@ -1,6 +1,8 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.node.externalstorage; +import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer; import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawerGroup; +import com.raoulvdberge.refinedstorage.RSUtils; import com.raoulvdberge.refinedstorage.api.storage.AccessType; import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; @@ -20,13 +22,19 @@ public class StorageItemDrawerGroup extends StorageItemExternal { @Override public NonNullList getStacks() { + IDrawerGroup group = groupSupplier.get(); + + if (group == null) { + return RSUtils.emptyNonNullList(); + } + NonNullList stacks = NonNullList.create(); - IDrawerGroup drawers = groupSupplier.get(); + for (int i = 0; i < group.getDrawerCount(); ++i) { + IDrawer drawer = group.getDrawer(i); - for (int i = 0; i < drawers.getDrawerCount(); ++i) { - if (drawers.isDrawerEnabled(i)) { - stacks.addAll(StorageItemDrawer.getStacks(drawers.getDrawer(i))); + if (group.isDrawerEnabled(i)) { + stacks.addAll(StorageItemDrawer.getStacks(drawer)); } } @@ -37,11 +45,17 @@ public class StorageItemDrawerGroup extends StorageItemExternal { public int getStored() { int stored = 0; - IDrawerGroup drawers = groupSupplier.get(); + IDrawerGroup group = groupSupplier.get(); - for (int i = 0; i < drawers.getDrawerCount(); ++i) { - if (drawers.isDrawerEnabled(i)) { - stored += drawers.getDrawer(i).getStoredItemCount(); + if (group == null) { + return 0; + } + + for (int i = 0; i < group.getDrawerCount(); ++i) { + IDrawer drawer = group.getDrawer(i); + + if (group.isDrawerEnabled(i)) { + stored += drawer.getStoredItemCount(); } } @@ -57,11 +71,15 @@ public class StorageItemDrawerGroup extends StorageItemExternal { public int getCapacity() { int capacity = 0; - IDrawerGroup drawers = groupSupplier.get(); + IDrawerGroup group = groupSupplier.get(); - for (int i = 0; i < drawers.getDrawerCount(); ++i) { - if (drawers.isDrawerEnabled(i)) { - capacity += drawers.getDrawer(i).getMaxCapacity(); + if (group == null) { + return 0; + } + + for (int i = 0; i < group.getDrawerCount(); ++i) { + if (group.isDrawerEnabled(i)) { + capacity += group.getDrawer(i).getMaxCapacity(); } } @@ -73,11 +91,15 @@ public class StorageItemDrawerGroup extends StorageItemExternal { public ItemStack insert(@Nonnull ItemStack stack, int size, boolean simulate) { ItemStack remainder = stack; - IDrawerGroup drawers = groupSupplier.get(); + IDrawerGroup group = groupSupplier.get(); - for (int i = 0; i < drawers.getDrawerCount(); ++i) { - if (drawers.isDrawerEnabled(i)) { - remainder = StorageItemDrawer.insert(externalStorage, drawers.getDrawer(i), stack, size, simulate); + if (group == null) { + return stack; + } + + for (int i = 0; i < group.getDrawerCount(); ++i) { + if (group.isDrawerEnabled(i)) { + remainder = StorageItemDrawer.insert(externalStorage, group.getDrawer(i), stack, size, simulate); if (remainder == null || remainder.getCount() <= 0) { break; @@ -95,13 +117,17 @@ public class StorageItemDrawerGroup extends StorageItemExternal { public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, boolean simulate) { int toExtract = size; - IDrawerGroup drawers = groupSupplier.get(); + IDrawerGroup group = groupSupplier.get(); + + if (group == null) { + return null; + } ItemStack result = null; - for (int i = 0; i < drawers.getDrawerCount(); ++i) { - if (drawers.isDrawerEnabled(i)) { - ItemStack extracted = StorageItemDrawer.extract(drawers.getDrawer(i), stack, toExtract, flags, simulate); + for (int i = 0; i < group.getDrawerCount(); ++i) { + if (group.isDrawerEnabled(i)) { + ItemStack extracted = StorageItemDrawer.extract(group.getDrawer(i), stack, toExtract, flags, simulate); if (extracted != null) { if (result == null) { 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 8fbff3a5a..e11cc082d 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 @@ -1,5 +1,6 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.node.externalstorage; +import com.raoulvdberge.refinedstorage.RSUtils; import com.raoulvdberge.refinedstorage.api.storage.AccessType; import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.tile.config.IFilterable; @@ -27,13 +28,19 @@ public class StorageItemItemHandler extends StorageItemExternal { @Override public int getCapacity() { - return handlerSupplier.get().getSlots() * 64; + IItemHandler handler = handlerSupplier.get(); + + return handler != null ? handler.getSlots() * 64 : 0; } @Override public NonNullList getStacks() { IItemHandler handler = handlerSupplier.get(); + if (handler == null) { + return RSUtils.emptyNonNullList(); + } + NonNullList stacks = NonNullList.withSize(handler.getSlots(), ItemStack.EMPTY); for (int i = 0; i < handler.getSlots(); ++i) { @@ -45,9 +52,9 @@ public class StorageItemItemHandler extends StorageItemExternal { @Override public ItemStack insert(@Nonnull ItemStack stack, int size, boolean simulate) { - if (IFilterable.canTake(externalStorage.getItemFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) { - IItemHandler handler = handlerSupplier.get(); + 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); } @@ -62,6 +69,10 @@ public class StorageItemItemHandler extends StorageItemExternal { IItemHandler handler = handlerSupplier.get(); + if (handler == null) { + return null; + } + for (int i = 0; i < handler.getSlots(); ++i) { ItemStack slot = handler.getStackInSlot(i); @@ -91,6 +102,10 @@ public class StorageItemItemHandler extends StorageItemExternal { public int getStored() { IItemHandler handler = handlerSupplier.get(); + if (handler == null) { + return 0; + } + int size = 0; for (int i = 0; i < handler.getSlots(); ++i) {