static void Postfix(float dt, Player __instance, ItemDrop.ItemData ___m_chestItem, ItemDrop.ItemData ___m_legItem, ItemDrop.ItemData ___m_helmetItem, ItemDrop.ItemData ___m_shoulderItem, SEMan ___m_seman)
            {
                if (!modEnabled.Value)
                {
                    return;
                }

                if (___m_seman.HaveStatusEffect("Wet"))
                {
                    HitData.DamageModifier water = GetNewDamageTypeMod(NewDamageTypes.Water, ___m_chestItem, ___m_legItem, ___m_helmetItem, ___m_shoulderItem);
                    var wet = ___m_seman.GetStatusEffect("Wet");
                    var t   = Traverse.Create(wet);

                    if (water == HitData.DamageModifier.Ignore || water == HitData.DamageModifier.Immune)
                    {
                        ___m_seman.RemoveStatusEffect("Wet", true);
                    }
                    else if (water == HitData.DamageModifier.VeryResistant && !__instance.InLiquidSwimDepth())
                    {
                        ___m_seman.RemoveStatusEffect("Wet", true);
                    }
                    else if (water == HitData.DamageModifier.Resistant)
                    {
                        t.Field("m_time").SetValue(t.Field("m_time").GetValue <float>() + dt);
                        ___m_seman.RemoveStatusEffect("Wet", true);
                        ___m_seman.AddStatusEffect(wet);
                    }
                    else if (water == HitData.DamageModifier.Weak)
                    {
                        t.Field("m_time").SetValue(t.Field("m_time").GetValue <float>() - dt / 3);
                        ___m_seman.RemoveStatusEffect("Wet", true);
                        ___m_seman.AddStatusEffect(wet);
                    }
                    else if (water == HitData.DamageModifier.VeryWeak)
                    {
                        t.Field("m_time").SetValue(t.Field("m_time").GetValue <float>() - dt * 2 / 3);
                        ___m_seman.RemoveStatusEffect("Wet", true);
                        ___m_seman.AddStatusEffect(wet);
                    }
                }
            }
        public static void AddRunicEffect(this SEMan __instance, string name, Player caster, string dsbuffs, bool resetTime)
        {
            // getting the rune data of this runic effect
            var data = RunicPower.GetRuneData(name);

            // if there is none, stop here
            if (data == null)
            {
                return;
            }
            // checking if the target already has this effect
            var currentEffect = __instance.m_statusEffects.Find(se => se.GetRune()?.data.core == data.core);

            // if it does
            if (currentEffect != null)
            {
                var currentRune = currentEffect.GetRune();
                // and its rank is greater than the one we're trying to apply
                if (currentRune.data.rank > data.rank)
                {
                    // stop here. we won't replace the buff with a worse version of it!
                    return;
                }
                else
                {
                    // if the current rune is of equal or lower rank, let's remove it so it can be reapplied
                    __instance.RemoveStatusEffect(currentEffect, true);
                }
            }
            // preparing a new effect
            var rune   = RunicPower.CreateRunicEffect(name, caster, dsbuffs);
            var effect = rune?.statusEffect;

            // and adding it to the player
            if (effect != null)
            {
                SetTempRune(effect, rune);
                __instance.AddStatusEffect(effect);
                UnsetTemp();
            }
        }