void OnTriggerEnter(Collider other)
        {
            try
            {
                if (other.CompareTag("enemyCollide") || other.CompareTag("enemyRoot"))
                {
                    if (SpellActions.SeekingArrow_ChangeTargetOnHit)
                    {
                        SpellActions.SetSeekingArrowTarget(other.transform);
                    }

                    var crit      = ModdedPlayer.Stats.RandomCritDamage;
                    var dmgOutput = dmg * crit;

                    ModdedPlayer.instance.OnHit();
                    if (GameSetup.IsMpClient)
                    {
                        var entity = other.GetComponentInParent <BoltEntity>();
                        if (entity != null)
                        {
                            {
                                var hitContext = new COTFEvents.HitOtherParams(dmgOutput, crit != 1, entity, this);
                                COTFEvents.Instance.OnHitSpell.Invoke(hitContext);
                                COTFEvents.Instance.OnHitEnemy.Invoke(hitContext);
                            }
                            var phe = PlayerHitEnemy.Create(GlobalTargets.OnlyServer);
                            phe.Target          = entity;
                            phe.getAttackerType = DamageMath.SILENTattackerTypeMagic;
                            phe.Hit             = DamageMath.GetSendableDamage(dmgOutput);
                            if (crit > 1)
                            {
                                int   myID    = 3000 + ModReferences.Players.IndexOf(LocalPlayer.GameObject);
                                float fireDmg = 1 + ModdedPlayer.Stats.spellFlatDmg / 3;
                                fireDmg *= ModdedPlayer.Stats.TotalMagicDamageMultiplier;
                                fireDmg *= ModdedPlayer.Stats.fireDamage + 1;
                                using (System.IO.MemoryStream answerStream = new System.IO.MemoryStream())
                                {
                                    using (System.IO.BinaryWriter w = new System.IO.BinaryWriter(answerStream))
                                    {
                                        w.Write(27);
                                        w.Write(entity.networkId.PackedValue);
                                        w.Write(fireDmg);
                                        w.Write(15);
                                        w.Write(myID);
                                        w.Close();
                                    }
                                    AsyncHit.SendCommandDelayed(2, answerStream.ToArray(), NetworkManager.Target.OnlyServer);
                                    answerStream.Close();
                                }
                                phe.Burn = true;
                            }
                            phe.Send();
                        }
                    }
                    else                            //is singleplayer or host
                    {
                        if (EnemyManager.enemyByTransform.ContainsKey(other.transform.root))
                        {
                            var progression = EnemyManager.enemyByTransform[other.transform.root];
                            {
                                var hitContext = new COTFEvents.HitOtherParams(dmgOutput, crit != 1, progression, this);
                                COTFEvents.Instance.OnHitSpell.Invoke(hitContext);
                                COTFEvents.Instance.OnHitEnemy.Invoke(hitContext);
                            }
                            progression.HitMagic(dmgOutput);
                            if (crit > 1)
                            {
                                if (ModdedPlayer.Stats.perk_fireDmgIncreaseOnHit)
                                {
                                    //int myID = 3000 + ModReferences.Players.IndexOf(LocalPlayer.GameObject);
                                    float fireDmg = 1 + ModdedPlayer.Stats.spellFlatDmg / 3;
                                    fireDmg *= ModdedPlayer.Stats.TotalMagicDamageMultiplier;
                                    fireDmg *= ModdedPlayer.Stats.fireDamage + 1;
                                    progression.FireDebuff(3000, fireDmg, 14);
                                }
                                progression.HealthScript.Burn();
                            }
                        }
                        else
                        {
                            Debug.LogWarning("Enemy not found");
                        }
                    }
                    if (UnityEngine.Random.value < ModdedPlayer.Stats.projectilePierceChance - pierceCount)
                    {
                        pierceCount++;
                    }
                    else
                    {
                        dieTimestamp = 0;
                    }
                }
            }
            catch (Exception exc)
            {
                Debug.LogWarning(exc.ToString());
            }
        }