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()"<