EmergeAction EmergeThread::getBlockOrStartGen( v3s16 pos, bool allow_gen, MapBlock **block, BlockMakeData *bmdata) { MutexAutoLock envlock(m_server->m_env_mutex); // 1). Attempt to fetch block from memory *block = m_map->getBlockNoCreateNoEx(pos); if (*block && !(*block)->isDummy() && (*block)->isGenerated()) return EMERGE_FROM_MEMORY; // 2). Attempt to load block from disk *block = m_map->loadBlock(pos); if (*block && (*block)->isGenerated()) return EMERGE_FROM_DISK; // 3). Attempt to start generation if (allow_gen && m_map->initBlockMake(pos, bmdata)) return EMERGE_GENERATED; // All attempts failed; cancel this block emerge return EMERGE_CANCELLED; }