private void OnEmagged(EntityUid uid, StasisBedComponent component, GotEmaggedEvent args)
 {
     // Repeatable
     // Reset any metabolisms first so they receive the multiplier correctly
     UpdateMetabolisms(uid, component, false);
     component.Multiplier = 1 / component.Multiplier;
     UpdateMetabolisms(uid, component, true);
     args.Handled = true;
 }
        private void UpdateMetabolisms(EntityUid uid, StasisBedComponent component, bool shouldApply)
        {
            if (!TryComp <StrapComponent>(uid, out var strap) || strap.BuckledEntities.Count == 0)
            {
                return;
            }

            foreach (var buckledEntity in strap.BuckledEntities)
            {
                var metabolicEvent = new ApplyMetabolicMultiplierEvent()
                {
                    Uid = buckledEntity, Multiplier = component.Multiplier, Apply = shouldApply
                };
                RaiseLocalEvent(buckledEntity, metabolicEvent, false);
            }
        }
        private void OnBuckleChange(EntityUid uid, StasisBedComponent component, BuckleChangeEvent args)
        {
            // In testing this also received an unbuckle event when the bed is destroyed
            // So don't worry about that
            if (!TryComp <SharedBodyComponent>(args.BuckledEntity, out var body))
            {
                return;
            }

            if (!this.IsPowered(uid, EntityManager))
            {
                return;
            }

            var metabolicEvent = new ApplyMetabolicMultiplierEvent()
            {
                Uid = args.BuckledEntity, Multiplier = component.Multiplier, Apply = args.Buckling
            };

            RaiseLocalEvent(args.BuckledEntity, metabolicEvent, false);
        }
 private void OnPowerChanged(EntityUid uid, StasisBedComponent component, PowerChangedEvent args)
 {
     UpdateAppearance(uid, args.Powered);
     UpdateMetabolisms(uid, component, args.Powered);
 }