static void OnCharacterChanged(MySyncEntity entity, ref CharacterChangedMsg msg, MyNetworkClient sender)
        {
            MyCharacter characterEntity = entity.Entity as MyCharacter;
            MyEntity controlledEntity;
            if (!MyEntities.TryGetEntity(msg.ControlledEntityId, out controlledEntity))
            {
                MySandboxGame.Log.WriteLine("Controlled entity not found");
                Debug.Fail("Controlled entity not found");
            }

            PlayerId id = new PlayerId(msg.ClientSteamId, msg.PlayerSerialId);
            MyPlayer player = Sync.Players.TryGetPlayerById(id);

            ChangePlayerCharacterInternal(player, characterEntity, controlledEntity);
        }
        public void SetPlayerCharacter(MyPlayer player, MyCharacter newCharacter, MyEntity controlledEntity = null)
        {
            Debug.Assert(Sync.IsServer, "SetPlayerCharacter can be only called on the server!");

            if (controlledEntity == null) controlledEntity = newCharacter;

            ChangePlayerCharacterInternal(player, newCharacter, controlledEntity);

            var msg = new CharacterChangedMsg();
            msg.ClientSteamId = player.Id.SteamId;
            msg.PlayerSerialId = player.Id.SerialId;
            msg.CharacterEntityId = newCharacter.EntityId;
            msg.ControlledEntityId = controlledEntity.EntityId;

            Sync.Layer.SendMessageToAll(ref msg);
        }