How do I synchronise ALL variables when spawning a network object?

So, I’ve been making a trading card game over the past two months and decided to try to make it support LAN multiplayer (as I assumed it’d be easier than coding an AI) but the main thing halting my progress is being able to easily synchronise variables from host to client.

For example, on the client side I have the player spawn in a deck object like this

void Start () {
if (isLocalPlayer) {
CmdDeckSpawner (“P”, myPlayer, “Deck”, this.gameObject);
}
}

[Command]
public void CmdDeckSpawner (string pHolder, int playerNumber, string deckEnd, GameObject orig){

	myDeck = Instantiate (Resources.Load (deckLocation + deckToSpawn, typeof(GameObject))) as GameObject;
	myDeck.transform.SetParent (orig.transform);
	myDeck.name = "P" + myPlayer + "Deck";
	myDeckScript = myDeck.GetComponent (typeof(deckScript)) as deckScript;
	myDeckScript.myPlayer = playerNumber;
	myDeckScript.myPlayerNetworkScript = this;
	print ("Oh hi, P" + myPlayer);
		NetworkServer.SpawnWithClientAuthority (myDeck, connectionToClient);
}

But my problem here is that while I set all of these variables in the process of spawning the deck, they ONLY apply on the host’s side. I understand that it’s because a Command runs on the host’s end, but what I don’t get is that while the host’s version has the object named “P2Deck” and its parent is set to player 2’s transform, the client’s version of it is named the default “Base Deck (Clone)” and it has no parent. I know I can get most variables to remain synchronised just by making them [SyncVar] but I can’t do that for the name and the parent, or more complex variables like GameObjects and such.

The way I’ve made my game means that I don’t actually need anything to be different on either client’s end. I just want everything to be automatically synchronised if possible. There are only a few things I’d need to keep seperate.

Can anyone help?