From 23bda5455399199f048a38b61e7fbac11fceddb5 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Fri, 5 May 2017 22:06:27 +0200 Subject: [PATCH] Revert "Fixes #1144 - "Refined Storage thinks that I have double of everything in my drawers when using two external storages busses"" This reverts commit 393a3ffa3cb66f1ac4c56c14b6f3d987413be46e. --- CHANGELOG.md | 1 - .../api/storage/IStorageCache.java | 18 ++++++++---------- .../api/storage/IStorageProvider.java | 10 ++++++---- .../apiimpl/network/node/NetworkNode.java | 6 +----- .../network/node/NetworkNodeFluidStorage.java | 9 +++++---- .../network/node/NetworkNodeStorage.java | 11 +++++------ .../node/diskdrive/NetworkNodeDiskDrive.java | 17 +++++++++-------- .../NetworkNodeExternalStorage.java | 10 +++++----- .../externalstorage/StorageFluidExternal.java | 5 ----- .../externalstorage/StorageItemCyclops.java | 13 ++++++------- .../externalstorage/StorageItemDrawer.java | 4 ++-- .../StorageItemDrawerGroup.java | 4 ++-- .../externalstorage/StorageItemExternal.java | 10 ---------- .../StorageItemItemHandler.java | 4 ++-- .../apiimpl/storage/StorageCacheFluid.java | 11 ++--------- .../apiimpl/storage/StorageCacheItem.java | 11 ++--------- 16 files changed, 55 insertions(+), 89 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 435b1e4ac..12339a9b4 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,6 @@ - Fixed Crafting Tweaks buttons positioned wrongly (blay09) - Fixed Crafting Tweaks keybindings interfering with RS keybindings (blay09) - Fixed crash when updating storages (raoulvdberge) -- Fixed External Storage showing the wrong amount of items if you connect multiple External Storages to the same inventory (raoulvdberge) ### 1.4.4 - Updated Forge to 2284 (raoulvdberge) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/storage/IStorageCache.java b/src/main/java/com/raoulvdberge/refinedstorage/api/storage/IStorageCache.java index 276116a58..bb5439122 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/storage/IStorageCache.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/storage/IStorageCache.java @@ -23,6 +23,10 @@ public interface IStorageCache { /** * Adds a stack to the cache. + *

+ * Note that this doesn't modify any of the connected storages, but just modifies the cache. + * Use {@link IStorage#insert(T, int, boolean)} to add a stack to an actual storage. + *

* Will merge it with another stack if it already exists. * * @param stack the stack to add, do NOT modify @@ -33,6 +37,9 @@ public interface IStorageCache { /** * Removes a stack from the cache. + *

+ * Note that this doesn't modify any of the connected storages, but just modifies the cache. + * Use {@link IStorage#extract(T, int, int, boolean)} to remove a stack from an actual storage. * * @param stack the stack to remove, do NOT modify * @param size the size to remove @@ -51,16 +58,7 @@ public interface IStorageCache { IStackList getList(); /** - * @return the storages in this cache, do NOT modify + * @return the storages connected to this network */ List> getStorages(); - - /** - * Adds a storage to the cache. - * Will not add duplicate storages, it checks this with Object#equals. - * - * @param storage the storage - * @return true if the storage was added successfully, false otherwise - */ - boolean addStorage(IStorage storage); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/storage/IStorageProvider.java b/src/main/java/com/raoulvdberge/refinedstorage/api/storage/IStorageProvider.java index ac3ba3afb..b5557f38e 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/storage/IStorageProvider.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/storage/IStorageProvider.java @@ -3,17 +3,19 @@ package com.raoulvdberge.refinedstorage.api.storage; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; +import java.util.List; + /** * Represents a node that provides the network with storage. */ public interface IStorageProvider { /** - * @param cache the storage cache + * @param storages the item storages */ - void addItemStorages(IStorageCache cache); + void addItemStorages(List> storages); /** - * @param cache the storage cache + * @param storages the fluid storages */ - void addFluidStorages(IStorageCache cache); + void addFluidStorages(List> storages); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java index ad037ba83..08cac3ff2 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java @@ -162,12 +162,8 @@ public abstract class NetworkNode implements INetworkNode, INetworkNeighborhoodA } } - public BlockPos getFacingTilePosition() { - return holder.pos().offset(holder.getDirection()); - } - public TileEntity getFacingTile() { - return holder.world().getTileEntity(getFacingTilePosition()); + return holder.world().getTileEntity(holder.pos().offset(holder.getDirection())); } public IItemHandler getDrops() { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidStorage.java index 4b3aa39ff..96bd51886 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidStorage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidStorage.java @@ -5,7 +5,7 @@ import com.raoulvdberge.refinedstorage.RSBlocks; import com.raoulvdberge.refinedstorage.RSUtils; import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; import com.raoulvdberge.refinedstorage.api.storage.AccessType; -import com.raoulvdberge.refinedstorage.api.storage.IStorageCache; +import com.raoulvdberge.refinedstorage.api.storage.IStorage; import com.raoulvdberge.refinedstorage.api.storage.IStorageProvider; import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageDiskFluid; @@ -22,6 +22,7 @@ import net.minecraftforge.fluids.FluidStack; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import java.util.List; public class NetworkNodeFluidStorage extends NetworkNode implements IGuiStorage, IStorageProvider, IComparable, IFilterable, IPrioritizable, IExcessVoidable, IAccessType { public static final String ID = "fluid_storage"; @@ -117,14 +118,14 @@ public class NetworkNodeFluidStorage extends NetworkNode implements IGuiStorage, } @Override - public void addItemStorages(IStorageCache cache) { + public void addItemStorages(List> storages) { // NO OP } @Override - public void addFluidStorages(IStorageCache cache) { + public void addFluidStorages(List> storages) { if (storage != null) { - cache.addStorage(storage); + storages.add(storage); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeStorage.java index d36d8bff5..905b67ad0 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeStorage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeStorage.java @@ -5,7 +5,7 @@ import com.raoulvdberge.refinedstorage.RSBlocks; import com.raoulvdberge.refinedstorage.RSUtils; import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; import com.raoulvdberge.refinedstorage.api.storage.AccessType; -import com.raoulvdberge.refinedstorage.api.storage.IStorageCache; +import com.raoulvdberge.refinedstorage.api.storage.IStorage; import com.raoulvdberge.refinedstorage.api.storage.IStorageProvider; import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageDiskItem; @@ -22,6 +22,7 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.items.ItemHandlerHelper; import javax.annotation.Nonnull; +import java.util.List; public class NetworkNodeStorage extends NetworkNode implements IGuiStorage, IStorageProvider, IComparable, IFilterable, IPrioritizable, IExcessVoidable, IAccessType { public static final String ID = "storage"; @@ -114,14 +115,12 @@ public class NetworkNodeStorage extends NetworkNode implements IGuiStorage, ISto } @Override - public void addItemStorages(IStorageCache cache) { - if (storage != null) { - cache.addStorage(storage); - } + public void addItemStorages(List> storages) { + storages.add(storage); } @Override - public void addFluidStorages(IStorageCache cache) { + public void addFluidStorages(List> storages) { // NO OP } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/NetworkNodeDiskDrive.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/NetworkNodeDiskDrive.java index efac5e0c7..4619088db 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/NetworkNodeDiskDrive.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/NetworkNodeDiskDrive.java @@ -21,6 +21,7 @@ import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.items.IItemHandler; +import java.util.List; import java.util.function.Predicate; public class NetworkNodeDiskDrive extends NetworkNode implements IGuiStorage, IStorageProvider, IComparable, IFilterable, IPrioritizable, IType, IExcessVoidable, IAccessType { @@ -75,8 +76,8 @@ public class NetworkNodeDiskDrive extends NetworkNode implements IGuiStorage, IS private ItemHandlerBase itemFilters = new ItemHandlerBase(9, new ItemHandlerListenerNetworkNode(this)); private ItemHandlerFluid fluidFilters = new ItemHandlerFluid(9, new ItemHandlerListenerNetworkNode(this)); - private IStorageDisk[] itemStorages = new IStorageDisk[8]; - private IStorageDisk[] fluidStorages = new IStorageDisk[8]; + private IStorageDisk[] itemStorages = new IStorageDisk[8]; + private IStorageDisk[] fluidStorages = new IStorageDisk[8]; private AccessType accessType = AccessType.INSERT_EXTRACT; private int priority = 0; @@ -135,19 +136,19 @@ public class NetworkNodeDiskDrive extends NetworkNode implements IGuiStorage, IS } @Override - public void addItemStorages(IStorageCache cache) { - for (IStorage storage : itemStorages) { + public void addItemStorages(List> storages) { + for (IStorage storage : this.itemStorages) { if (storage != null) { - cache.addStorage(storage); + storages.add(storage); } } } @Override - public void addFluidStorages(IStorageCache cache) { - for (IStorage storage : fluidStorages) { + public void addFluidStorages(List> storages) { + for (IStorage storage : this.fluidStorages) { if (storage != null) { - cache.addStorage(storage); + storages.add(storage); } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/NetworkNodeExternalStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/NetworkNodeExternalStorage.java index e6bd2e506..7cb78ded6 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/NetworkNodeExternalStorage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/NetworkNodeExternalStorage.java @@ -6,7 +6,7 @@ import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.RSUtils; import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; import com.raoulvdberge.refinedstorage.api.storage.AccessType; -import com.raoulvdberge.refinedstorage.api.storage.IStorageCache; +import com.raoulvdberge.refinedstorage.api.storage.IStorage; import com.raoulvdberge.refinedstorage.api.storage.IStorageProvider; import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.apiimpl.network.node.IGuiStorage; @@ -229,13 +229,13 @@ public class NetworkNodeExternalStorage extends NetworkNode implements IStorageP } @Override - public void addItemStorages(IStorageCache cache) { - itemStorages.removeIf(storage -> !cache.addStorage(storage)); + public void addItemStorages(List> storages) { + storages.addAll(this.itemStorages); } @Override - public void addFluidStorages(IStorageCache cache) { - fluidStorages.removeIf(storage -> !cache.addStorage(storage)); + public void addFluidStorages(List> storages) { + storages.addAll(this.fluidStorages); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageFluidExternal.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageFluidExternal.java index 464110425..8e6cd4bb2 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageFluidExternal.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageFluidExternal.java @@ -120,9 +120,4 @@ public class StorageFluidExternal implements IStorage { public void updateCacheForcefully() { cache = RSUtils.copyStack(getContents()); } - - @Override - public boolean equals(Object o) { - return o instanceof StorageFluidExternal && externalStorage.getFacingTilePosition().equals(((StorageFluidExternal) o).externalStorage.getFacingTilePosition()); - } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemCyclops.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemCyclops.java index a3bf771e8..76888d1e5 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemCyclops.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemCyclops.java @@ -22,13 +22,13 @@ import java.util.function.Supplier; import java.util.stream.Collectors; public class StorageItemCyclops extends StorageItemExternal { + private NetworkNodeExternalStorage externalStorage; private EnumFacing opposite; private Supplier cyclopsInv; private int oldInventoryHash = -1; public StorageItemCyclops(NetworkNodeExternalStorage externalStorage) { - super(externalStorage); - + this.externalStorage = externalStorage; this.opposite = externalStorage.getHolder().getDirection().getOpposite(); this.cyclopsInv = () -> { TileEntity f = externalStorage.getFacingTile(); @@ -40,7 +40,6 @@ public class StorageItemCyclops extends StorageItemExternal { @Override public void detectChanges(INetworkMaster network) { InventoryTileEntityBase inv = cyclopsInv.get(); - if (inv != null) { int inventoryHash = inv.getInventoryHash(); @@ -119,9 +118,9 @@ public class StorageItemCyclops extends StorageItemExternal { } } - public static boolean isValid(TileEntity facingTile, EnumFacing facing) { - return facingTile instanceof InventoryTileEntityBase - && (SlotlessItemHandlerHelper.isSlotless(facingTile, facing) - || ((InventoryTileEntityBase) facingTile).getInventory() instanceof SimpleInventory); + public static boolean isValid(TileEntity facingTE, EnumFacing facing) { + return facingTE instanceof InventoryTileEntityBase + && (SlotlessItemHandlerHelper.isSlotless(facingTE, facing) + || ((InventoryTileEntityBase) facingTE).getInventory() instanceof SimpleInventory); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawer.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawer.java index 29da8c4dd..6882f525a 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawer.java @@ -15,11 +15,11 @@ import java.util.Collections; import java.util.function.Supplier; public class StorageItemDrawer extends StorageItemExternal { + private NetworkNodeExternalStorage externalStorage; private Supplier drawerSupplier; public StorageItemDrawer(NetworkNodeExternalStorage externalStorage, Supplier drawerSupplier) { - super(externalStorage); - + this.externalStorage = externalStorage; this.drawerSupplier = drawerSupplier; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawerGroup.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawerGroup.java index 8d3ef8eb8..0de4e7284 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawerGroup.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemDrawerGroup.java @@ -14,11 +14,11 @@ import java.util.List; import java.util.function.Supplier; public class StorageItemDrawerGroup extends StorageItemExternal { + private NetworkNodeExternalStorage externalStorage; private Supplier groupSupplier; public StorageItemDrawerGroup(NetworkNodeExternalStorage externalStorage, Supplier groupSupplier) { - super(externalStorage); - + this.externalStorage = externalStorage; this.groupSupplier = groupSupplier; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemExternal.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemExternal.java index 39eae9da4..b0c778ac7 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemExternal.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemExternal.java @@ -11,13 +11,8 @@ import java.util.ArrayList; import java.util.List; public abstract class StorageItemExternal implements IStorage { - protected NetworkNodeExternalStorage externalStorage; private List cache; - public StorageItemExternal(NetworkNodeExternalStorage externalStorage) { - this.externalStorage = externalStorage; - } - public abstract int getCapacity(); public void detectChanges(INetworkMaster network) { @@ -94,9 +89,4 @@ public abstract class StorageItemExternal implements IStorage { public int getCacheDelta(int storedPreInsertion, int size, @Nullable ItemStack remainder) { return remainder == null ? size : (size - remainder.getCount()); } - - @Override - public boolean equals(Object o) { - return o instanceof StorageItemExternal && externalStorage.getFacingTilePosition().equals(((StorageItemExternal) o).externalStorage.getFacingTilePosition()); - } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemItemHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemItemHandler.java index 4ab9ea919..94a0816b3 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemItemHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemItemHandler.java @@ -16,12 +16,12 @@ import java.util.List; import java.util.function.Supplier; public class StorageItemItemHandler extends StorageItemExternal { + private NetworkNodeExternalStorage externalStorage; private Supplier handlerSupplier; private AccessType lockedAccessType = AccessType.INSERT_EXTRACT; public StorageItemItemHandler(NetworkNodeExternalStorage externalStorage, Supplier handlerSupplier) { - super(externalStorage); - + this.externalStorage = externalStorage; this.handlerSupplier = handlerSupplier; if (externalStorage.getFacingTile().getBlockType().getUnlocalizedName().equals("tile.ExtraUtils2:TrashCan")) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheFluid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheFluid.java index a2fb03447..2c1bdf503 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheFluid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheFluid.java @@ -27,11 +27,9 @@ public class StorageCacheFluid implements IStorageCache { public synchronized void invalidate() { storages.clear(); - network.getNodeGraph() - .all() - .stream() + network.getNodeGraph().all().stream() .filter(node -> node.canUpdate() && node instanceof IStorageProvider) - .forEach(node -> ((IStorageProvider) node).addFluidStorages(this)); + .forEach(node -> ((IStorageProvider) node).addFluidStorages(storages)); list.clear(); @@ -80,9 +78,4 @@ public class StorageCacheFluid implements IStorageCache { public List> getStorages() { return storages; } - - @Override - public boolean addStorage(IStorage storage) { - return !storages.contains(storage) && storages.add(storage); - } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheItem.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheItem.java index 5af2c492c..09344660a 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheItem.java @@ -27,11 +27,9 @@ public class StorageCacheItem implements IStorageCache { public synchronized void invalidate() { storages.clear(); - network.getNodeGraph() - .all() - .stream() + network.getNodeGraph().all().stream() .filter(node -> node.canUpdate() && node instanceof IStorageProvider) - .forEach(node -> ((IStorageProvider) node).addItemStorages(this)); + .forEach(node -> ((IStorageProvider) node).addItemStorages(storages)); list.clear(); @@ -82,9 +80,4 @@ public class StorageCacheItem implements IStorageCache { public List> getStorages() { return storages; } - - @Override - public boolean addStorage(IStorage storage) { - return !storages.contains(storage) && storages.add(storage); - } }