Hi Rick
motionX, Y, Z are velocity, i.e. the movement per tick.
The position of the player is controlled from the server, not the client. The client sends packets to the server telling it what the player is doing (CInputPacket). The client position is periodically updated by a packet sent from the server to the client (eg SEntityTeleportPacket or SEntityPacket).
In 1.15.2 the CInputPacket sets moveStrafing and moveForward, which are copied to the motion during livingTick
Some of the methods where motionX, Y, Z are passed in are not actually displacements although they might look like it. They are a displacement per tick. So the tick method just adds the motionX because it has already been converted to the correct units
i.e.
x += deltaX;
where deltaX = motionX * time, however time = 1 (tick), so the code just says deltaX = motionX
i.e.
x += motionX;
-TGG