public static void RemoveWeaponTrait(this CompBladelinkWeapon compBladelink, WeaponTraitDef traitDef)
        {
            List <WeaponTraitDef> curTraits = compBladelink.TraitsListForReading;

            curTraits.Remove(traitDef);
            typeof(CompBladelinkWeapon).GetField("traits", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(compBladelink, curTraits);
        }
        public static void AddWeaponTrait(this CompBladelinkWeapon compBladelink, WeaponTraitDef traitDef)
        {
            List <WeaponTraitDef> curTraits = compBladelink.TraitsListForReading;

            if (!curTraits.Contains(traitDef))
            {
                curTraits.Add(traitDef);
            }
            typeof(CompBladelinkWeapon).GetField("traits", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(compBladelink, curTraits);
        }
        public static bool CanAddWeaponTrait(this CompBladelinkWeapon compBladelink, WeaponTraitDef traitDef)
        {
            List <WeaponTraitDef> curTraits = compBladelink.TraitsListForReading;

            if (curTraits.NullOrEmpty <WeaponTraitDef>())
            {
                return(true);
            }
            for (int i = 0; i < curTraits.Count; i++)
            {
                if (traitDef.Overlaps(curTraits[i]))
                {
                    return(false);
                }
            }
            return(true);
        }