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

View File

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

View File

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

View File

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

View File

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