Enum variable not Updating when calling Server Function

Hoping someone can shed some light on the issue I’ve been having lately. Thank you in advance to anyone who responds.

Let me explain the context around the issue

I have a C++ with a mix of blueprint RTS prototype and I’ve been converting the project so far to work with multiplayer. One of the tasks of this conversion led me to make the function that spawns new units to be called on the server instead of locally. Ever since I’ve done this my placement code no longer runs which I have traced to be caused by the PlayerState Enum being changed to Placing, like it should be, in my CreateUnit function, but then when tick is called PlayerState miraculously changes back to Default. This problem only happens on the Client whereas the Server instance still works fine.

Here is my code, most of it is logs and I’ve trimmed irrelevant code out of the functions you see

// Called when U is pressed
void ARtsPlayerController::Server_CreateUnit_Implementation() 
{
     if(PlayerState == EPlayerState::Menu) return;

     AActor* NewUnit = GetWorld()->SpawnActor<ARTSPrototypeCharacter>(UnitClass);
     if(NewUnit)
     {
          Cast<ARTSPrototypeCharacter>(NewUnit)->SetOwnerUserName(UserName);
          PlayerPawn->MyUnits.Add(NewUnit);
          FString UnitName = GetDebugName(NewUnit);
          UE_LOG(LogTemp, Warning, TEXT("Unit Buffer in CreateUnit: %s"), *UnitName);
          PrepareUnit(NewUnit);
     }
}

// Made this function incase changing PlayerState Enum in server function was the issue
void ARtsPlayerController::PrepareUnit(AActor* NewUnit) 
{
     PlacementBuffer = NewUnit;
     if(NewUnit != nullptr && Cast<ARTSPrototypeCharacter>(NewUnit) && PlacementBuffer == NewUnit)
     {
          UE_LOG(LogTemp, Warning, TEXT("New Unit is good"));
     }
     else
     {
          UE_LOG(LogTemp, Warning, TEXT("New Unit is bad"));
     }
     GEngine->AddOnScreenDebugMessage(0, 2, FColor::Red, TEXT("PrepareUnit Called"));
     // Makes Tick call PositionPlacement()
     ChangePlayerState(EPlayerState::Placing);
     const UEnum* EnumPtr = FindObject<UEnum>(ANY_PACKAGE, TEXT("EPlayerState"), true);
     GEngine->AddOnScreenDebugMessage(0, 2, FColor::Red, *EnumPtr->GetDisplayNameText((uint8)PlayerState).ToString()); // Returns Placing
}

void ARtsPlayerController::PlayerTick(float DeltaTime) 
{
     Super::PlayerTick(DeltaTime);

     // Return Enum Value
     const UEnum* EnumPtr = FindObject<UEnum>(ANY_PACKAGE, TEXT("EPlayerState"), true);
     FString EnumName = EnumPtr->GetDisplayNameText((uint8)PlayerState).ToString(); 
    
     UE_LOG(LogTemp, Warning, TEXT("%s"), *EnumName);  // Returns Default regardless of if PrepareUnit calls ChangePlayerState
     // GEngine->AddOnScreenDebugMessage(0, 2, FColor::Red, *EnumPtr->GetDisplayNameText((uint8)PlayerState).ToString());

     if(PlayerState != EPlayerState::Default)
     {
          // Update building location
          PositionPlacement();
     }
}

// The PlayerState is only ever changed with this function
void ARtsPlayerController::ChangePlayerState(EPlayerState NewState) 
{
     PlayerState = NewState;
     const UEnum* EnumPtr = FindObject<UEnum>(ANY_PACKAGE, TEXT("EPlayerState"), true);
     FString Message = FString("Changed State to: ").Append(*EnumPtr->GetDisplayNameText((uint8)PlayerState).ToString());
     GEngine->AddOnScreenDebugMessage(2, 2, FColor::Red, Message);
     FString EnumName = EnumPtr->GetDisplayNameText((uint8)PlayerState).ToString();
     UE_LOG(LogTemp, Warning, TEXT("Changed State to: %s"), *EnumName);
}

Game Logs for pressing U and calling CreateUnit

LogTemp: Warning: Default
LogTemp: Warning: Default
LogTemp: Warning: Default
LogTemp: Warning: Unit Buffer in CreateUnit: TopDownCharacter_C_0
LogTemp: Warning: New Unit is good
LogTemp: Warning: Changed State to: Placing // Note how ChangePlayerState is called but tick does not change
LogTemp: Warning: Default
LogTemp: Warning: Default
LogTemp: Warning: Default
LogTemp: Warning: Default
LogTemp: Warning: Default

Compared to Game Logs when Create Building is called (not called on server and works as intended)

LogTemp: Warning: Default
LogTemp: Warning: Default
LogTemp: Warning: Default
LogActor: Warning: BP_UnitBuilding_C/Game/TopDownCPP/Maps/UEDPIE_1_TopDownExampleMap.TopDownExampleMap:PersistentLevel.BP_UnitBuilding_C_0 has natively added scene component(s), but none of them were set as the actor's RootComponent - picking one arbitrarily
LogTemp: Warning: Changed State to: Placing
LogTemp: Warning: Placing
LogTemp: Warning: Placing
LogTemp: Warning: Placing

My question took so long to be approved by a mod that it was answered already on the forums. I just had to make the change state function run on the server and replicate my PlayerState variable.