package crazypants.enderio.conduit.redstone; import java.util.HashSet; import java.util.Set; import net.minecraftforge.common.util.ForgeDirection; public class SignalSource { public final Signal signal; public final ForgeDirection fromDirection; public SignalSource(Signal signal, ForgeDirection fromDirection) { this.signal = signal; this.fromDirection = fromDirection; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((fromDirection == null) ? 0 : fromDirection.hashCode()); result = prime * result + ((signal == null) ? 0 : signal.hashCode()); return result; } @Override public boolean equals(Object obj) { if(this == obj) { return true; } if(obj == null) { return false; } if(getClass() != obj.getClass()) { return false; } SignalSource other = (SignalSource) obj; if(fromDirection != other.fromDirection) { return false; } if(signal == null) { if(other.signal != null) { return false; } } else if(!signal.equals(other.signal)) { return false; } return true; } @Override public String toString() { return "SignalSource [signal=" + signal + ", fromDirection=" + fromDirection + "]"; } public static int[] toIntArray(Set<SignalSource> sources) { // Each source is 5 ints int[] result = new int[sources.size() * 5]; int i = 0; for (SignalSource ss : sources) { result[i] = ss.signal.x; i++; result[i] = ss.signal.y; i++; result[i] = ss.signal.z; i++; result[i] = ss.signal.strength; i++; result[i] = ss.signal.color.ordinal(); i++; result[i] = ss.fromDirection.ordinal(); i++; } return result; } public static Set<SignalSource> fromIntArray(int[] enc) { Set<SignalSource> result = new HashSet<SignalSource>(); for (int i = 0; i < enc.length; i += 5) { // Signal sig = new Signal(enc[i], enc[i + 1], enc[i + 2], enc[i + 3], ForgeDirection.UNKNOWN,14, SignalColor.values()[enc[i + 4]]); // result.add(new SignalSource(sig, ForgeDirection.values()[enc[i + 4]])); } return result; } }