EmptyContainer.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using Content.Server.Hands.Systems;
  2. using Content.Shared.Construction;
  3. using Content.Shared.Hands.Components;
  4. using JetBrains.Annotations;
  5. using Robust.Server.Containers;
  6. using Robust.Shared.Containers;
  7. namespace Content.Server.Construction.Completions
  8. {
  9. [UsedImplicitly]
  10. [DataDefinition]
  11. public sealed partial class EmptyContainer : IGraphAction
  12. {
  13. [DataField("container")] public string Container { get; private set; } = string.Empty;
  14. /// <summary>
  15. /// Whether or not the user should attempt to pick up the removed entities.
  16. /// </summary>
  17. [DataField("pickup")]
  18. public bool Pickup = false;
  19. public void PerformAction(EntityUid uid, EntityUid? userUid, IEntityManager entityManager)
  20. {
  21. if (!entityManager.TryGetComponent(uid, out ContainerManagerComponent? containerManager) ||
  22. !containerManager.TryGetContainer(Container, out var container)) return;
  23. var containerSys = entityManager.EntitySysManager.GetEntitySystem<ContainerSystem>();
  24. var handSys = entityManager.EntitySysManager.GetEntitySystem<HandsSystem>();
  25. HandsComponent? hands = null;
  26. var pickup = Pickup && entityManager.TryGetComponent(userUid, out hands);
  27. foreach (var ent in containerSys.EmptyContainer(container, true, reparent: !pickup))
  28. {
  29. if (pickup)
  30. handSys.PickupOrDrop(userUid, ent, handsComp: hands);
  31. }
  32. }
  33. }
  34. }