void ChangeWorld(string worldFile, GamemodeType?newGamemode = null)
        {
            // Disable this in the case of a forced world change
            // while the count down is going.
            gameRestarting = false;

            // Reset all the scores
            ResetPlayerScores();

            // Disable client downloading of worlds temporarily
            processNewConnections = false;
            if (World.Terrain != null)
            {
                World.Terrain.OnModified -= Terrain_OnModified;
            }

            // Stop the gamemode
            currentGamemode.Stop();

            // Notify each client we are changing worlds
            channel.FireEventForAllConnections("Client_UnloadWorld");

            // Attempt to load the world
            if (World.LoadFromFile(worldFile))
            {
                // Re-enable client world downloading
                World.Terrain.OnModified += Terrain_OnModified;
                processNewConnections     = true;

                // Start the gamemode
                if (newGamemode.HasValue)
                {
                    SwitchGamemode(newGamemode.Value);
                }
                else
                {
                    currentGamemode.Start();
                }

                channel.FireEventForAllConnections("Client_SwitchGamemode", (byte)currentGamemode.Type);

                // Initiate a download handshake with each client
                foreach (NetConnection conn in server.Connections.Values)
                {
                    if (!handshakeComponent.Initiate(conn))
                    {
                        conn.Disconnect("Failed to initiate handshake!");
                    }
                }
            }
        }
        void SwitchGamemode(GamemodeType to)
        {
            if (currentGamemode != null)
            {
                currentGamemode.Stop();
            }

            currentGamemode = null;

            NetworkedGamemode gamemode;

            if (gamemodes.TryGetValue(to, out gamemode))
            {
                currentGamemode = gamemode;
                currentGamemode.Start();

                channel.FireEventForAllConnections("Client_SwitchGamemode", (byte)to);
            }
            else
            {
                DashCMD.WriteError("[MatchScreen] Gamemode type '{0}' is not defined!", to);
            }
        }