package buildcraft.api.transport.pluggable; import java.util.Arrays; import java.util.Objects; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumWorldBlockLayer; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public abstract class PluggableModelKey<K extends PluggableModelKey<K>> { public final EnumWorldBlockLayer layer; public final IPluggableModelBaker<K> baker; public final EnumFacing side; private final int hash; public PluggableModelKey(EnumWorldBlockLayer layer, IPluggableModelBaker<K> baker, EnumFacing side) { this.layer = layer; if (layer != EnumWorldBlockLayer.CUTOUT && layer != EnumWorldBlockLayer.TRANSLUCENT) { throw new IllegalArgumentException("Can only use CUTOUT or TRANSLUCENT at the moment (was " + layer + ")"); } if (baker == null) throw new NullPointerException("baker"); this.baker = baker; this.side = side; /* Don't inclue the block layer in the hash code as there are different caches for cutout and translucent */ this.hash = Arrays.hashCode(new int[] { System.identityHashCode(baker), Objects.hashCode(side) }); } @Override public boolean equals(Object obj) { if (obj == this) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; PluggableModelKey<?> other = (PluggableModelKey<?>) obj; if (baker != other.baker) return false; if (side != other.side) return false; return true; } @Override public int hashCode() { return hash; } }