int IGetOverridePriority.GetOverridePriority(GatherCollectableTag tag)
        {
            if (tag.IsUnspoiled())
            {
                // We need 5 swings to use this rotation
                if (GatheringManager.SwingsRemaining < 5)
                {
                    return -1;
                }
            }

            if (tag.IsEphemeral())
            {
                // We need 4 swings to use this rotation
                if (GatheringManager.SwingsRemaining < 4)
                {
                    return -1;
                }
            }


            // if we have a collectable && the collectable value is greater than or equal to 345: Priority 345
            if (tag.CollectableItem != null && tag.CollectableItem.Value >= 345)
            {
                return 345;
            }

            return -1;
        }
        int IGetOverridePriority.GetOverridePriority(GatherCollectableTag tag)
        {
            if (tag.IsUnspoiled())
            {
                // We need 5 swings to use this rotation
                if (GatheringManager.SwingsRemaining < 5)
                {
                    return -1;
                }
            }

            if (tag.IsEphemeral())
            {
                // We need 4 swings to use this rotation
                if (GatheringManager.SwingsRemaining < 4)
                {
                    return -1;
                }
            }

            // if we have a collectable Priority 79
            if (tag.CollectableItem != null && tag.CollectableItem.Value <= 0)
            {
                return 79;
            }

            return -1;
        }
		int IGetOverridePriority.GetOverridePriority(GatherCollectableTag tag)
		{
			if (tag.IsUnspoiled() && tag.CollectableItem == null)
			{
				return 8000;
			}

			return -1;
		}
		int IGetOverridePriority.GetOverridePriority(GatherCollectableTag tag)
		{
			if (tag.GatherItem.IsUnknown || (tag.IsUnspoiled() && tag.GatherItem.Chance == 25))
			{
				return int.MaxValue;
			}

			return -1;
		}
        protected virtual IGatheringRotation ResolveInternalGatheringRotation(GatherCollectableTag tag)
        {
            if (tag.IsUnspoiled())
            {
                return GatherCollectableTag.Rotations["Unspoiled"];
            }

            return GatherCollectableTag.Rotations["RegularNode"];
        }
        int IGetOverridePriority.GetOverridePriority(GatherCollectableTag tag)
        {
            if (tag.IsEphemeral() || tag.IsUnspoiled())
            {
                return -1;
            }

            return 8000;
        }
		public override async Task<bool> Prepare(GatherCollectableTag tag)
		{
			var unknownItems = GatheringManager.GatheringWindowItems.Where(i => i.IsUnknownChance() && i.Amount > 0).ToArray();

			if (tag.IsUnspoiled() && Core.Player.CurrentGP >= 550 && unknownItems.Length > 1)
			{
				await tag.Cast(Ability.Toil);
			}

			return await base.Prepare(tag);
		}
        public override async Task<bool> Prepare(GatherCollectableTag tag)
        {
            if (tag.IsUnspoiled()
                && Core.Player.CurrentGP >= 550
                && GatheringManager.GatheringWindowItems.Count(i => i.Chance == 25 && i.Amount > 0) > 1)
            {

                await tag.Cast(Ability.Toil);
            }
            
            return await base.Prepare(tag);
        }