public virtual void SetPlayerTeam(SkyPlayer player, GameTeam oldTeam, GameTeam team) { if (oldTeam != null) { TeamPlayerDict[oldTeam].Remove(player); } if (team != null) { TeamPlayerDict[team].Add(player); if (team.IsSpectator) { AddSpectator(player); } else { //Respawn if this player is missing if (player.IsGameSpectator) { List <MiNET.Player> gamePlayers = new List <MiNET.Player>(); DoForAllPlayers(gamePlayer => { if (!gamePlayer.IsGameSpectator) { gamePlayers.Add(gamePlayer); } }); //TODO: Convert to scaled down invisible players? //SkyUtil.log( // $"Spawning {player.Username} to ({string.Join(",", gamePlayers.Select(x => x.ToString()).ToArray())})"); player.SpawnToPlayers(gamePlayers.ToArray()); } player.IsGameSpectator = false; } } }