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