private void EquipmentUpdate(On.RoR2.EquipmentSlot.orig_Update orig, RoR2.EquipmentSlot self)
 {
     if (self.equipmentIndex == equipmentDef.equipmentIndex)
     {
         var selfDisplay = self.FindActiveEquipmentDisplay();
         var body        = self.characterBody;
         if (selfDisplay && body)
         {
             var bulletTracker = body.GetComponent <JarBulletTracker>();
             var input         = body.inputBank;
             if (input && bulletTracker)
             {
                 //Debug.Log($"Update ChargeTime: {bulletTracker.ChargeTime}");
                 if (bulletTracker.ChargeTime > 0)
                 {
                     selfDisplay.rotation = Quaternion.Slerp(selfDisplay.rotation, RoR2.Util.QuaternionSafeLookRotation(input.aimDirection), 0.15f);
                     orig(self);
                     return;
                 }
             }
             selfDisplay.rotation = Quaternion.Slerp(selfDisplay.rotation, RoR2.Util.QuaternionSafeLookRotation(Vector3.up), 0.15f);
         }
     }
     orig(self);
 }
        protected override bool PerformEquipmentAction(RoR2.EquipmentSlot slot)
        {
            if (!slot.characterBody || !slot.characterBody.teamComponent)
            {
                return(false);
            }
            var body          = slot.characterBody;
            var bodyIdentity  = body.gameObject.GetComponent <NetworkIdentity>();
            var bulletTracker = body.GetComponent <JarBulletTracker>();

            if (!bulletTracker)
            {
                bulletTracker      = body.gameObject.AddComponent <JarBulletTracker>();
                bulletTracker.body = body;
            }

            var equipmentDisplayTransform = slot.FindActiveEquipmentDisplay();

            if (equipmentDisplayTransform)
            {
                bulletTracker.TargetTransform = equipmentDisplayTransform;
            }

            if (bulletTracker.jarBullets.Count > 0 && bulletTracker.ChargeTime <= 0 && bulletTracker.SuckTime <= 0)
            {
                bulletTracker.ChargeTime = 1;
                bulletTracker.RefireTime = 0.2f;
                return(true);
            }
            else if (bulletTracker.jarBullets.Count <= 0 && bulletTracker.SuckTime <= 0)
            {
                bulletTracker.IsSuckingProjectiles = false;
                bulletTracker.SuckTime             = projectileAbsorptionTime;
            }
            return(false);
        }