Backport fixes for #824 and #815 to MC1.11

This commit is contained in:
raoulvdberge
2017-01-07 01:46:08 +01:00
parent 75bb8d2622
commit ff4c9ca42e
5 changed files with 109 additions and 43 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -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();
}

View File

@@ -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) {

View File

@@ -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();
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) {