Normally I don't use Thread.Sleep, as I hate it too. But I didn't know how to solve it, as I needed to wait for the movement to be completed.

You mean putting the movement stuff into an own async Task where I can do a Thread.Sleep without interrupting the main thread? That could work for me if I return the Task instance, where I can do a Wait() in my code.

The short wait time is needed, because otherwise the minecraft server detects a too fast movement of the player and you get kicked.