using Content.Shared.Damage; using Content.Shared.Electrocution; using Content.Shared.Explosion; using Content.Shared.Movement.Systems; using Content.Shared.Slippery; using Content.Shared.Strip.Components; namespace Content.Shared.Inventory; public partial class InventorySystem { public void InitializeRelay() { SubscribeLocalEvent(RelayInventoryEvent); SubscribeLocalEvent(RelayInventoryEvent); SubscribeLocalEvent(RelayInventoryEvent); SubscribeLocalEvent(RelayInventoryEvent); SubscribeLocalEvent(RelayInventoryEvent); SubscribeLocalEvent(RelayInventoryEvent); } protected void RelayInventoryEvent(EntityUid uid, InventoryComponent component, T args) where T : EntityEventArgs, IInventoryRelayEvent { var containerEnumerator = new ContainerSlotEnumerator(uid, component.TemplateId, _prototypeManager, this, args.TargetSlots); while(containerEnumerator.MoveNext(out var container)) { if(!container.ContainedEntity.HasValue) continue; RaiseLocalEvent(container.ContainedEntity.Value, args, false); } } } /// /// Events that should be relayed to inventory slots should implement this interface. /// public interface IInventoryRelayEvent { /// /// What inventory slots should this event be relayed to, if any? /// /// /// In general you may want to exclude , given that those items are not truly /// "equipped" by the user. /// public SlotFlags TargetSlots { get; } }