diff --git a/src/main/java/refinedstorage/api/storage/IGroupedStorage.java b/src/main/java/refinedstorage/api/storage/IGroupedStorage.java index 95f1331ae..c95a7f43d 100755 --- a/src/main/java/refinedstorage/api/storage/IGroupedStorage.java +++ b/src/main/java/refinedstorage/api/storage/IGroupedStorage.java @@ -14,12 +14,7 @@ public interface IGroupedStorage { * Rebuilds the storages and items for a network. Typically called when a {@link IStorageProvider} is * added or removed from the network. */ - void rebuild(); - - /** - * @return A list of {@link IStorage} connected to this network - */ - List getStorages(); + void rebuild(List storages); /** * Adds an item to the network. Will merge it with another item if it already exists. diff --git a/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java b/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java index 76bed2b29..0b60c094c 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java @@ -6,34 +6,22 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import refinedstorage.RefinedStorageUtils; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.network.INetworkSlave; import refinedstorage.api.storage.IGroupedStorage; import refinedstorage.api.storage.IStorage; -import refinedstorage.api.storage.IStorageProvider; -import java.util.ArrayList; import java.util.Collection; import java.util.List; public class GroupedStorage implements IGroupedStorage { - private List storages = new ArrayList(); - private Multimap stacks = ArrayListMultimap.create(); private INetworkMaster network; + private Multimap stacks = ArrayListMultimap.create(); public GroupedStorage(INetworkMaster network) { this.network = network; } @Override - public void rebuild() { - storages.clear(); - - for (INetworkSlave slave : network.getSlaves()) { - if (slave.canUpdate() && slave instanceof IStorageProvider) { - ((IStorageProvider) slave).addStorages(storages); - } - } - + public void rebuild(List storages) { stacks.clear(); for (IStorage storage : storages) { @@ -45,17 +33,14 @@ public class GroupedStorage implements IGroupedStorage { network.sendStorageToClient(); } - @Override - public List getStorages() { - return storages; - } - @Override public void add(ItemStack stack) { for (ItemStack otherStack : stacks.get(stack.getItem())) { if (RefinedStorageUtils.compareStackNoQuantity(otherStack, stack)) { otherStack.stackSize += stack.stackSize; + network.sendStorageToClient(); + return; } } diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index e5ef37443..408d1cbb3 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -27,6 +27,7 @@ import refinedstorage.api.network.IWirelessGridHandler; import refinedstorage.api.storage.CompareFlags; import refinedstorage.api.storage.IGroupedStorage; import refinedstorage.api.storage.IStorage; +import refinedstorage.api.storage.IStorageProvider; import refinedstorage.apiimpl.autocrafting.BasicCraftingTask; import refinedstorage.apiimpl.autocrafting.CraftingPattern; import refinedstorage.apiimpl.autocrafting.ProcessingCraftingTask; @@ -57,6 +58,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR private GridHandler gridHandler = new GridHandler(this); private WirelessGridHandler wirelessGridHandler = new WirelessGridHandler(this); + private List storages = new ArrayList(); private IGroupedStorage storage = new GroupedStorage(this); private List slaves = new ArrayList(); @@ -338,6 +340,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR private void updateSlaves() { this.energyUsage = 0; + this.storages.clear(); this.patterns.clear(); int range = 0; @@ -347,6 +350,10 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR continue; } + if (slave instanceof IStorageProvider) { + ((IStorageProvider) slave).addStorages(storages); + } + if (slave instanceof TileWirelessTransmitter) { range += ((TileWirelessTransmitter) slave).getRange(); } @@ -368,7 +375,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR wirelessGridHandler.setRange(range); - Collections.sort(storage.getStorages(), new Comparator() { + Collections.sort(storages, new Comparator() { @Override public int compare(IStorage left, IStorage right) { int leftStored = left.getStored(); @@ -382,7 +389,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } }); - Collections.sort(storage.getStorages(), new Comparator() { + Collections.sort(storages, new Comparator() { @Override public int compare(IStorage left, IStorage right) { if (left.getPriority() == right.getPriority()) { @@ -393,7 +400,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } }); - this.storage.rebuild(); + this.storage.rebuild(storages); } @Override @@ -416,7 +423,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public ItemStack push(ItemStack stack, int size, boolean simulate) { - if (stack == null || stack.getItem() == null || storage.getStorages().isEmpty()) { + if (stack == null || stack.getItem() == null || storages.isEmpty()) { return ItemHandlerHelper.copyStackWithSize(stack, size); } @@ -424,7 +431,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR ItemStack remainder = stack; - for (IStorage storage : this.storage.getStorages()) { + for (IStorage storage : storages) { remainder = storage.push(remainder, size, simulate); if (remainder == null) { @@ -460,7 +467,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR ItemStack newStack = null; - for (IStorage storage : this.storage.getStorages()) { + for (IStorage storage : storages) { ItemStack took = storage.take(stack, requested - received, flags); if (took != null) {