package advancedsystemsmanager.api.execution;
import cofh.api.energy.IEnergyProvider;
import net.minecraft.item.ItemStack;
public class Key<Type>
{
int hashCode;
Type key;
public Key(Type key)
{
setHashCode(key);
this.key = key;
}
void setHashCode(Type key)
{
this.hashCode = key.hashCode();
}
@Override
public int hashCode()
{
return hashCode;
}
@Override
public boolean equals(Object obj)
{
return obj instanceof Key && key == ((Key)obj).key;
}
@Override
public String toString()
{
return "[Key :" + key.toString() + "]";
}
public static class ItemKey extends Key<ItemStack>
{
public ItemKey(ItemStack key)
{
super(key);
}
@Override
void setHashCode(ItemStack stack)
{
hashCode = stack.getItem().hashCode() ^ stack.getItemDamage() ^ (stack.hasTagCompound() ? stack.stackTagCompound.hashCode() : 0);
}
@Override
public boolean equals(Object obj)
{
return obj instanceof ItemKey && key.isItemEqual(((ItemKey)obj).key);
}
}
public static class RFKey extends Key<Integer>
{
IEnergyProvider source;
public RFKey(IEnergyProvider source, int id)
{
super(id);
this.source = source;
hashCode |= source.hashCode() << 5;
}
@Override
void setHashCode(Integer key)
{
hashCode = key;
}
@Override
public boolean equals(Object obj)
{
return obj instanceof RFKey && source == ((RFKey) obj).source;
}
}
}