Issues 'Launching' Character in Multiplayer.

I’m stumped on this one, can’t for the life of me figure it out. When my vehicles are killed or if a player ‘bails out’, a new Pilot (character) is spawned and immediatelly possesed by the player. Upon spawn (server side only, ofc), I call ‘Launch Character’ to give them some ejection velocity.

This works absolutely fine for the player on the Server. For whatever reason though, I can’t for the life of me get the **** thing to work for Clients. Surely, the logic is correct?

void ABZGame_Vehicle::ServerEjectPilot_Implementation(bool bBailout)
	const FTransform SpawnTransform = FTransform(FRotator(0.f, GetVehicleMesh()->GetComponentRotation().Yaw, 0.f), FVector(GetVehicleMesh()->GetComponentLocation() + FRotator(GetActorRotation()).RotateVector(PilotEjectLocation)));

	FActorSpawnParameters SpawnParams;
	SpawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AdjustIfPossibleButAlwaysSpawn;
	SpawnParams.Owner = GetController();

	ABZGame_Character* NewPilot = GetWorld()->SpawnActor<ABZGame_Character>(DefaultPilot, SpawnTransform, SpawnParams);
	ASSERTV(NewPilot != nullptr, *FString::Printf(TEXT("Unable To Spawn Pilot for %s"), *GetNameSafe(this)));
	APlayerController* MyPC = Cast<APlayerController>(GetController());
	if (MyPC)

	bHasPilot = false;
	bPilotWantsToExit = false;

	const FVector EjectVelocity = FRotator(GetActorRotation()).RotateVector(bBailout ? PilotBailoutVelocity : PilotHopoutVelocity);
	NewPilot->LaunchCharacter(EjectVelocity, true, true);

This all happens Server-Side, and the player ejects perfectly fine for the Server Player, but NOT for client players (on the Server or otherwise). I want to launch the character on the Server and rely on movement replication to pass that down to the clients.

On the flipside, I’m experiencing a second issue where applying a ‘Force’ to Characters on the Client side is for some reason doubled in size. I have Jetpack item which simply applies force while the Jetpack is firing. On the Server, the force is correct - but on the Client, the character is launched over twice the distance.

Any ideas?

void ABZGame_JetPack::Tick(float DeltaSeconds)

	if (bJetpackFiring && UpdatedCharacter && Role == ROLE_Authority)
		BurnDuration += DeltaSeconds;
		const float MappedCurveTime = FMath::GetMappedRangeValueClamped(FVector2D(0.f, JetpackData.BurnTime), FVector2D(0.f, 1.f), BurnDuration);

		UseAmmo(OrdnanceCost * DeltaSeconds);

		const FVector JetpackForce = ImpartedLaunchDirection * JetpackData.ThrustCurve->GetFloatValue(MappedCurveTime);