@@ -29,7 +29,7 @@ public class StorageFluidExternal implements IStorage<FluidStack> {
|
||||
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<FluidStack> {
|
||||
@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;
|
||||
|
@@ -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<ItemStack> 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
|
||||
|
@@ -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<ItemStack> getStacks(IDrawer drawer) {
|
||||
if (!drawer.isEmpty() && drawer.getStoredItemCount() > 0) {
|
||||
public static NonNullList<ItemStack> 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();
|
||||
}
|
||||
|
@@ -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<ItemStack> getStacks() {
|
||||
IDrawerGroup group = groupSupplier.get();
|
||||
|
||||
if (group == null) {
|
||||
return RSUtils.emptyNonNullList();
|
||||
}
|
||||
|
||||
NonNullList<ItemStack> 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) {
|
||||
|
@@ -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<ItemStack> getStacks() {
|
||||
IItemHandler handler = handlerSupplier.get();
|
||||
|
||||
if (handler == null) {
|
||||
return RSUtils.emptyNonNullList();
|
||||
}
|
||||
|
||||
NonNullList<ItemStack> 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) {
|
||||
|
Reference in New Issue
Block a user