public override int GetHashCode()
        {
            int hash = 25;

            unchecked {
                hash = hash * 31 + ItemID;
                hash = hash * 31 + SkinID;
                if (ItemAPI.IsLegendary(ItemID))
                {
                    hash = hash * 31 + StatID;
                }
            }
            return(hash);
        }
 public override bool Equals(object obj)
 {
     if (obj is ExtendedItemStack)
     {
         var item = obj as ExtendedItemStack;
         if (item != null && ItemAPI.IsLegendary(ID) && ItemAPI.IsLegendary(item.ID))
         {
             return(item != null && SkinID == item.SkinID && ID == item.ID);
         }
         return(item != null && SkinID == item.SkinID && ID == item.ID && StatID == item.StatID);
     }
     if (obj is ItemStackDifference)
     {
         var item = obj as ItemStackDifference;
         if (item != null && ItemAPI.IsLegendary(ID) && ItemAPI.IsLegendary(item.ItemID))
         {
             return(item != null && SkinID == item.SkinID && ID == item.ItemID);
         }
         return(item != null && SkinID == item.SkinID && ID == item.ItemID && StatID == item.StatID);
     }
     return(false);
 }