]> git.lizzy.rs Git - minetest.git/blobdiff - src/server.cpp
Fix crash when no world is selected and configure button is pressed.
[minetest.git] / src / server.cpp
index 22c828bc2b5112d3d0ce9cba0bfd762d1113fee5..d227474aa898a284acaa147f7a2f99155fa52501 100644 (file)
@@ -172,12 +172,8 @@ void * EmergeThread::Thread()
 
        ServerMap &map = ((ServerMap&)m_server->m_env->getMap());
        EmergeManager *emerge = m_server->m_emerge;
+       Mapgen *mapgen = emerge->getMapgen();
 
-       Mapgen *mapgen;
-       if (g_settings->getS16("use_mapgen_version") == 7)   ////////this is okay for now, fix later
-               mapgen = new MapgenV7( m_server->m_emerge->biomedef,/*mapgenid*/ 0, map.getSeed());
-       else
-               mapgen = new MapgenV6(0, map.getSeed());
        /*
                Get block info from queue, emerge them and send them
                to clients.
@@ -800,6 +796,7 @@ void RemoteClient::GetNextBlocks(Server *server, float dtime,
                                } else {
                                        if(nearest_emergefull_d == -1)
                                                nearest_emergefull_d = d;
+                                       goto queue_full_break;
                                }
 
                                // get next one.
@@ -948,6 +945,7 @@ Server::Server(
        m_rollback_sink_enabled(true),
        m_enable_rollback_recording(false),
        m_emerge(NULL),
+       m_biomedef(NULL),
        m_lua(NULL),
        m_itemdef(createItemDefManager()),
        m_nodedef(createNodeDefManager()),
@@ -987,8 +985,8 @@ Server::Server(
        infostream<<"- config: "<<m_path_config<<std::endl;
        infostream<<"- game:   "<<m_gamespec.path<<std::endl;
 
-       // Create emerge manager
-       m_emerge = new EmergeManager(this);
+       // Create biome definition manager
+       m_biomedef = new BiomeDefManager(this);
 
        // Create rollback manager
        std::string rollback_path = m_path_world+DIR_DELIM+"rollback.txt";
@@ -1097,18 +1095,23 @@ Server::Server(
        m_nodedef->updateAliases(m_itemdef);
 
        // Add default biomes after nodedef had its aliases added
-       m_emerge->biomedef->addDefaultBiomes();
+       m_biomedef->addDefaultBiomes();
 
        // Initialize Environment
+       ServerMap *servermap = new ServerMap(path_world, this);
+       m_env = new ServerEnvironment(servermap, m_lua, this, this);
+
+       // Create emerge manager
+       m_emerge = new EmergeManager(this, m_biomedef, servermap->getMapgenParams());
 
-       m_env = new ServerEnvironment(new ServerMap(path_world, this, m_emerge), m_lua,
-                       this, this);
+       // Give map pointer to the emerge manager
+       servermap->setEmerge(m_emerge);
 
        // Give environment reference to scripting api
        scriptapi_add_environment(m_lua, m_env);
 
        // Register us to receive map edit events
-       m_env->getMap().addEventReceiver(this);
+       servermap->addEventReceiver(this);
 
        // If file exists, load environment metadata
        if(fs::PathExists(m_path_world+DIR_DELIM+"env_meta.txt"))
@@ -4851,7 +4854,7 @@ v3f findSpawnPos(ServerMap &map)
 #endif
 
 #if 1
-       s16 water_level = map.m_emerge->water_level; //g_settings->getS16("default_water_level");
+       s16 water_level = map.m_mgparams->water_level;
 
        // Try to find a good place a few times
        for(s32 i=0; i<1000; i++)