public static IEnumerator HandleDuration(PlayerItem item, float duration, PlayerController user, Action <PlayerController> OnFinish)
        {
            bool isCurrentlyActive = item.IsCurrentlyActive;

            if (isCurrentlyActive)
            {
                yield break;
            }
            SetPrivateType(item, "m_isCurrentlyActive", true);
            SetPrivateType(item, "m_activeElapsed", 0f);
            SetPrivateType(item, "m_activeDuration", duration);
            item.OnActivationStatusChanged?.Invoke(item);
            float elapsed = GetPrivateType <PlayerItem, float>(item, "m_activeElapsed");
            float dur     = GetPrivateType <PlayerItem, float>(item, "m_activeDuration");

            while (GetPrivateType <PlayerItem, float>(item, "m_activeElapsed") < ItemBuilder.GetPrivateType <PlayerItem, float>(item, "m_activeDuration") && item.IsCurrentlyActive)
            {
                yield return(null);
            }
            SetPrivateType(item, "m_isCurrentlyActive", false);
            item.OnActivationStatusChanged?.Invoke(item);
            OnFinish?.Invoke(user);
            yield break;
        }