Question on how to add a double jump and eventually a wall dodge

In 4.2, we have added some new functionality to help in situations such as this.

You have already mentioned overriding CanJump() - this is key to multiple ‘double’ jumps (simply returning true from this results in being able to jump forever in mid-air). Its overridable in Blueprint as well as C++, although in C++ the syntax is slightly more obtuse as you need to override CanJumpInternal_Implementation(). In 4.1 and previous this was ‘prettier’ in C++ as all you needed to do was override CanJump().

Another useful new feature you might find is the OnJumped() event/function that you can now hook into. This gets fired when we do the transition into ‘jumping’ movement mode, it might be handy to increment a counter in that event to let you check (in CanJump()) whether any more aerial jumps are allowed.

Lastly, hold-to-jump-higher functionality was added too - you can set JumpMaxHoldTime to a non-zero value, then hook a call to Jump() into an input event ‘pressed’ & a call to StopJumping() to an input event ‘released’ to get a basic jump where holding down a key will jump you higher the longer you hold it.

As Rama mentions above, you can apply forces directly to get a ‘jump’, but the preferred way of applying Jump forces is just to call Jump() - this will apply the pre-set jump vertical velocity and correctly transition the movement mode to ‘Jumping’.