There’s nothing wrong at all with your multicast function, you just need to replicate the shield variable.
UPROPERTY(EditDefaultsOnly, replicated, Category = "MyVars")
AActorShield* shield;
void AMyProjectCharacter::GetLifetimeReplicatedProps(TArray< FLifetimeProperty > & OutLifetimeProps) const
{
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
DOREPLIFETIME(AMyProjectCharacter, shield);
}