//
-// TODO(hmmmm): Move this to ServerMap
-v3s16 EmergeManager::getContainingChunk(v3s16 blockpos)
-{
- return getContainingChunk(blockpos, mgparams->chunksize);
-}
-
// TODO(hmmmm): Move this to ServerMap
v3s16 EmergeManager::getContainingChunk(v3s16 blockpos, s16 chunksize)
{
}
-int EmergeManager::getGroundLevelAtPoint(v2s16 p)
-{
- if (m_mapgens.empty() || !m_mapgens[0]) {
- errorstream << "EmergeManager: getGroundLevelAtPoint() called"
- " before mapgen init" << std::endl;
- return 0;
- }
-
- return m_mapgens[0]->getGroundLevelAtPoint(p);
-}
-
// TODO(hmmmm): Move this to ServerMap
bool EmergeManager::isBlockUnderground(v3s16 blockpos)
{
m_server->getScriptIface()->environment_OnGenerated(
minp, maxp, m_mapgen->blockseed);
} catch (LuaError &e) {
- m_server->setAsyncFatalError("Lua: finishGen" + std::string(e.what()));
+ m_server->setAsyncFatalError(e);
}
+ EMERGE_DBG_OUT("ended up with: " << analyze_block(block));
+
/*
- Clear generate notifier events
+ Clear mapgen state
*/
+ assert(!m_mapgen->generating);
m_mapgen->gennotify.clearEvents();
-
- EMERGE_DBG_OUT("ended up with: " << analyze_block(block));
+ m_mapgen->vm = nullptr;
/*
Activate the block
BEGIN_DEBUG_EXCEPTION_HANDLER
v3s16 pos;
+ std::map<v3s16, MapBlock *> modified_blocks;
- m_map = (ServerMap *)&(m_server->m_env->getMap());
+ m_map = &m_server->m_env->getServerMap();
m_emerge = m_server->m_emerge;
m_mapgen = m_emerge->m_mapgens[id];
enable_mapgen_debug_info = m_emerge->enable_mapgen_debug_info;
try {
while (!stopRequested()) {
- std::map<v3s16, MapBlock *> modified_blocks;
BlockEmergeData bedata;
BlockMakeData bmdata;
EmergeAction action;
- MapBlock *block;
+ MapBlock *block = nullptr;
if (!popBlockEmerge(&pos, &bedata)) {
m_queue_event.wait();
}
block = finishGen(pos, &bmdata, &modified_blocks);
+ if (!block)
+ action = EMERGE_ERRORED;
}
runCompletionCallbacks(pos, action, bedata.callbacks);
if (!modified_blocks.empty())
m_server->SetBlocksNotSent(modified_blocks);
+ modified_blocks.clear();
}
} catch (VersionMismatchException &e) {
std::ostringstream err;
m_server->setAsyncFatalError(err.str());
}
+ cancelPendingItems();
+
END_DEBUG_EXCEPTION_HANDLER
return NULL;
}