diff --git a/src/main/java/refinedstorage/api/storage/IItemList.java b/src/main/java/refinedstorage/api/storage/IItemList.java index b018bbf5f..fdbb08da4 100755 --- a/src/main/java/refinedstorage/api/storage/IItemList.java +++ b/src/main/java/refinedstorage/api/storage/IItemList.java @@ -8,6 +8,8 @@ import java.util.List; public interface IItemList { void rebuild(INetworkMaster master); + List getStorages(); + void add(ItemStack stack); void remove(ItemStack stack); diff --git a/src/main/java/refinedstorage/api/storage/IStorageProvider.java b/src/main/java/refinedstorage/api/storage/IStorageProvider.java index 569c5c665..8b344de05 100755 --- a/src/main/java/refinedstorage/api/storage/IStorageProvider.java +++ b/src/main/java/refinedstorage/api/storage/IStorageProvider.java @@ -1,11 +1,15 @@ package refinedstorage.api.storage; +import java.util.List; + /** * Implement this interface on the tile that has a {@link refinedstorage.api.RefinedStorageCapabilities#NETWORK_SLAVE_CAPABILITY} capability. */ public interface IStorageProvider { /** - * @return The storages that this tile provides. + * Adds the storages. + * + * @param storages The previously added storages */ - IStorage[] getStorages(); + void addStorages(List storages); } diff --git a/src/main/java/refinedstorage/apiimpl/storage/ItemList.java b/src/main/java/refinedstorage/apiimpl/storage/ItemList.java index 12df66163..bff2103df 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/ItemList.java +++ b/src/main/java/refinedstorage/apiimpl/storage/ItemList.java @@ -8,30 +8,35 @@ import refinedstorage.api.storage.IItemList; import refinedstorage.api.storage.IStorage; import refinedstorage.api.storage.IStorageProvider; +import java.util.ArrayList; import java.util.List; public class ItemList implements IItemList { - private List stacks; + private List storages = new ArrayList(); + private List stacks = new ArrayList(); @Override public void rebuild(INetworkMaster master) { - stacks.clear(); + storages.clear(); for (INetworkSlave slave : master.getSlaves()) { - if (slave instanceof IStorageProvider) { - IStorage[] storages = ((IStorageProvider) slave).getStorages(); - - if (storages != null) { - for (IStorage storage : storages) { - if (storage != null) { - for (ItemStack stack : storage.getItems()) { - add(stack); - } - } - } - } + if (slave.canUpdate() && slave instanceof IStorageProvider) { + ((IStorageProvider) slave).addStorages(storages); } } + + stacks.clear(); + + for (IStorage storage : storages) { + for (ItemStack stack : storage.getItems()) { + add(stack); + } + } + } + + @Override + public List getStorages() { + return storages; } @Override diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index d401f23a3..cb62e6770 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -23,6 +23,8 @@ import refinedstorage.inventory.BasicItemValidator; import refinedstorage.network.MessagePriorityUpdate; import refinedstorage.tile.config.*; +import java.util.List; + public class TileDiskDrive extends TileSlave implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig { public class Storage extends NBTStorage { public Storage(ItemStack disk) { @@ -60,6 +62,10 @@ public class TileDiskDrive extends TileSlave implements IStorageProvider, IStora } else { storages[slot] = new Storage(disk); } + + if (isConnected()) { + network.getItems().rebuild(network); + } } @Override @@ -108,8 +114,12 @@ public class TileDiskDrive extends TileSlave implements IStorageProvider, IStora } @Override - public IStorage[] getStorages() { - return storages; + public void addStorages(List storages) { + for (IStorage storage : storages) { + if (storage != null) { + storages.add(storage); + } + } } @Override diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index 9602269dc..e17842d95 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -20,6 +20,8 @@ import refinedstorage.inventory.BasicItemHandler; import refinedstorage.network.MessagePriorityUpdate; import refinedstorage.tile.config.*; +import java.util.List; + public class TileStorage extends TileSlave implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig { class Storage extends NBTStorage { public Storage() { @@ -87,14 +89,11 @@ public class TileStorage extends TileSlave implements IStorageProvider, IStorage } @Override - public IStorage[] getStorages() { - if (storage != null) { - return new IStorage[]{ - storage - }; - } - return null; + public void addStorages(List storages) { + if (storage != null) { + storages.add(storage); + } } @Override diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index a702a5072..f2375f5e8 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -58,7 +58,6 @@ 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 IItemList items = new ItemList(); private boolean rebuildItemList; @@ -132,6 +131,14 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR slaves.removeAll(slavesToRemove); slavesToRemove.clear(); + if (rebuildItemList) { + items.rebuild(this); + + rebuildItemList = false; + + updateItemsWithClient(); + } + if (canRun()) { if (ticks % 20 == 0 || forceUpdate) { updateSlaves(); @@ -185,14 +192,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR updateSlaves(); } - if (rebuildItemList) { - items.rebuild(this); - - rebuildItemList = false; - - updateItemsWithClient(); - } - if (couldRun != canRun()) { couldRun = canRun(); @@ -388,7 +387,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR wirelessGridHandler.setRange(range); - Collections.sort(storages, new Comparator() { + Collections.sort(items.getStorages(), new Comparator() { @Override public int compare(IStorage left, IStorage right) { int leftStored = left.getStored(); @@ -402,7 +401,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } }); - Collections.sort(storages, new Comparator() { + Collections.sort(items.getStorages(), new Comparator() { @Override public int compare(IStorage left, IStorage right) { if (left.getPriority() == right.getPriority()) { @@ -430,7 +429,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public ItemStack push(ItemStack stack, int size, boolean simulate) { - if (stack == null || stack.getItem() == null || storages.isEmpty()) { + if (stack == null || stack.getItem() == null || items.getStorages().isEmpty()) { + System.out.println("Cannot push!"); return ItemHandlerHelper.copyStackWithSize(stack, size); } @@ -438,7 +438,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR ItemStack remainder = stack; - for (IStorage storage : storages) { + for (IStorage storage : items.getStorages()) { remainder = storage.push(remainder, size, simulate); if (remainder == null) { @@ -476,7 +476,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR ItemStack newStack = null; - for (IStorage storage : storages) { + for (IStorage storage : items.getStorages()) { ItemStack took = storage.take(stack, requested - received, flags); if (took != null) { diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index 24e019446..f3e67be26 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -22,6 +22,8 @@ import refinedstorage.tile.config.IModeConfig; import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.config.ModeConstants; +import java.util.List; + public class TileExternalStorage extends TileSlave implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig { public static final String NBT_PRIORITY = "Priority"; public static final String NBT_COMPARE = "Compare"; @@ -141,13 +143,12 @@ public class TileExternalStorage extends TileSlave implements IStorageProvider, } @Override - public IStorage[] getStorages() { + public void addStorages(List storages) { TileEntity facing = getFacingTile(); if (facing instanceof IDrawerGroup) { IDrawerGroup group = (IDrawerGroup) facing; - IStorage[] storages = new IStorage[group.getDrawerCount()]; energyUsage = group.getDrawerCount(); stored = 0; @@ -157,7 +158,7 @@ public class TileExternalStorage extends TileSlave implements IStorageProvider, if (group.isDrawerEnabled(i)) { DrawerStorage storage = new DrawerStorage(this, group.getDrawer(i)); - storages[i] = storage; + storages.add(storage); stored += storage.getStored(); capacity += storage.getCapacity(); @@ -170,9 +171,7 @@ public class TileExternalStorage extends TileSlave implements IStorageProvider, stored = storage.getStored(); capacity = storage.getCapacity(); - return new IStorage[]{ - storage - }; + storages.add(storage); } else if (facing instanceof IDeepStorageUnit) { DeepStorageUnitStorage storage = new DeepStorageUnitStorage(this, (IDeepStorageUnit) facing); @@ -180,9 +179,7 @@ public class TileExternalStorage extends TileSlave implements IStorageProvider, stored = storage.getStored(); capacity = storage.getCapacity(); - return new IStorage[]{ - storage - }; + storages.add(storage); } else { IItemHandler handler = RefinedStorageUtils.getItemHandler(facing, getDirection().getOpposite()); @@ -193,17 +190,13 @@ public class TileExternalStorage extends TileSlave implements IStorageProvider, stored = storage.getStored(); capacity = storage.getCapacity(); - return new IStorage[]{ - storage - }; + storages.add(storage); } else { energyUsage = 0; stored = 0; capacity = 0; } } - - return null; } @Override