diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/util/IStackList.java b/src/main/java/com/raoulvdberge/refinedstorage/api/util/IStackList.java index 15071d0a9..ef87ac9ab 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/util/IStackList.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/util/IStackList.java @@ -21,9 +21,7 @@ public interface IStackList { * * @param stack the stack */ - default void add(@Nonnull T stack) { - add(stack, getSizeFromStack(stack)); - } + void add(@Nonnull T stack); /** * Decrements the count of that stack in the list. @@ -40,9 +38,7 @@ public interface IStackList { * @param stack the stack * @return true if the remove was successful for the full amount, false otherwise */ - default boolean remove(@Nonnull T stack) { - return remove(stack, getSizeFromStack(stack)); - } + boolean remove(@Nonnull T stack); /** * Returns a stack. @@ -84,12 +80,6 @@ public interface IStackList { */ boolean isEmpty(); - /** - * @param stack the stack - * @return the size of the stack - */ - int getSizeFromStack(T stack); - /** * @return a collection of stacks in this list */ diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java index e889d1761..327670f4d 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java @@ -232,7 +232,7 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab ItemStack extracted = null; int i = 0; - if (IFilterable.isEmpty(itemFilters)) { + if (itemFilters.isEmpty()) { ItemStack toExtract = null; ArrayList networkItems = new ArrayList<>(network.getItemStorageCache().getList().getStacks()); @@ -331,7 +331,7 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab FluidStack extracted = null; int i = 0; - if (IFilterable.isEmpty(itemFilters)) { + if (fluidFilters.isEmpty()) { FluidStack toExtract = null; ArrayList networkFluids = new ArrayList<>(network.getFluidStorageCache().getList().getStacks()); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/OneSixMigrationHelper.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/OneSixMigrationHelper.java index 6e736151b..a4bda085c 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/OneSixMigrationHelper.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/OneSixMigrationHelper.java @@ -10,6 +10,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.node.storage.NetworkNodeF import com.raoulvdberge.refinedstorage.apiimpl.network.node.storage.NetworkNodeStorage; import com.raoulvdberge.refinedstorage.block.enums.FluidStorageType; import com.raoulvdberge.refinedstorage.block.enums.ItemStorageType; +import com.raoulvdberge.refinedstorage.inventory.item.ItemHandlerBase; import com.raoulvdberge.refinedstorage.item.ItemPattern; import com.raoulvdberge.refinedstorage.tile.config.IFilterable; import net.minecraft.item.Item; @@ -205,10 +206,10 @@ public class OneSixMigrationHelper implements IOneSixMigrationHelper { public static void removalHook() { } - public static void migrateEmptyWhitelistToEmptyBlacklist(String version, IFilterable filterable, @Nullable IItemHandler itemFilterInv) { + public static void migrateEmptyWhitelistToEmptyBlacklist(String version, IFilterable filterable, @Nullable ItemHandlerBase itemFilterInv) { // Only migrate if we come from a version where the RS version tag stuff in NetworkNode wasn't added yet. // Otherwise, we would constantly migrate empty whitelists to empty blacklists... - if (version == null && filterable.getMode() == IFilterable.WHITELIST && IFilterable.isEmpty(itemFilterInv)) { + if (version == null && filterable.getMode() == IFilterable.WHITELIST && (itemFilterInv == null || itemFilterInv.isEmpty())) { filterable.setMode(IFilter.MODE_BLACKLIST); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/StackListFluid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/StackListFluid.java index ddd5bc9a9..c0e51af0f 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/StackListFluid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/StackListFluid.java @@ -18,7 +18,7 @@ public class StackListFluid implements IStackList { if (stack == null || size < 0) { throw new IllegalArgumentException("Cannot accept empty stack"); } - + for (FluidStack otherStack : stacks.get(stack.getFluid())) { if (stack.isFluidEqual(otherStack)) { if ((long) otherStack.amount + (long) size > Integer.MAX_VALUE) { @@ -36,6 +36,11 @@ public class StackListFluid implements IStackList { stacks.put(stack.getFluid(), newStack); } + @Override + public void add(@Nonnull FluidStack stack) { + add(stack, stack.amount); + } + @Override public boolean remove(@Nonnull FluidStack stack, int size) { for (FluidStack otherStack : stacks.get(stack.getFluid())) { @@ -55,6 +60,11 @@ public class StackListFluid implements IStackList { return false; } + @Override + public boolean remove(@Nonnull FluidStack stack) { + return remove(stack, stack.amount); + } + @Override @Nullable public FluidStack get(@Nonnull FluidStack stack, int flags) { @@ -89,11 +99,6 @@ public class StackListFluid implements IStackList { return stacks.isEmpty(); } - @Override - public int getSizeFromStack(FluidStack stack) { - return stack.amount; - } - @Nonnull @Override public Collection getStacks() { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/StackListItem.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/StackListItem.java index f5733004b..f4953c60b 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/StackListItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/StackListItem.java @@ -35,6 +35,11 @@ public class StackListItem implements IStackList { stacks.put(stack.getItem(), ItemHandlerHelper.copyStackWithSize(stack, size)); } + @Override + public void add(@Nonnull ItemStack stack) { + add(stack, stack.getCount()); + } + @Override public boolean remove(@Nonnull ItemStack stack, int size) { for (ItemStack otherStack : stacks.get(stack.getItem())) { @@ -54,6 +59,11 @@ public class StackListItem implements IStackList { return false; } + @Override + public boolean remove(@Nonnull ItemStack stack) { + return remove(stack, stack.getCount()); + } + @Override @Nullable public ItemStack get(@Nonnull ItemStack stack, int flags) { @@ -88,11 +98,6 @@ public class StackListItem implements IStackList { return stacks.isEmpty(); } - @Override - public int getSizeFromStack(ItemStack stack) { - return stack.getCount(); - } - @Nonnull @Override public Collection getStacks() { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/inventory/fluid/FluidInventory.java b/src/main/java/com/raoulvdberge/refinedstorage/inventory/fluid/FluidInventory.java index 3e0133071..58c3d5f76 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/inventory/fluid/FluidInventory.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/inventory/fluid/FluidInventory.java @@ -11,6 +11,7 @@ public class FluidInventory { private FluidStack[] fluids; private int maxAmount; + private boolean empty = true; @Nullable private Consumer listener; @@ -56,6 +57,8 @@ public class FluidInventory { if (listener != null) { listener.accept(slot); } + + updateEmptyState(); } public NBTTagCompound writeToNbt() { @@ -80,5 +83,23 @@ public class FluidInventory { fluids[i] = FluidStack.loadFluidStackFromNBT(tag.getCompoundTag(key)); } } + + updateEmptyState(); + } + + private void updateEmptyState() { + this.empty = true; + + for (FluidStack fluid : fluids) { + if (fluid != null) { + this.empty = false; + + return; + } + } + } + + public boolean isEmpty() { + return empty; } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/inventory/item/ItemHandlerBase.java b/src/main/java/com/raoulvdberge/refinedstorage/inventory/item/ItemHandlerBase.java index 8c9c193ba..1d69bf8d9 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/inventory/item/ItemHandlerBase.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/inventory/item/ItemHandlerBase.java @@ -1,6 +1,7 @@ package com.raoulvdberge.refinedstorage.inventory.item; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.items.ItemStackHandler; import javax.annotation.Nonnull; @@ -27,15 +28,6 @@ public class ItemHandlerBase extends ItemStackHandler { this(size, null, validators); } - @Override - public void setStackInSlot(int slot, @Nonnull ItemStack stack) { - validateSlotIndex(slot); - - stacks.set(slot, stack); - - onContentsChanged(slot); - } - @Override @Nonnull public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) { @@ -63,6 +55,13 @@ public class ItemHandlerBase extends ItemStackHandler { this.empty = stacks.stream().allMatch(ItemStack::isEmpty); } + @Override + public void deserializeNBT(NBTTagCompound tag) { + super.deserializeNBT(tag); + + this.empty = stacks.stream().allMatch(ItemStack::isEmpty); + } + public boolean isEmpty() { return empty; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileBase.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileBase.java index aab5f7b78..d4cdd8f86 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileBase.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileBase.java @@ -1,6 +1,8 @@ package com.raoulvdberge.refinedstorage.tile; import com.raoulvdberge.refinedstorage.tile.data.TileDataManager; +import com.raoulvdberge.refinedstorage.tile.direction.DirectionHandlerTile; +import com.raoulvdberge.refinedstorage.tile.direction.IDirectionHandler; import com.raoulvdberge.refinedstorage.util.WorldUtils; import net.minecraft.block.state.IBlockState; import net.minecraft.nbt.NBTTagCompound; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileNode.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileNode.java index 75f4e96c2..e34626ea7 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileNode.java @@ -11,6 +11,7 @@ import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy; import com.raoulvdberge.refinedstorage.tile.config.IRedstoneConfigurable; import com.raoulvdberge.refinedstorage.tile.config.RedstoneMode; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; +import com.raoulvdberge.refinedstorage.tile.direction.DirectionHandlerNetworkNode; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IFilterable.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IFilterable.java index d3789cd30..6beb6aae8 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IFilterable.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IFilterable.java @@ -10,8 +10,6 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.items.IItemHandler; -import javax.annotation.Nullable; - public interface IFilterable { int WHITELIST = 0; int BLACKLIST = 1; @@ -76,20 +74,6 @@ public interface IFilterable { return false; } - static boolean isEmpty(@Nullable IItemHandler filter) { - if (filter == null) { - return true; - } - - for (int i = 0; i < filter.getSlots(); i++) { - if (!filter.getStackInSlot(i).isEmpty()) { - return false; - } - } - - return true; - } - void setMode(int mode); int getMode(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/DirectionHandlerNetworkNode.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/direction/DirectionHandlerNetworkNode.java similarity index 86% rename from src/main/java/com/raoulvdberge/refinedstorage/tile/DirectionHandlerNetworkNode.java rename to src/main/java/com/raoulvdberge/refinedstorage/tile/direction/DirectionHandlerNetworkNode.java index ce962b1ec..9709c8b33 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/DirectionHandlerNetworkNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/direction/DirectionHandlerNetworkNode.java @@ -1,5 +1,6 @@ -package com.raoulvdberge.refinedstorage.tile; +package com.raoulvdberge.refinedstorage.tile.direction; +import com.raoulvdberge.refinedstorage.tile.TileNode; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/DirectionHandlerTile.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/direction/DirectionHandlerTile.java similarity index 93% rename from src/main/java/com/raoulvdberge/refinedstorage/tile/DirectionHandlerTile.java rename to src/main/java/com/raoulvdberge/refinedstorage/tile/direction/DirectionHandlerTile.java index 6059ecc46..03507a7d6 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/DirectionHandlerTile.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/direction/DirectionHandlerTile.java @@ -1,4 +1,4 @@ -package com.raoulvdberge.refinedstorage.tile; +package com.raoulvdberge.refinedstorage.tile.direction; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/IDirectionHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/direction/IDirectionHandler.java similarity index 83% rename from src/main/java/com/raoulvdberge/refinedstorage/tile/IDirectionHandler.java rename to src/main/java/com/raoulvdberge/refinedstorage/tile/direction/IDirectionHandler.java index 9070605e8..9ebf93916 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/IDirectionHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/direction/IDirectionHandler.java @@ -1,4 +1,4 @@ -package com.raoulvdberge.refinedstorage.tile; +package com.raoulvdberge.refinedstorage.tile.direction; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing;