private void OnMoveAttempt(EntityUid uid, CanEscapeInventoryComponent component, UpdateCanMoveEvent args)
 {
     if (_containerSystem.IsEntityOrParentInContainer(uid))
     {
         args.Cancel();
     }
 }
    private void OnRelayMovement(EntityUid uid, CanEscapeInventoryComponent component, RelayMoveInputEvent args)
    {
        //Prevents the user from creating multiple DoAfters if they're already resisting.
        if (component.IsResisting == true)
        {
            return;
        }

        if (_containerSystem.TryGetContainingContainer(uid, out var container) &&
            (HasComp <SharedStorageComponent>(container.Owner) || HasComp <InventoryComponent>(container.Owner) || HasComp <SharedHandsComponent>(container.Owner)))
        {
            if (_actionBlockerSystem.CanInteract(uid, container.Owner))
            {
                AttemptEscape(uid, container.Owner, component);
            }
        }
    }
    private void AttemptEscape(EntityUid user, EntityUid container, CanEscapeInventoryComponent component)
    {
        component.CancelToken = new();
        var doAfterEventArgs = new DoAfterEventArgs(user, component.ResistTime, component.CancelToken.Token, container)
        {
            BreakOnTargetMove  = false,
            BreakOnUserMove    = false,
            BreakOnDamage      = true,
            BreakOnStun        = true,
            NeedHand           = false,
            UserFinishedEvent  = new EscapeDoAfterComplete(),
            UserCancelledEvent = new EscapeDoAfterCancel(),
        };

        component.IsResisting = true;
        _popupSystem.PopupEntity(Loc.GetString("escape-inventory-component-start-resisting"), user, Filter.Entities(user));
        _popupSystem.PopupEntity(Loc.GetString("escape-inventory-component-start-resisting-target"), container, Filter.Entities(container));
        _doAfterSystem.DoAfter(doAfterEventArgs);
    }
 private void OnEscapeFail(EntityUid uid, CanEscapeInventoryComponent component, EscapeDoAfterCancel ev)
 {
     component.IsResisting = false;
 }
 private void OnEscapeComplete(EntityUid uid, CanEscapeInventoryComponent component, EscapeDoAfterComplete ev)
 {
     //Drops the mob on the tile below the container
     Transform(uid).AttachParentToContainerOrGrid(EntityManager);
     component.IsResisting = false;
 }