1
0

EmptyOnMachineDeconstructSystem.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using Content.Shared.Construction;
  2. using Content.Shared.Containers.ItemSlots;
  3. using JetBrains.Annotations;
  4. using Robust.Shared.Containers;
  5. namespace Content.Server.Containers
  6. {
  7. /// <summary>
  8. /// Implements functionality of EmptyOnMachineDeconstructComponent.
  9. /// </summary>
  10. [UsedImplicitly]
  11. public sealed class EmptyOnMachineDeconstructSystem : EntitySystem
  12. {
  13. [Dependency] private readonly SharedContainerSystem _container = default!;
  14. public override void Initialize()
  15. {
  16. base.Initialize();
  17. SubscribeLocalEvent<EmptyOnMachineDeconstructComponent, MachineDeconstructedEvent>(OnDeconstruct);
  18. SubscribeLocalEvent<ItemSlotsComponent, MachineDeconstructedEvent>(OnSlotsDeconstruct);
  19. }
  20. // really this should be handled by ItemSlotsSystem, but for whatever reason MachineDeconstructedEvent is server-side? So eh.
  21. private void OnSlotsDeconstruct(EntityUid uid, ItemSlotsComponent component, MachineDeconstructedEvent args)
  22. {
  23. foreach (var slot in component.Slots.Values)
  24. {
  25. if (slot.EjectOnDeconstruct && slot.Item != null && slot.ContainerSlot != null)
  26. _container.Remove(slot.Item.Value, slot.ContainerSlot);
  27. }
  28. }
  29. private void OnDeconstruct(EntityUid uid, EmptyOnMachineDeconstructComponent component, MachineDeconstructedEvent ev)
  30. {
  31. if (!EntityManager.TryGetComponent<ContainerManagerComponent>(uid, out var mComp))
  32. return;
  33. var baseCoords = EntityManager.GetComponent<TransformComponent>(uid).Coordinates;
  34. foreach (var v in component.Containers)
  35. {
  36. if (mComp.TryGetContainer(v, out var container))
  37. {
  38. _container.EmptyContainer(container, true, baseCoords);
  39. }
  40. }
  41. }
  42. }
  43. }