package ttftcuts.physis.utils; import java.util.Iterator; import java.util.NoSuchElementException; import ttftcuts.physis.common.artifact.PhysisArtifacts; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; public class SocketIterator implements Iterable<Socket> { private static SocketIterator instance = new SocketIterator(); private NBTTagCompound[] list; private boolean getTriggers = false; private boolean getEffects = false; private SocketIterator() {} private static SocketIterator iterate(ItemStack stack) { instance.list = PhysisArtifacts.getSocketablesFromStack(stack); return instance; } public static SocketIterator triggers(ItemStack stack) { instance.getTriggers = true; instance.getEffects = false; return iterate(stack); } public static SocketIterator effects(ItemStack stack) { instance.getTriggers = false; instance.getEffects = true; return iterate(stack); } public static SocketIterator both(ItemStack stack) { instance.getTriggers = true; instance.getEffects = true; return iterate(stack); } @Override public Iterator<Socket> iterator() { return new Iter(list, getTriggers, getEffects); } private class Iter implements Iterator<Socket> { private NBTTagCompound[] array; private int pos = 0; private boolean triggers; private boolean effects; public Iter(NBTTagCompound[] array, boolean triggers, boolean effects) { this.array = array; if (array == null) { this.array = new NBTTagCompound[0]; } this.triggers = triggers; this.effects = effects; } public boolean hasNext() { return this.pos < this.array.length; } public Socket next() throws NoSuchElementException { if (hasNext()) { return new Socket(array[pos], pos++, triggers, effects); } else { throw new NoSuchElementException(); } } public void remove() { throw new UnsupportedOperationException(); } } }