using System.Collections.Generic;
 using System.Globalization;
 using System.Numerics;
+using Dalamud.Game.ClientState.Conditions;
+using Dalamud.Plugin.Services;
 using FFXIVClientStructs.FFXIV.Client.Game;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Logging;
         }
     }
 
-    internal abstract class UseItemBase(ILogger logger) : ITask
+    internal abstract class UseItemBase(ICondition condition, ILogger logger) : ITask
     {
         private bool _usedItem;
         private DateTime _continueAt;
         private int _itemCount;
 
         public uint ItemId { get; set; }
+        public bool StartingCombat { get; set; }
 
         protected abstract bool UseItem();
 
             if (DateTime.Now <= _continueAt)
                 return ETaskResult.StillRunning;
 
+            if (StartingCombat && condition[ConditionFlag.InCombat])
+                return ETaskResult.TaskComplete;
+
             if (ItemId == VesperBayAetheryteTicket && _usedItem)
             {
                 InventoryManager* inventoryManager = InventoryManager.Instance();
     }
 
 
-    internal sealed class UseOnGround(GameFunctions gameFunctions, ILogger<UseOnGround> logger) : UseItemBase(logger)
+    internal sealed class UseOnGround(GameFunctions gameFunctions, ICondition condition, ILogger<UseOnGround> logger)
+        : UseItemBase(condition, logger)
     {
         public uint DataId { get; set; }
 
         public override string ToString() => $"UseItem({ItemId} on ground at {DataId})";
     }
 
-    internal sealed class UseOnPosition(GameFunctions gameFunctions, ILogger<UseOnPosition> logger)
-        : UseItemBase(logger)
+    internal sealed class UseOnPosition(
+        GameFunctions gameFunctions,
+        ICondition condition,
+        ILogger<UseOnPosition> logger)
+        : UseItemBase(condition, logger)
     {
         public Vector3 Position { get; set; }
 
             $"UseItem({ItemId} on ground at {Position.ToString("G", CultureInfo.InvariantCulture)})";
     }
 
-    internal sealed class UseOnObject(GameFunctions gameFunctions, ILogger<UseOnObject> logger) : UseItemBase(logger)
+    internal sealed class UseOnObject(GameFunctions gameFunctions, ICondition condition, ILogger<UseOnObject> logger)
+        : UseItemBase(condition, logger)
     {
         public uint DataId { get; set; }
 
-        public ITask With(uint dataId, uint itemId)
+        public ITask With(uint dataId, uint itemId, bool startingCombat = false)
         {
             DataId = dataId;
             ItemId = itemId;
+            StartingCombat = startingCombat;
             return this;
         }
 
         public override string ToString() => $"UseItem({ItemId} on {DataId})";
     }
 
-    internal sealed class Use(GameFunctions gameFunctions, ILogger<Use> logger) : UseItemBase(logger)
+    internal sealed class Use(GameFunctions gameFunctions, ICondition condition, ILogger<Use> logger)
+        : UseItemBase(condition, logger)
     {
         public ITask With(uint itemId)
         {