diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/storage/IStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/api/storage/IStorage.java new file mode 100644 index 000000000..7d586b247 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/storage/IStorage.java @@ -0,0 +1,27 @@ +package com.raoulvdberge.refinedstorage.api.storage; + +import java.util.List; + +public interface IStorage { + /** + * @return stacks stored in this storage + */ + List getStacks(); + + /** + * @return the amount of fluids stored in this storage + */ + int getStored(); + + /** + * @return the priority of this storage + */ + int getPriority(); + + /** + * @return the access type of this storage + */ + default AccessType getAccessType() { + return AccessType.READ_WRITE; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/storage/fluid/IFluidStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/api/storage/fluid/IFluidStorage.java index e591058ba..9a0eff004 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/storage/fluid/IFluidStorage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/storage/fluid/IFluidStorage.java @@ -1,23 +1,17 @@ package com.raoulvdberge.refinedstorage.api.storage.fluid; -import com.raoulvdberge.refinedstorage.api.storage.AccessType; +import com.raoulvdberge.refinedstorage.api.storage.IStorage; import com.raoulvdberge.refinedstorage.api.util.IComparer; import net.minecraftforge.fluids.FluidStack; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import java.util.List; /** * Represents a fluid storage sink for the storage network. * Provide this through an {@link IFluidStorageProvider}. */ -public interface IFluidStorage { - /** - * @return fluids stored in this storage - */ - List getStacks(); - +public interface IFluidStorage extends IStorage { /** * Inserts a fluid in this storage. * @@ -42,20 +36,5 @@ public interface IFluidStorage { @Nullable FluidStack extractFluid(@Nonnull FluidStack stack, int size, int flags); - /** - * @return the amount of fluids stored in this storage - */ - int getStored(); - /** - * @return the priority of this storage - */ - int getPriority(); - - /** - * @return the access type of this storage - */ - default AccessType getAccessType() { - return AccessType.READ_WRITE; - } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/storage/item/IItemStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/api/storage/item/IItemStorage.java index 64ee94e04..72331dd3c 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/storage/item/IItemStorage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/storage/item/IItemStorage.java @@ -1,23 +1,17 @@ package com.raoulvdberge.refinedstorage.api.storage.item; -import com.raoulvdberge.refinedstorage.api.storage.AccessType; +import com.raoulvdberge.refinedstorage.api.storage.IStorage; import com.raoulvdberge.refinedstorage.api.util.IComparer; import net.minecraft.item.ItemStack; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import java.util.List; /** * Represents an item storage sink for the storage network. * Provide this through an {@link IItemStorageProvider}. */ -public interface IItemStorage { - /** - * @return items stored in this storage - */ - List getItems(); - +public interface IItemStorage extends IStorage { /** * Inserts an item to this storage. * @@ -41,21 +35,4 @@ public interface IItemStorage { */ @Nullable ItemStack extractItem(@Nonnull ItemStack stack, int size, int flags); - - /** - * @return The amount of items stored in this storage - */ - int getStored(); - - /** - * @return The priority of this storage - */ - int getPriority(); - - /** - * @return the access type of this storage - */ - default AccessType getAccessType() { - return AccessType.READ_WRITE; - } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/item/ItemStorageCache.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/item/ItemStorageCache.java index cac16557f..4e1307706 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/item/ItemStorageCache.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/item/ItemStorageCache.java @@ -38,7 +38,7 @@ public class ItemStorageCache implements IItemStorageCache { continue; } - for (ItemStack stack : storage.getItems()) { + for (ItemStack stack : storage.getStacks()) { add(stack, true); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/item/ItemStorageNBT.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/item/ItemStorageNBT.java index cc324ad38..4b4e62612 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/item/ItemStorageNBT.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/item/ItemStorageNBT.java @@ -117,7 +117,7 @@ public abstract class ItemStorageNBT implements IItemStorage { } @Override - public List getItems() { + public List getStacks() { return stacks; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java index f5db2f830..b380e9732 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java @@ -18,6 +18,7 @@ import com.raoulvdberge.refinedstorage.api.network.IWirelessGridHandler; import com.raoulvdberge.refinedstorage.api.network.grid.IFluidGridHandler; import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler; import com.raoulvdberge.refinedstorage.api.storage.AccessType; +import com.raoulvdberge.refinedstorage.api.storage.IStorage; import com.raoulvdberge.refinedstorage.api.storage.fluid.IFluidStorage; import com.raoulvdberge.refinedstorage.api.storage.fluid.IFluidStorageCache; import com.raoulvdberge.refinedstorage.api.storage.item.IItemStorage; @@ -147,36 +148,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR return (left.getEnergyUsage() > right.getEnergyUsage()) ? -1 : 1; }; - private static final Comparator ITEM_SIZE_COMPARATOR = (left, right) -> { - if (left.getStored() == right.getStored()) { - return 0; - } - - return (left.getStored() > right.getStored()) ? -1 : 1; - }; - - private static final Comparator ITEM_PRIORITY_COMPARATOR = (left, right) -> { - if (left.getPriority() == right.getPriority()) { - return 0; - } - - return (left.getPriority() > right.getPriority()) ? -1 : 1; - }; - - private static final Comparator FLUID_SIZE_COMPARATOR = (left, right) -> { - if (left.getStored() == right.getStored()) { - return 0; - } - - return (left.getStored() > right.getStored()) ? -1 : 1; - }; - - private static final Comparator FLUID_PRIORITY_COMPARATOR = (left, right) -> { - if (left.getPriority() == right.getPriority()) { - return 0; - } - - return (left.getPriority() > right.getPriority()) ? -1 : 1; + private static final Comparator STORAGE_COMPARATOR = (left, right) -> { + int compare = Integer.compare(left.getPriority(), right.getPriority()); + return compare != 0 ? compare : Integer.compare(left.getStored(), right.getStored()); }; private IItemGridHandler itemGridHandler = new ItemGridHandler(this); @@ -267,11 +241,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } if (canRun()) { - Collections.sort(itemStorage.getStorages(), ITEM_SIZE_COMPARATOR); - Collections.sort(itemStorage.getStorages(), ITEM_PRIORITY_COMPARATOR); - - Collections.sort(fluidStorage.getStorages(), FLUID_SIZE_COMPARATOR); - Collections.sort(fluidStorage.getStorages(), FLUID_PRIORITY_COMPARATOR); + Collections.sort(itemStorage.getStorages(), STORAGE_COMPARATOR); + Collections.sort(fluidStorage.getStorages(), STORAGE_COMPARATOR); boolean craftingTasksChanged = !craftingTasksToAdd.isEmpty() || !craftingTasksToCancel.isEmpty(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDiskManipulator.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDiskManipulator.java index 9f0dd4a31..60b8ff1d4 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDiskManipulator.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDiskManipulator.java @@ -221,8 +221,8 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte return; } - for (int i = 0; i < storage.getItems().size(); i++) { - ItemStack stack = storage.getItems().get(i); + for (int i = 0; i < storage.getStacks().size(); i++) { + ItemStack stack = storage.getStacks().get(i); if (stack == null) { continue; } @@ -241,7 +241,7 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte storage.insertItem(((extracted == remainder) ? remainder.copy() : remainder), remainder.stackSize, false); } - if (storage.getItems().size() == 0) { + if (storage.getStacks().size() == 0) { moveDriveToOutput(slot); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/externalstorage/ItemStorageDSU.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/externalstorage/ItemStorageDSU.java index 9a49fb3c8..d9c983cc5 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/externalstorage/ItemStorageDSU.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/externalstorage/ItemStorageDSU.java @@ -26,7 +26,7 @@ public class ItemStorageDSU extends ItemStorageExternal { } @Override - public List getItems() { + public List getStacks() { if (unit.getStoredItemType() != null && unit.getStoredItemType().stackSize > 0) { return Collections.singletonList(unit.getStoredItemType().copy()); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/externalstorage/ItemStorageDrawer.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/externalstorage/ItemStorageDrawer.java index 56ff4244e..c3b7e0b15 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/externalstorage/ItemStorageDrawer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/externalstorage/ItemStorageDrawer.java @@ -26,7 +26,7 @@ public class ItemStorageDrawer extends ItemStorageExternal { } @Override - public List getItems() { + public List getStacks() { if (!drawer.isEmpty() && drawer.getStoredItemCount() > 0) { return Collections.singletonList(drawer.getStoredItemCopy()); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/externalstorage/ItemStorageExternal.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/externalstorage/ItemStorageExternal.java index 46deebb88..94d125dfa 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/externalstorage/ItemStorageExternal.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/externalstorage/ItemStorageExternal.java @@ -12,7 +12,7 @@ public abstract class ItemStorageExternal implements IItemStorage { public abstract int getCapacity(); public boolean updateCache() { - List items = getItems(); + List items = getStacks(); if (cache == null) { cache = items; @@ -34,6 +34,6 @@ public abstract class ItemStorageExternal implements IItemStorage { } public void updateCacheForcefully() { - cache = getItems(); + cache = getStacks(); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/externalstorage/ItemStorageItemHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/externalstorage/ItemStorageItemHandler.java index 71290f359..63d865d3e 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/externalstorage/ItemStorageItemHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/externalstorage/ItemStorageItemHandler.java @@ -30,7 +30,7 @@ public class ItemStorageItemHandler extends ItemStorageExternal { } @Override - public List getItems() { + public List getStacks() { List items = new ArrayList<>(); for (int i = 0; i < handler.getSlots(); ++i) {