minetest-worldtest/rules.d/020-0.4.3/worldtest_generate.patch

93 lines
3.3 KiB
Diff

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;
+ // <worldtest hack>
+ // This doesn't seem to really work in our case
+ only_from_disk = false;
+ // </worldtest hack>
{
core::map<u16, u8>::Iterator i;
@@ -1306,6 +1310,47 @@ void Server::AsyncRunStep()
}
}
+ // <worldtest hack>
+ // 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<<DTIME<<"Worldtest server: Loaded all blocks."<<std::endl;
+ dstream<<DTIME<<"Worldtest server: Will exit once the Lua part "
+ <<"sets \"worldtest_command\" = \"done\"."<<std::endl;
+ message_triggered = true;
+ g_settings->set("worldtest_command", "loaded");
+ }
+ if(g_settings->exists("worldtest_command") &&
+ g_settings->get("worldtest_command") == "done")
+ m_shutdown_requested = true;
+ }
+ }
+ // </worldtest hack>
+
{
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);
+ // <worldtest hack>
+ // Load or generate blocks near origin
+ dstream<<DTIME<<"Worldtest hack server started."<<std::endl;
+ dstream<<DTIME<<"Will load or generate origin and quit."<<std::endl;
+ server.queueBlockEmerge(v3s16(0,0,0), true);
+ server.queueBlockEmerge(v3s16(0,0,-1), true);
+ server.queueBlockEmerge(v3s16(0,-1,0), true);
+ server.queueBlockEmerge(v3s16(0,-1,-1), true);
+ server.queueBlockEmerge(v3s16(-1,0,0), true);
+ server.queueBlockEmerge(v3s16(-1,0,-1), true);
+ server.queueBlockEmerge(v3s16(-1,-1,0), true);
+ server.queueBlockEmerge(v3s16(-1,-1,-1), true);
+ // </worldtest hack>
+
verbosestream<<"dedicated_server_loop()"<<std::endl;
IntervalLimiter m_profiler_interval;