#nullable enable using Content.Server.GameObjects.Components.GUI; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Shared.GameObjects.Components.Storage; using Content.Shared.GameObjects.EntitySystems.ActionBlocker; using Content.Shared.GameObjects.Verbs; using Content.Shared.Utility; using Robust.Server.GameObjects; using Robust.Shared.Containers; using Robust.Shared.GameObjects; using Robust.Shared.Localization; using Robust.Shared.Physics; namespace Content.Server.GameObjects.Components.Items.Storage { [RegisterComponent] [ComponentReference(typeof(SharedItemComponent))] public class ItemComponent : SharedItemComponent { public override void RemovedFromSlot() { foreach (var component in Owner.GetAllComponents()) { component.Visible = true; } } public override void EquippedToSlot() { foreach (var component in Owner.GetAllComponents()) { component.Visible = false; } } public override bool TryPutInHand(IEntity user) { if (!CanPickup(user)) return false; if (!user.TryGetComponent(out IHandsComponent? hands)) return false; var activeHand = hands.ActiveHand; if (activeHand == null) return false; hands.PutInHand(this, activeHand, false); return true; } [Verb] public sealed class PickUpVerb : Verb { protected override void GetData(IEntity user, ItemComponent component, VerbData data) { if (!ActionBlockerSystem.CanInteract(user) || component.Owner.IsInContainer() || !component.CanPickup(user)) { data.Visibility = VerbVisibility.Invisible; return; } data.Text = Loc.GetString("Pick Up"); } protected override void Activate(IEntity user, ItemComponent component) { if (user.TryGetComponent(out HandsComponent? hands) && !hands.IsHolding(component.Owner)) { hands.PutInHand(component); } } } } }