ExitContainerOnMoveSystem.cs 1.1 KB

12345678910111213141516171819202122232425262728293031
  1. using Content.Shared.Climbing.Systems;
  2. using Content.Shared.Movement.Events;
  3. using Robust.Shared.Containers;
  4. namespace Content.Shared.Containers;
  5. public sealed class ExitContainerOnMoveSystem : EntitySystem
  6. {
  7. [Dependency] private readonly ClimbSystem _climb = default!;
  8. [Dependency] private readonly SharedContainerSystem _container = default!;
  9. public override void Initialize()
  10. {
  11. base.Initialize();
  12. SubscribeLocalEvent<ExitContainerOnMoveComponent, ContainerRelayMovementEntityEvent>(OnContainerRelay);
  13. }
  14. private void OnContainerRelay(Entity<ExitContainerOnMoveComponent> ent, ref ContainerRelayMovementEntityEvent args)
  15. {
  16. var (_, comp) = ent;
  17. if (!TryComp<ContainerManagerComponent>(ent, out var containerManager))
  18. return;
  19. if (!_container.TryGetContainer(ent, comp.ContainerId, out var container, containerManager) || !container.Contains(args.Entity))
  20. return;
  21. _climb.ForciblySetClimbing(args.Entity, ent);
  22. _container.RemoveEntity(ent, args.Entity, containerManager);
  23. }
  24. }