FloatingPawn not moving on server. Replication

I am having a nightmare trying to get my pawn to move on the server and replicate. I have lots of experience with replication and have no idea what is going on.

I usually use the Character Pawn but I want to use the FloatingPawnMovement component because it suits is better for objects moving in space.

Usually the character automatically replicates even when no RPCs or variables are replicated. Usually I just need to make sure replicate movement and replicate is checked and everything works fine.

I have a lot of experience with replication so I am also very familiar with RPCS and replicating variables.

My setup is a c++ Pawn class with the floatingpawnmovement component added using CreateDefaultSubObject in the classes constructor. In my pawn class I have all the inputs set up and they are firing fine.

With the moveforward Axis binded to the MoveForward function. The function fires fine and with no RPCs the pawn moves exactly how intended on the client but does not move on the server like a character does and does not replicate the movement to other clients. (Playing in dedicated server mode)

So I added a GetNetmode() == ENetmode::Dedicated server check in the move forward function and if not server it calls a run on server RPC then runs the MoveForward function on the server. I checked with debugs and the function is definitely firing on the server but it does not move the pawn on the server and of course does not replicate the movement to the client.

I don’t understand how this function could move the pawn as intended when called on client but do absolutely nothing when it is called on the server!! I debugged the axis value and direction being passed to function on the sever and it is definitely giving it the correct variables.

I have the possesion of the pawn set up correctly.
I have the replication checked on the pawn in BP and setting ReplicateComponent on the floatingpawnmovement companet makes no difference.

Construcotr of Pawn class:

bUseControllerRotationPitch = false;
	bUseControllerRotationYaw = false;
	bUseControllerRotationRoll = false;

	MovementComponent = CreateDefaultSubobject<UFloatingPawnMovement>(TEXT("MovementComponent"));
	MovementComponent->MaxSpeed = 25000;
	MovementComponent->Acceleration = 4000;
	MovementComponent->Deceleration = 0;

Declaration of component in Pawn.h:

public:
	// Sets default values for this pawn's properties
	AAirCraft();

	UPROPERTY(EditAnywhere, BlueprintReadOnly)
	class UFloatingPawnMovement* MovementComponent;

MoveForward function and RPC called from InputComponent:

void AAirCraft::MoveForward(float Value)
{
	if (GetNetMode() == ENetMode::NM_DedicatedServer)
	{
		if ((Controller != NULL) && (Value != 0.0f))
		{
			// find out which way is forward
			const FRotator Rotation = Controller->GetControlRotation();
			const FRotator YawRotation(0, Rotation.Yaw, 0);

			// get forward vector
			const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);
			AddMovementInput(Direction, Value * 200);
			
		}
	}
	else
	{
		ServerMoveForward(Value);
	}
}

bool AAirCraft::ServerMoveForward_Validate(float Value)
{
	return true;
}

void AAirCraft::ServerMoveForward_Implementation(float Value)
{
	MoveForward(Value);
}

Please help me. This is making no sense!!