Health not Changing for Host Player

I’m making a game where when two spheres collide, they lose health based on the velocity of the other sphere. The health works fine for the client player, when they get hit they lose health, and the health syncs with the host fine as well. But the health for the host player is always full and even when colliding, doesn’t change on the host or client side. Can someone help me with this? Everything else seems to be working fine up to now. Here is a copy of my code, I included it all even if it didn’t pertain to the issue because I don’t know what you may need to help diagnose the problem:

using UnityEngine;
using System.Collections;
using UnityEngine.Networking;

public class PlayerControl : NetworkBehaviour {

    public float speed;
    public float torque;
    private RectTransform hud;
    public RectTransform enemyHud;
    public RectTransform healthBar;
    public GameObject referenceObject;
    private GameObject reference;
    private Rigidbody rb;
    public GameObject playerCam;
    public const int maxHealth = 100;
    [SyncVar(hook = "OnChangeHealth")]
    public int health = maxHealth;
    public int velocity;
    public Vector3 forwards;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        playerCam = GameObject.Find("Player Camera");
        reference = Instantiate(referenceObject);

        hud = Instantiate(enemyHud, reference.transform);
        healthBar = hud.transform.Find("Enemy Red/Enemy Green").GetComponent<RectTransform>();
    }

    public void SetCamera()
    {
        playerCam = GameObject.Find("Player Camera");
        playerCam.transform.position = new Vector3(0, 3, -5);
        playerCam.transform.rotation = Quaternion.Euler(10, 0, 0);
        playerCam.transform.SetParent(reference.transform);
    }

    void FixedUpdate()
    {

        if (isLocalPlayer)
        {
            float vertical = Input.GetAxis("Vertical");
            float horizontal = Input.GetAxis("Horizontal");

            reference.transform.position = transform.position;
            reference.transform.Rotate(0, horizontal * torque, 0);

            rb.AddForce(reference.transform.forward * vertical * speed);

            velocity = (int)rb.velocity.magnitude;
        }
        else
        {
            reference.transform.position = transform.position;
        }
    }

    void OnCollisionEnter(Collision collision)
    {
        if (!isLocalPlayer)
        {
            return;
        }

        if (collision.gameObject.CompareTag("Player"))
        {
            collision.gameObject.GetComponent<PlayerControl>().Collide(velocity);           

        }
    }
    
    
    public void Collide(int amount)
    {
        health -= amount;

        if (health <= 0)
        {
            health = 0;
            Debug.Log("Dead!");
        }
    }

    
    void OnChangeHealth(int health)
    {
        healthBar.sizeDelta = new Vector2(health, healthBar.sizeDelta.y);
    }
}

Thanks in advance.

using UnityEngine;
using System.Collections;
using UnityEngine.Networking;

public class PlayerControl : NetworkBehaviour
{

    public float speed;
    public float torque;
    private RectTransform hud;
    public RectTransform enemyHud;
    public RectTransform healthBar;
    public GameObject referenceObject;
    private GameObject reference;
    private Rigidbody rb;
    public GameObject playerCam;
    public const int maxHealth = 100;
    [SyncVar(hook = "OnChangeHealth")]
    public int health = maxHealth;
    public int velocity;
    public Vector3 forwards;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        playerCam = GameObject.Find("Player Camera");
        reference = Instantiate(referenceObject);
        if (isLocalPlayer)
        {
            SetCamera();
        }

        hud = Instantiate(enemyHud, reference.transform);
        healthBar = hud.transform.Find("Enemy Red/Enemy Green").GetComponent<RectTransform>();
    }

    public void SetCamera()
    {
        playerCam = GameObject.Find("Player Camera");
        playerCam.transform.position = new Vector3(0, 3, -5);
        playerCam.transform.rotation = Quaternion.Euler(10, 0, 0);
        playerCam.transform.SetParent(reference.transform);
    }

    void Update()
    {
        healthBar.sizeDelta = new Vector2(health, healthBar.sizeDelta.y);
    }

    void FixedUpdate()
    {

        if (isLocalPlayer)
        {
            float vertical = Input.GetAxis("Vertical");
            float horizontal = Input.GetAxis("Horizontal");

            reference.transform.position = transform.position;
            reference.transform.Rotate(0, horizontal * torque, 0);

            rb.AddForce(reference.transform.forward * vertical * speed);

            velocity = (int)rb.velocity.magnitude;
        }
        else
        {
            reference.transform.position = transform.position;
        }
    }

    void OnCollisionEnter(Collision collision)
    {
        if (!isLocalPlayer)
        {
            return;
        }

        if (collision.gameObject.CompareTag("Player"))
        {
            if (!isServer)
            {
                collision.gameObject.GetComponent<PlayerControl>().CmdCollide(velocity);
            } else
            {
                collision.gameObject.GetComponent<PlayerControl>().Collide(velocity);
            }
        }
    }

    [Command]
    public void CmdCollide(int amount)
    {
        health -= amount;
        Debug.LogError("Command - " + health);
    }

    public void Collide(int amount)
    {
        health -= amount;
        Debug.LogError("Not Command - " + health);
    }

    public void OnChangeHealth(int healthInput)
    {
        Debug.LogError("OnChangeHealth");
        healthBar.sizeDelta = new Vector2(healthInput, healthBar.sizeDelta.y);

        if (health <= 0)
        {
            health = 0;
            Debug.Log("Dead!");
        }
    }
}

Here is my code, the issue I’m having is that the health isn’t changing at all on the client side. Even if a collision happens, the command isn’t called from the client. Ironically this is the opposite of the original issue. (sorry it’s a new answer, for some reason I couldn’t submit it as a comment)