using Content.Shared.ActionBlocker; using Content.Shared.Clothing.Components; using Content.Shared.Inventory.Events; namespace Content.Shared.Inventory; public sealed class SelfEquipOnlySystem : EntitySystem { [Dependency] private readonly ActionBlockerSystem _actionBlocker = default!; /// public override void Initialize() { SubscribeLocalEvent(OnBeingEquipped); SubscribeLocalEvent(OnBeingUnequipped); } private void OnBeingEquipped(Entity ent, ref BeingEquippedAttemptEvent args) { if (args.Cancelled) return; if (TryComp(ent, out var clothing) && (clothing.Slots & args.SlotFlags) == SlotFlags.NONE) return; if (args.Equipee != args.EquipTarget) args.Cancel(); } private void OnBeingUnequipped(Entity ent, ref BeingUnequippedAttemptEvent args) { if (args.Cancelled) return; if (args.Unequipee == args.UnEquipTarget) return; if (TryComp(ent, out var clothing) && (clothing.Slots & args.SlotFlags) == SlotFlags.NONE) return; if (ent.Comp.UnequipRequireConscious && !_actionBlocker.CanConsciouslyPerformAction(args.UnEquipTarget)) return; args.Cancel(); } }