public static void DisconnectClient(ClientWrapper client, string reason = null) { if (client != null) { if (client.Disconnected) { return; } if (client.Player != null) { ConsoleFunctions.WriteInfoLine(client.Player.Username + " disconnected" + (reason == null ? "." : " (Reason: {0})."), reason); client.Player.SavePlayer(); client.Player.Level.RemovePlayer(client.Player.EntityId); client.Player.Level.BroadcastPlayerRemoval(client); } client.ThreadPool.KillAllThreads(); client.TcpClient.Close(); ClientManager.RemoveClient(client); client.Disconnected = true; } else { ConsoleFunctions.WriteFatalErrorLine("Cannot disconnect a client from the server! (Save/Restart/Panic)"); } }