/// <summary>
        /// Adds an affect.
        /// </summary>
        /// <param name="effect">The effect to add.</param>
        public virtual void AddEffect(IEffect <T> effect)
        {
            if (EffectTimes.Any(x => x.Effect == effect))
            {
                return;
            }

            if (!effect.CanBeAppliedTo(EffectTarget))
            {
                throw new WrapperException($"Failed to add effect.\r\nThe effect of type '{effect.GetType()}' can't be applied to the target of type '{EffectTarget.GetType()}'.");
            }

            effect.OnAttach(EffectTarget);
            EffectTimes.Add(new EffectTimeContainer(effect, -1));
        }