SpawnPrototypeAtContainer.cs 1.2 KB

12345678910111213141516171819202122232425262728293031
  1. using Content.Shared.Construction;
  2. using JetBrains.Annotations;
  3. using Robust.Server.Containers;
  4. using Robust.Shared.Containers;
  5. namespace Content.Server.Construction.Completions
  6. {
  7. [UsedImplicitly]
  8. [DataDefinition]
  9. public sealed partial class SpawnPrototypeAtContainer : IGraphAction
  10. {
  11. [DataField("prototype")] public string Prototype { get; private set; } = string.Empty;
  12. [DataField("container")] public string Container { get; private set; } = string.Empty;
  13. [DataField("amount")] public int Amount { get; private set; } = 1;
  14. public void PerformAction(EntityUid uid, EntityUid? userUid, IEntityManager entityManager)
  15. {
  16. if (string.IsNullOrEmpty(Container) || string.IsNullOrEmpty(Prototype))
  17. return;
  18. var containerSystem = entityManager.EntitySysManager.GetEntitySystem<ContainerSystem>();
  19. var container = containerSystem.EnsureContainer<Container>(uid, Container);
  20. var coordinates = entityManager.GetComponent<TransformComponent>(uid).Coordinates;
  21. for (var i = 0; i < Amount; i++)
  22. {
  23. containerSystem.Insert(entityManager.SpawnEntity(Prototype, coordinates), container);
  24. }
  25. }
  26. }
  27. }