static void OnRespawnRequest(ref RespawnMsg msg, MyNetworkClient sender)
        {
            Debug.Assert(Sync.IsServer, "This method can only be called on the server!");
            Debug.Assert(Sync.Players.RespawnComponent != null, "The respawn component is not set! Cannot handle respawn request!");
            if (Sync.Players.RespawnComponent == null)
            {
                return;
            }

            PlayerId playerId = new PlayerId(sender.SteamUserId, msg.PlayerSerialId);

            bool respawnSuccessful = Sync.Players.RespawnComponent.HandleRespawnRequest(
                msg.JoinGame,
                msg.NewIdentity,
                msg.RespawnEntityId,
                msg.RespawnShipId,
                playerId,
                msg.SpawnPosition,
                msg.BotDefinitionId
            );

            if (respawnSuccessful)
            {
                MyIdentity identity = Sync.Players.TryGetPlayerIdentity(playerId);
                Debug.Assert(identity != null, "Could not find identity of respawning player!");
                if (identity != null && !identity.FirstSpawnDone)
                {
                    var identitySpawnedMsg = new IdentityFirstSpawnMsg() { IdentityId = identity.IdentityId };
                    MySession.Static.SyncLayer.SendMessageToAll(ref identitySpawnedMsg, MyTransportMessageEnum.Success);
                    identity.PerformFirstSpawn();
                }
            }
            else
            {
                MySession.Static.SyncLayer.SendMessage(ref msg, sender.SteamUserId, MyTransportMessageEnum.Failure);
            }
        }
        static void OnIdentityFirstSpawn(ref IdentityFirstSpawnMsg msg, MyNetworkClient sender)
        {
            var identity = Sync.Players.TryGetIdentity(msg.IdentityId);
            Debug.Assert(identity != null, "Server told me identity was spawned the first time, but I cannot find it!");
            if (identity == null) return;

            identity.PerformFirstSpawn();
        }