diff --git a/src/main/java/refinedstorage/api/network/INetworkMaster.java b/src/main/java/refinedstorage/api/network/INetworkMaster.java index 16458f2d8..1b2721ed6 100755 --- a/src/main/java/refinedstorage/api/network/INetworkMaster.java +++ b/src/main/java/refinedstorage/api/network/INetworkMaster.java @@ -7,7 +7,7 @@ import net.minecraft.util.math.BlockPos; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.storage.CompareFlags; -import refinedstorage.api.storage.IItemList; +import refinedstorage.api.storage.IGroupedStorage; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -60,9 +60,9 @@ public interface INetworkMaster { IWirelessGridHandler getWirelessGridHandler(); /** - * @return A {@link IItemList} containing all network items. + * @return The {@link IGroupedStorage} of this network */ - IItemList getItems(); + IGroupedStorage getStorage(); /** * @return The crafting tasks in this network, do NOT modify this list @@ -123,12 +123,12 @@ public interface INetworkMaster { /** * Sends to all clients in a grid a packet with all the items in this network. */ - void updateItemsWithClient(); + void updateStorageWithClient(); /** * Sends a player a packet with all the items in this network. */ - void updateItemsWithClient(EntityPlayerMP player); + void updateStorageWithClient(EntityPlayerMP player); /** * Pushes an item to this network. diff --git a/src/main/java/refinedstorage/api/storage/IGroupedStorage.java b/src/main/java/refinedstorage/api/storage/IGroupedStorage.java new file mode 100755 index 000000000..0b86e28c4 --- /dev/null +++ b/src/main/java/refinedstorage/api/storage/IGroupedStorage.java @@ -0,0 +1,53 @@ +package refinedstorage.api.storage; + +import net.minecraft.item.ItemStack; +import refinedstorage.api.network.INetworkMaster; + +import java.util.Collection; +import java.util.List; + +/** + * This holds all items from all the connected storages from a {@link INetworkMaster}. + */ +public interface IGroupedStorage { + /** + * Rebuilds the storages and items for a network. Typically called when a {@link IStorageProvider} is + * added or removed from the network. + * + * @param master The network + */ + void rebuild(INetworkMaster master); + + /** + * @return A list of {@link IStorage} connected to this network + */ + List getStorages(); + + /** + * Adds an item to the network. Will merge it with another item if it already exists. + * + * @param stack The stack to add, do NOT modify + */ + void add(ItemStack stack); + + /** + * Removes a item from the network. + * + * @param stack The item to remove, do NOT modify + */ + void remove(ItemStack stack); + + /** + * Gets an item from the network, does not decrement its count. + * + * @param stack The stack to find + * @param flags The flags to compare on, see {@link CompareFlags} + * @return The stack, do NOT modify + */ + ItemStack get(ItemStack stack, int flags); + + /** + * @return All stacks in this storage network + */ + Collection getStacks(); +} diff --git a/src/main/java/refinedstorage/api/storage/IItemList.java b/src/main/java/refinedstorage/api/storage/IItemList.java deleted file mode 100755 index fdbb08da4..000000000 --- a/src/main/java/refinedstorage/api/storage/IItemList.java +++ /dev/null @@ -1,20 +0,0 @@ -package refinedstorage.api.storage; - -import net.minecraft.item.ItemStack; -import refinedstorage.api.network.INetworkMaster; - -import java.util.List; - -public interface IItemList { - void rebuild(INetworkMaster master); - - List getStorages(); - - void add(ItemStack stack); - - void remove(ItemStack stack); - - ItemStack get(ItemStack stack, int flags); - - List getStacks(); -} diff --git a/src/main/java/refinedstorage/api/storage/IStorageProvider.java b/src/main/java/refinedstorage/api/storage/IStorageProvider.java index 8b344de05..cc4067512 100755 --- a/src/main/java/refinedstorage/api/storage/IStorageProvider.java +++ b/src/main/java/refinedstorage/api/storage/IStorageProvider.java @@ -7,7 +7,7 @@ import java.util.List; */ public interface IStorageProvider { /** - * Adds the storages. + * Adds the storages that this storage provides. * * @param storages The previously added storages */ diff --git a/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java index 67788e1db..2344ddc42 100755 --- a/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java @@ -57,7 +57,7 @@ public class WirelessGridHandler implements IWirelessGridHandler { player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.WIRELESS_GRID, player.worldObj, RefinedStorageUtils.getIdFromHand(hand), 0, 0); - network.updateItemsWithClient((EntityPlayerMP) player); + network.updateStorageWithClient((EntityPlayerMP) player); drainEnergy(player, ItemWirelessGrid.USAGE_OPEN); diff --git a/src/main/java/refinedstorage/apiimpl/storage/ItemList.java b/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java similarity index 71% rename from src/main/java/refinedstorage/apiimpl/storage/ItemList.java rename to src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java index bff2103df..eb9710e36 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/ItemList.java +++ b/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java @@ -1,19 +1,23 @@ package refinedstorage.apiimpl.storage; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Multimap; +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.IItemList; +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 ItemList implements IItemList { +public class GroupedStorage implements IGroupedStorage { private List storages = new ArrayList(); - private List stacks = new ArrayList(); + private Multimap stacks = ArrayListMultimap.create(); @Override public void rebuild(INetworkMaster master) { @@ -41,7 +45,7 @@ public class ItemList implements IItemList { @Override public void add(ItemStack stack) { - for (ItemStack otherStack : stacks) { + for (ItemStack otherStack : stacks.get(stack.getItem())) { if (RefinedStorageUtils.compareStackNoQuantity(otherStack, stack)) { otherStack.stackSize += stack.stackSize; @@ -49,17 +53,17 @@ public class ItemList implements IItemList { } } - stacks.add(stack.copy()); + stacks.put(stack.getItem(), stack.copy()); } @Override public void remove(ItemStack stack) { - for (ItemStack otherStack : stacks) { + for (ItemStack otherStack : stacks.get(stack.getItem())) { if (RefinedStorageUtils.compareStackNoQuantity(otherStack, stack)) { otherStack.stackSize -= stack.stackSize; if (otherStack.stackSize == 0) { - stacks.remove(otherStack); + stacks.remove(otherStack.getItem(), otherStack); } return; @@ -69,7 +73,7 @@ public class ItemList implements IItemList { @Override public ItemStack get(ItemStack stack, int flags) { - for (ItemStack otherStack : stacks) { + for (ItemStack otherStack : stacks.get(stack.getItem())) { if (RefinedStorageUtils.compareStack(otherStack, stack, flags)) { return otherStack; } @@ -79,7 +83,7 @@ public class ItemList implements IItemList { } @Override - public List getStacks() { - return stacks; + public Collection getStacks() { + return stacks.values(); } } diff --git a/src/main/java/refinedstorage/network/MessageGridItems.java b/src/main/java/refinedstorage/network/MessageGridItems.java index 2824463f9..082ef08af 100755 --- a/src/main/java/refinedstorage/network/MessageGridItems.java +++ b/src/main/java/refinedstorage/network/MessageGridItems.java @@ -41,9 +41,9 @@ public class MessageGridItems implements IMessage, IMessageHandler slaves = new ArrayList(); private List slavesToAdd = new ArrayList(); @@ -131,13 +131,12 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR slaves.removeAll(slavesToRemove); slavesToRemove.clear(); - if (rebuildItemList) { - System.out.println("Rebuilding item list"); - items.rebuild(this); + if (rebuildStorage) { + storage.rebuild(this); - rebuildItemList = false; + rebuildStorage = false; - updateItemsWithClient(); + updateStorageWithClient(); } if (canRun()) { @@ -229,7 +228,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR slavesToAdd.add(slave); if (slave instanceof IStorageProvider) { - rebuildItemList = true; + rebuildStorage = true; } } @@ -238,7 +237,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR slavesToRemove.add(slave); if (slave instanceof IStorageProvider) { - rebuildItemList = true; + rebuildStorage = true; } } @@ -265,9 +264,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR disconnectSlaves(); } - @Override - public IItemList getItems() { - return items; + public IGroupedStorage getStorage() { + return storage; } @Override @@ -342,7 +340,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR int score = 0; for (ItemStack input : patterns.get(i).getInputs()) { - ItemStack stored = items.get(input, CompareFlags.COMPARE_DAMAGE | CompareFlags.COMPARE_NBT); + ItemStack stored = storage.get(input, CompareFlags.COMPARE_DAMAGE | CompareFlags.COMPARE_NBT); score += stored != null ? stored.stackSize : 0; } @@ -388,7 +386,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR wirelessGridHandler.setRange(range); - Collections.sort(items.getStorages(), new Comparator() { + Collections.sort(storage.getStorages(), new Comparator() { @Override public int compare(IStorage left, IStorage right) { int leftStored = left.getStored(); @@ -402,7 +400,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } }); - Collections.sort(items.getStorages(), new Comparator() { + Collections.sort(storage.getStorages(), new Comparator() { @Override public int compare(IStorage left, IStorage right) { if (left.getPriority() == right.getPriority()) { @@ -415,22 +413,22 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } @Override - public void updateItemsWithClient() { + public void updateStorageWithClient() { for (EntityPlayer player : worldObj.playerEntities) { if (player.openContainer.getClass() == ContainerGrid.class && pos.equals(((ContainerGrid) player.openContainer).getGrid().getNetworkPosition())) { - updateItemsWithClient((EntityPlayerMP) player); + updateStorageWithClient((EntityPlayerMP) player); } } } @Override - public void updateItemsWithClient(EntityPlayerMP player) { + public void updateStorageWithClient(EntityPlayerMP player) { RefinedStorage.NETWORK.sendTo(new MessageGridItems(this), player); } @Override public ItemStack push(ItemStack stack, int size, boolean simulate) { - if (stack == null || stack.getItem() == null || items.getStorages().isEmpty()) { + if (stack == null || stack.getItem() == null || storage.getStorages().isEmpty()) { return ItemHandlerHelper.copyStackWithSize(stack, size); } @@ -438,7 +436,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR ItemStack remainder = stack; - for (IStorage storage : items.getStorages()) { + for (IStorage storage : this.storage.getStorages()) { remainder = storage.push(remainder, size, simulate); if (remainder == null) { @@ -461,9 +459,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } } - items.add(ItemHandlerHelper.copyStackWithSize(stack, sizePushed)); + storage.add(ItemHandlerHelper.copyStackWithSize(stack, sizePushed)); - updateItemsWithClient(); + updateStorageWithClient(); } return remainder; @@ -476,7 +474,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR ItemStack newStack = null; - for (IStorage storage : items.getStorages()) { + for (IStorage storage : this.storage.getStorages()) { ItemStack took = storage.take(stack, requested - received, flags); if (took != null) { @@ -495,9 +493,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } if (newStack != null) { - items.remove(newStack); + storage.remove(newStack); - updateItemsWithClient(); + updateStorageWithClient(); } return newStack; diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index 4fbf5680b..38794ba6b 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -112,7 +112,7 @@ public class TileGrid extends TileSlave implements IGrid { public void onGridOpened(EntityPlayer player) { if (isConnected()) { - network.updateItemsWithClient((EntityPlayerMP) player); + network.updateStorageWithClient((EntityPlayerMP) player); } }