Network commands sent from clients not working.

Hi, I’ve hit a road block with some networking code I’m working on. I have an engine I want players to be able to click on to switch on/off. The engine has a network identity and an OnMouseDown event on it. When the host clicks on the engine it turns off/on on the clients, but when the client clicks they are not doing anything. I checked the variable activated and it’s being updated but the visual changes are not being executed.

Engine.cs

[SyncVar]
public bool activated = false;

void OnMouseDown(){
        if (isServer)
        {
            this.activated = !this.activated;
            RpcSwitchPower();
        }
        else
        {
            Player.localPlayer.SendMessage("CmdSwitchPower");
        }
        Debug.Log(activated);
    }
public void SwitchPower()
    {
        GetComponent<AudioSource>().mute = !activated;
        if (this.activated)
        {
            GetComponent<SpriteRenderer>().material.color = new Color(0.2f, 0.5f, 0.4f, 1f);
        }
        else
        {
            GetComponent<SpriteRenderer>().material.color = Color.red;
        }
    }
	//Switch power on clients
[ClientRpc]
	public void RpcSwitchPower(){
        SwitchPower();
}

player.cs

 //Tell server to switch the diesel engine
        [Command]
        void CmdSwitchPower()
        {
            print("Command to SwitchPower");
            GameObject g = GameObject.Find("Engine_diesel");
            g.GetComponent<EngineDieselControl>().activated = !g.GetComponent<EngineDieselControl>().activated;
            g.GetComponent<EngineDieselControl>().RpcSwitchPower();
        }

SendMessage wont work with a command because the function’s name is changed during a post-build code generation step. Call the function directly instead.