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();
}
}