public override void OnHitByProjectile(NPC npc, Projectile projectile, int damage, float knockback, bool crit)
        {
            if (!Config.Instance.ChangeDamageColor)
            {
                return;
            }

            int recent = -1;

            for (int i = 99; i >= 0; i--)
            {
                CombatText ctToCheck = Main.combatText[i];
                if (ctToCheck.lifeTime == 60 || ctToCheck.lifeTime == 120)
                {
                    if (ctToCheck.alpha == 1f)
                    {
                        if ((ctToCheck.color == CombatText.DamagedHostile || ctToCheck.color == CombatText.DamagedHostileCrit))
                        {
                            recent = i;
                            break;
                        }
                    }
                }
            }
            if (recent == -1)
            {
                return;
            }
            else
            {
                Color             newcolor;
                DamageTypes.Types dmgtype = DamageTypes.GetType(projectile);

                if (Config.Instance.DebugMode)
                {
                    ColoredDamageTypes.Log("HitByProjectile: " + damage + " " + projectile.Name + "/" + projectile.type + ": " + dmgtype.ToString());
                }

                newcolor = DamageTypes.CheckDamageColor(dmgtype, crit);

                //Main.combatText[recent].active = false;
                //Main.combatText[recent].lifeTime = 0;
                //CombatText.NewText(new Rectangle((int)npc.position.X, (int)npc.position.Y, npc.width, npc.height), newcolor, damage, crit, false);
                //NetMessage.SendData
                //ColoredDamageTypes.instance.SendColorPacket(newcolor.R, newcolor.G, newcolor.B, newcolor.A, damage, crit);
                Main.combatText[recent].color = newcolor;
            }
        }
        public override bool HijackGetData(ref byte messageType, ref BinaryReader reader, int playerNumber)
        {
            if (messageType == 28)
            {
                if (Main.netMode == NetmodeID.MultiplayerClient)
                {
                    NPC   npc       = Main.npc[(int)reader.ReadInt16()];                                    //npc being hit
                    int   damage    = ModNet.AllowVanillaClients ? reader.ReadInt16() : reader.ReadInt32(); //damage
                    float knockback = reader.ReadSingle();                                                  // knockback
                    int   hitdir    = (reader.ReadByte() - 1);                                              // hit direction
                    byte  critbyte  = reader.ReadByte();
                    bool  crit      = critbyte == 1;

                    //Main.NewText("Knockback: " + num86 + ", Direction: " + num87 + ", Crit: " + bb+" ?: "+crit);
                    if (damage > 0 && damage == recentdmg_in && knockback == recentkb_in && critbyte == recentcrit_in)
                    {
                        npc.StrikeNPC(damage, knockback, hitdir, crit, false, true);
                        int recent = -1;
                        for (int i = 99; i >= 0; i--)
                        {
                            CombatText ctToCheck = Main.combatText[i];
                            if (ctToCheck.lifeTime == 60 || ctToCheck.lifeTime == 120)
                            {
                                if (ctToCheck.alpha == 1f)
                                {
                                    if ((ctToCheck.color == CombatText.OthersDamagedHostile || ctToCheck.color == CombatText.OthersDamagedHostileCrit))
                                    {
                                        recent = i;
                                        break;
                                    }
                                }
                            }
                        }
                        if (recent > -1)
                        {
                            Main.combatText[recent].color = DamageTypes.CheckDamageColor(recentcolor_in, crit) * 0.4f;
                        }
                        return(true);
                    }
                }
                return(false);
            }
            return(false);
        }
        //public override void UpdateLifeRegen(NPC npc, ref int damage)
        //{

        //}

        public override void OnHitByItem(NPC npc, Player player, Item item, int damage, float knockback, bool crit)
        {
            if (!Config.Instance.ChangeDamageColor)
            {
                return;
            }

            int recent = -1;

            for (int i = 99; i >= 0; i--)
            {
                CombatText ctToCheck = Main.combatText[i];
                if (ctToCheck.lifeTime == 60 || ctToCheck.lifeTime == 120 || (ctToCheck.dot && ctToCheck.lifeTime == 40))
                {
                    if (ctToCheck.alpha == 1f)
                    {
                        if ((ctToCheck.color == CombatText.DamagedHostile || ctToCheck.color == CombatText.DamagedHostileCrit))
                        {
                            recent = i;
                            break;
                        }
                    }
                }
            }
            if (recent == -1)
            {
                return;
            }
            else
            {
                Color             newcolor;
                DamageTypes.Types dmgtype = DamageTypes.GetType(item);

                if (Config.Instance.DebugMode)
                {
                    ColoredDamageTypes.Log("HitByItem: " + damage + item.Name + "/" + item.type + ": " + item.shoot + " " + dmgtype.ToString());
                }

                newcolor = DamageTypes.CheckDamageColor(dmgtype, crit);

                Main.combatText[recent].color = newcolor;
            }
        }