//Still Broken as hell
        public void RunChestAnimation(EntityStates.Barrel.Opening self)
        {
            EntityState chestState = self.outer.GetComponent <EntityState>();

            ModelLocator modelLocator = self.outer.GetComponent <ModelLocator>();

            //protected void PlayAnimation(string layerName, string animationStateName, string playbackRateParam, float duration)
            //"Body", "Opening", "Opening.playbackRate", Opening.duration

            //Get Animator of the chest
            Animator modelAnimator = modelLocator.modelTransform.GetComponent <Animator>();

            if (modelAnimator)
            {
                //Play Animation
                int layerIndex = modelAnimator.GetLayerIndex("Body");
                modelAnimator.SetFloat("Opening.playbackRate", 1f);
                modelAnimator.PlayInFixedTime("Opening", layerIndex, 0f);
                modelAnimator.Update(0f);
                float length = modelAnimator.GetCurrentAnimatorStateInfo(layerIndex).length;
                modelAnimator.SetFloat("Opening.playbackRate", length / 1f);
            }

            if (chestState.sfxLocator)
            {
                Util.PlaySound(chestState.sfxLocator.openSound, base.gameObject);
            }
        }
        private void Opening_OnEnter(On.EntityStates.Barrel.Opening.orig_OnEnter orig, EntityStates.Barrel.Opening self)
        {
            GameObject obj  = self.outer.gameObject;
            string     name = obj.name.ToLower();

            if (!name.Contains("chest1") && !name.Contains("chest2") && !name.Contains("goldchest") && !name.Contains("equipmentbarrel") && !name.Contains("isclockbox"))
            {
                orig.Invoke(self);
                return;
            }
        }