Clients generate flawed objects without force, and the camera angle inherited from the host.

I have a simple character that can throw cubes , that will kill players on hit (or currently it just makes a debug.log)
When the host throws a cube it will work fine, The cubes direction depends on the camera angle.
But when a client throws it, (1) the viewangle will be inherited from the host,(2) the object will spawn very late, and (3) it will not have a force.

First the script on the cube :

using UnityEngine;
using UnityEngine.Networking;

[System.Serializable]
public class StoneBehaviour: NetworkBehaviour  {

[SerializeField]
private Camera Cam;

public Rigidbody rb;

void OnCollisionEnter(Collision col)
{       
    if (col.collider.tag =="Player")
    {           
        CmdPlayerHit(col.collider.name);
    }
    GetComponent<StoneBehaviour>().enabled = false;        
}

[Command]
void CmdPlayerHit(string _Victim)
{
    Debug.Log(_Victim + " was hit");
}
}

And here is the method that does not work correctly:

[Command]
void CmdCreateGeschoss()
{

    //Quaternion 
    ChangedRotationY = Player.transform.rotation;
    ChangedRotationY *= Quaternion.Euler((cam.transform.forward.y * -90 - 10), 0, 0);

    //Vector3
    GeschossSpawn = Player.transform.position;
    GeschossSpawn.y += 2;

    NextGeschoss = (GameObject)Instantiate(Geschoss, GeschossSpawn, ChangedRotationY);
    StoneBehaviour StoneWork = NextGeschoss.GetComponent<StoneBehaviour>();

    Vector3 ThrowVector = new Vector3(StoneWork.transform.forward.x * WurfStaerke, StoneWork.transform.forward.y * WurfStaerke, Player.transform.forward.z * WurfStaerke);

    StoneWork.rb.position = GeschossSpawn;
    StoneWork.rb.AddForce(ThrowVector * Time.fixedDeltaTime, ForceMode.Impulse);

    Destroy(StoneWork, 2.0f);

    NetworkServer.Spawn(NextGeschoss);
            
}

Can someone help me, and tell me what I did wrong?

Ok, just in case someone finds this because hes just as bad in unity as me . It took me 16 hours of learning, trying and reading to finally be able to fix it myself. Solution below.

The problem is probably far to simple for anyone with a little experience in programming, that I simply dont have (right now, but i have 2 weeks aka 14 x 16 hours time)

I tried to create an Object with some values that I generate from a player.
I do that inside a command. The object has to be instanciated and spawned inside a command, because only a Server can do that. Now the server has absolutly nothing to do with the class where im trying to call it if the class is a client. The code works on a server because the server and the client are the same, but for everyone else not.

So the server tries to insanciate an object, and It does not have any values. The compiler does not know this because the method SEEMS to be called in a class where the values are present.

Now that means the solution is simple. I have to set the values I want to transfer inside the client, then call the server and give it values. The server now executes my command with the values I gave it, and not some random values it got from somewhere else (which is why my objects were flawed/behaved strange)

Simply put the stone class is mostly fine ( GetComponent().enabled = false; does not work because there is no update() that can be disbled. )

and the method goes as follows :

[Client]
void ShootMethod()
{

    //Quaternion 
    ChangedRotationY = Player.transform.rotation;
    ChangedRotationY *= Quaternion.Euler((cam.transform.forward.y * -90 - 10), 0, 0); //must be multiplied t be added

    //Vector3
    GeschossSpawn = Player.transform.position;
    GeschossSpawn.y += 2;

    CmdInstantiateGeschoss(GeschossSpawn, ChangedRotationY,  WurfStaerke);

}

[Command]
void CmdInstantiateGeschoss(Vector3 SpawnPoint, Quaternion FinalRotation, int WurfStaerke)
{
    NextGeschoss = (GameObject)Instantiate(Geschoss, SpawnPoint, FinalRotation);
    StoneBehaviour StoneWork = NextGeschoss.GetComponent<StoneBehaviour>();
    
    StoneWork.rb.AddForce(StoneWork.transform.forward * WurfStaerke * Time.fixedDeltaTime, ForceMode.Impulse);
    Destroy(StoneWork, 0.2f);
    NetworkServer.Spawn(NextGeschoss);

}

I doubt someone will read this, but just in case.