diff --git a/src/server.cpp b/src/server.cpp index 893d03b..06cdaad 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -212,6 +212,10 @@ void * EmergeThread::Thread() */ bool only_from_disk = true; + // + // This doesn't seem to really work in our case + only_from_disk = false; + // { core::map::Iterator i; @@ -1306,6 +1310,47 @@ void Server::AsyncRunStep() } } + // + // Quit when blocks near origin have been loaded or generated + { + JMutexAutoLock envlock(m_env_mutex); + // Make sure EmergeThread runs + m_emergethread.trigger(); + // Check area near origin + Map *map = &m_env->getMap(); + if( + map->getBlockNoCreateNoEx(v3s16(0,0,0)) && + map->getBlockNoCreateNoEx(v3s16(0,0,0))->isGenerated() && + map->getBlockNoCreateNoEx(v3s16(0,0,-1)) && + map->getBlockNoCreateNoEx(v3s16(0,0,-1))->isGenerated() && + map->getBlockNoCreateNoEx(v3s16(0,-1,0)) && + map->getBlockNoCreateNoEx(v3s16(0,-1,0))->isGenerated() && + map->getBlockNoCreateNoEx(v3s16(0,-1,-1)) && + map->getBlockNoCreateNoEx(v3s16(0,-1,-1))->isGenerated() && + map->getBlockNoCreateNoEx(v3s16(-1,0,0)) && + map->getBlockNoCreateNoEx(v3s16(-1,0,0))->isGenerated() && + map->getBlockNoCreateNoEx(v3s16(-1,0,-1)) && + map->getBlockNoCreateNoEx(v3s16(-1,0,-1))->isGenerated() && + map->getBlockNoCreateNoEx(v3s16(-1,-1,0)) && + map->getBlockNoCreateNoEx(v3s16(-1,-1,0))->isGenerated() && + map->getBlockNoCreateNoEx(v3s16(-1,-1,-1)) && + map->getBlockNoCreateNoEx(v3s16(-1,-1,-1))->isGenerated() + ){ + static bool message_triggered = false; + if(!message_triggered){ + dstream<set("worldtest_command", "loaded"); + } + if(g_settings->exists("worldtest_command") && + g_settings->get("worldtest_command") == "done") + m_shutdown_requested = true; + } + } + // + { JMutexAutoLock lock(m_env_mutex); // Step environment @@ -1318,6 +1363,7 @@ void Server::AsyncRunStep() if(m_map_timer_and_unload_interval.step(dtime, map_timer_and_unload_dtime)) { JMutexAutoLock lock(m_env_mutex); + // Run Map's timers and unload unused data ScopeProfiler sp(g_profiler, "Server: map timer and unload"); m_env->getMap().timerUpdate(map_timer_and_unload_dtime, @@ -4853,6 +4899,20 @@ void dedicated_server_loop(Server &server, bool &kill) { DSTACK(__FUNCTION_NAME); + // + // Load or generate blocks near origin + dstream< + verbosestream<<"dedicated_server_loop()"<