MoveContainer.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334
  1. using System.Linq;
  2. using Content.Shared.Construction;
  3. using JetBrains.Annotations;
  4. using Robust.Server.Containers;
  5. using Robust.Shared.Containers;
  6. namespace Content.Server.Construction.Completions
  7. {
  8. [UsedImplicitly]
  9. [DataDefinition]
  10. public sealed partial class MoveContainer : IGraphAction
  11. {
  12. [DataField("from")] public string? FromContainer { get; private set; }
  13. [DataField("to")] public string? ToContainer { get; private set; }
  14. public void PerformAction(EntityUid uid, EntityUid? userUid, IEntityManager entityManager)
  15. {
  16. if (string.IsNullOrEmpty(FromContainer) || string.IsNullOrEmpty(ToContainer))
  17. return;
  18. var containerSystem = entityManager.EntitySysManager.GetEntitySystem<ContainerSystem>();
  19. var containerManager = entityManager.EnsureComponent<ContainerManagerComponent>(uid);
  20. var from = containerSystem.EnsureContainer<Container>(uid, FromContainer, containerManager);
  21. var to = containerSystem.EnsureContainer<Container>(uid, ToContainer, containerManager);
  22. foreach (var contained in from.ContainedEntities.ToArray())
  23. {
  24. if (containerSystem.Remove(contained, from))
  25. containerSystem.Insert(contained, to);
  26. }
  27. }
  28. }
  29. }