Luanti 5.16.0-dev
Loading...
Searching...
No Matches
ServerMap Class Reference

#include <servermap.h>

Inheritance diagram for ServerMap:
Collaboration diagram for ServerMap:

Public Member Functions

 ServerMap (const std::string &savedir, IGameDef *gamedef, EmergeManager *emerge, MetricsBackend *mb)
 ~ServerMap ()
MapSectorcreateSector (v2s16 p)
bool blockpos_over_mapgen_limit (v3s16 p)
bool initBlockMake (v3s16 blockpos, BlockMakeData *data)
 copy data from map to prepare for mapgen
void finishBlockMake (BlockMakeData *data, std::map< v3s16, MapBlock * > *changed_blocks, ServerEnvironment *env)
 write data back to map after mapgen
void cancelBlockMake (BlockMakeData *data)
MapBlockcreateBlock (v3s16 p)
MapBlockemergeBlock (v3s16 p, bool create_blank=true) override
MapBlockgetBlockOrEmerge (v3s16 p3d, bool generate)
bool isBlockInQueue (v3s16 pos)
void addNodeAndUpdate (v3s16 p, MapNode n, std::map< v3s16, MapBlock * > &modified_blocks, bool remove_metadata) override
void beginSave () override
void endSave () override
void save (ModifiedState save_level) override
void listAllLoadableBlocks (std::vector< v3s16 > &dst)
void listAllLoadedBlocks (std::vector< v3s16 > &dst)
MapgenParamsgetMapgenParams ()
bool saveBlock (MapBlock *block) override
MapBlockloadBlock (v3s16 p)
MapBlockloadBlock (const std::string &blob, v3s16 p, bool save_after_load=false)
 Load a block that was already read from disk.
bool deleteBlock (v3s16 blockpos) override
void deleteDetachedBlocks ()
void step ()
void updateVManip (v3s16 pos)
void PrintInfo (std::ostream &out) override
bool isSavingEnabled ()
u64 getSeed ()
bool repairBlockLight (v3s16 blockpos, std::map< v3s16, MapBlock * > *modified_blocks)
void transformLiquids (std::map< v3s16, MapBlock * > &modified_blocks, ServerEnvironment *env)
void transformLiquidsLocal (std::map< v3s16, MapBlock * > &modified_blocks, UniqueQueue< v3s16 > &liquid_queue, ServerEnvironment *env, u32 liquid_loop_max)
void transforming_liquid_add (v3s16 p)
Public Member Functions inherited from Map
 Map (IGameDef *gamedef)
virtual ~Map ()
 DISABLE_CLASS_COPY (Map)
void addEventReceiver (MapEventReceiver *event_receiver)
void removeEventReceiver (MapEventReceiver *event_receiver)
void dispatchEvent (const MapEditEvent &event)
MapSectorgetSectorNoGenerateNoLock (v2s16 p2d)
MapSectorgetSectorNoGenerate (v2s16 p2d)
virtual MapSectoremergeSector (v2s16 p)
MapBlockgetBlockNoCreate (v3s16 p)
MapBlockgetBlockNoCreateNoEx (v3s16 p)
const NodeDefManagergetNodeDefManager ()
bool isValidPosition (v3s16 p)
void setNode (v3s16 p, MapNode n)
MapNode getNode (v3s16 p, bool *is_valid_position=NULL)
void removeNodeAndUpdate (v3s16 p, std::map< v3s16, MapBlock * > &modified_blocks)
bool addNodeWithEvent (v3s16 p, MapNode n, bool remove_metadata=true)
bool removeNodeWithEvent (v3s16 p)
virtual bool maySaveBlocks ()
void timerUpdate (float dtime, float unload_timeout, s32 max_loaded_blocks, std::vector< v3s16 > *unloaded_blocks=NULL)
void unloadUnreferencedBlocks (std::vector< v3s16 > *unloaded_blocks=NULL)
void deleteSectors (const std::vector< v2s16 > &list)
std::vector< v3s16findNodesWithMetadata (v3s16 p1, v3s16 p2)
NodeMetadatagetNodeMetadata (v3s16 p)
bool setNodeMetadata (v3s16 p, NodeMetadata *meta)
 Sets metadata for a node.
void removeNodeMetadata (v3s16 p)
NodeTimer getNodeTimer (v3s16 p)
void setNodeTimer (const NodeTimer &t)
void removeNodeTimer (v3s16 p)
template<typename F>
void forEachNodeInArea (v3s16 minp, v3s16 maxp, F func)
bool isBlockOccluded (MapBlock *block, v3s16 cam_pos_nodes)
bool isBlockOccluded (v3s16 pos_relative, v3s16 cam_pos_nodes, bool simple_check=false)

Static Public Member Functions

static std::vector< std::string > getDatabaseBackends ()
static MapDatabasecreateDatabase (const std::string &name, const std::string &savedir, Settings &conf)
static bool saveBlock (MapBlock *block, MapDatabase *db, int compression_level=-1)
static void deSerializeBlock (MapBlock *block, std::istream &is)

Public Attributes

MapSettingsManager settings_mgr

Protected Member Functions

void reportMetrics (u64 save_time_us, u32 saved_blocks, u32 all_blocks) override
Protected Member Functions inherited from Map
bool determineAdditionalOcclusionCheck (v3s16 pos_camera, const core::aabbox3d< s16 > &block_bounds, v3s16 &to_check)
bool isOccluded (v3s16 pos_camera, v3s16 pos_target, float step, float stepfac, float start_offset, float end_offset, u32 needed_count)

Private Attributes

EmergeManagerm_emerge
std::string m_savedir
bool m_map_saving_enabled
int m_map_compression_level
std::set< v3s16m_chunks_in_progress
std::vector< std::unique_ptr< MapBlock > > m_detached_blocks
UniqueQueue< v3s16m_transforming_liquid
f32 m_transforming_liquid_loop_count_multiplier = 1.0f
u32 m_unprocessed_count = 0
u64 m_inc_trending_up_start_time = 0
bool m_queue_size_timer_started = false
bool m_map_metadata_changed = true
MapDatabaseAccessor m_db
MetricGaugePtr m_loaded_blocks_gauge
MetricCounterPtr m_save_time_counter
MetricCounterPtr m_save_count_counter

Static Private Attributes

static constexpr v3s16 EMERGE_EXTRA_BORDER {1, 1, 1}

Friends

class ModApiMapgen

Additional Inherited Members

Protected Attributes inherited from Map
IGameDefm_gamedef
std::set< MapEventReceiver * > m_event_receivers
std::unordered_map< v2s16, MapSector * > m_sectors
MapSectorm_sector_cache = nullptr
v2s16 m_sector_cache_p
const NodeDefManagerm_nodedef

Constructor & Destructor Documentation

◆ ServerMap()

ServerMap::ServerMap ( const std::string & savedir,
IGameDef * gamedef,
EmergeManager * emerge,
MetricsBackend * mb )

◆ ~ServerMap()

ServerMap::~ServerMap ( )

References deleteDetachedBlocks(), errorstream, FUNCTION_NAME, infostream, m_db, m_emerge, m_map_saving_enabled, m_savedir, MOD_STATE_WRITE_AT_UNLOAD, save(), and verbosestream.

Here is the call graph for this function:

Member Function Documentation

◆ addNodeAndUpdate()

void ServerMap::addNodeAndUpdate ( v3s16 p,
MapNode n,
std::map< v3s16, MapBlock * > & modified_blocks,
bool remove_metadata )
overridevirtual

Reimplemented from Map.

References Map::addNodeAndUpdate(), CONTENT_AIR, dir(), g_7dirs, MapNode::getContent(), Map::getNode(), Map::m_nodedef, m_transforming_liquid, and p().

Here is the call graph for this function:

◆ beginSave()

void ServerMap::beginSave ( )
overridevirtual

Reimplemented from Map.

References m_db.

Referenced by save().

Here is the caller graph for this function:

◆ blockpos_over_mapgen_limit()

bool ServerMap::blockpos_over_mapgen_limit ( v3s16 p)

References getMapgenParams(), MAP_BLOCKSIZE, MAX_MAP_GENERATION_LIMIT, p(), and rangelim().

Referenced by initBlockMake().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cancelBlockMake()

void ServerMap::cancelBlockMake ( BlockMakeData * data)

References BlockMakeData::blockpos_max, BlockMakeData::blockpos_min, EMERGE_EXTRA_BORDER, Map::getBlockNoCreateNoEx(), MapBlock::refDrop(), BlockMakeData::vmanip, x, y, and z.

Here is the call graph for this function:

◆ createBlock()

MapBlock * ServerMap::createBlock ( v3s16 p)

References MapSector::createBlankBlock(), createSector(), MapSector::getBlockNoCreateNoEx(), infostream, and p().

Referenced by initBlockMake().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ createDatabase()

MapDatabase * ServerMap::createDatabase ( const std::string & name,
const std::string & savedir,
Settings & conf )
static

References CONTAINS, errorstream, getDatabaseBackends(), Settings::getNoEx(), infostream, Database::initialized(), sanity_check, and Database::verifyDatabase().

Referenced by ServerMap(), migrate_map_database(), and recompress_map_database().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ createSector()

MapSector * ServerMap::createSector ( v2s16 p)

References blockpos_over_max_limit(), Map::getSectorNoGenerate(), Map::m_gamedef, and Map::m_sectors.

Referenced by createBlock(), emergeBlock(), initBlockMake(), and loadBlock().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ deleteBlock()

bool ServerMap::deleteBlock ( v3s16 blockpos)
overridevirtual

Reimplemented from Map.

References MapSector::detachBlock(), Map::getBlockNoCreateNoEx(), Map::getSectorNoGenerate(), m_db, and m_detached_blocks.

Referenced by ModApiEnv::l_delete_area().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ deleteDetachedBlocks()

void ServerMap::deleteDetachedBlocks ( )

References m_detached_blocks.

Referenced by ~ServerMap(), and step().

Here is the caller graph for this function:

◆ deSerializeBlock()

void ServerMap::deSerializeBlock ( MapBlock * block,
std::istream & is )
static

References MapBlock::deSerialize(), g_profiler, PRECISION_MICRO, readU8(), and SPT_AVG.

Referenced by loadBlock(), and recompress_map_database().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ emergeBlock()

MapBlock * ServerMap::emergeBlock ( v3s16 p,
bool create_blank = true )
overridevirtual

Reimplemented from Map.

References MapSector::createBlankBlock(), createSector(), Map::getBlockNoCreateNoEx(), loadBlock(), and p().

Referenced by Server::findSpawnPos(), initBlockMake(), and repairBlockLight().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ endSave()

void ServerMap::endSave ( )
overridevirtual

Reimplemented from Map.

References m_db.

Referenced by save().

Here is the caller graph for this function:

◆ finishBlockMake()

◆ getBlockOrEmerge()

MapBlock * ServerMap::getBlockOrEmerge ( v3s16 p3d,
bool generate )

References Map::getBlockNoCreateNoEx(), m_emerge, and PEER_ID_INEXISTENT.

Here is the call graph for this function:

◆ getDatabaseBackends()

std::vector< std::string > ServerMap::getDatabaseBackends ( )
static

Referenced by createDatabase(), and print_help().

Here is the caller graph for this function:

◆ getMapgenParams()

MapgenParams * ServerMap::getMapgenParams ( )

References settings_mgr.

Referenced by blockpos_over_mapgen_limit(), Server::findSpawnPos(), getSeed(), and initBlockMake().

Here is the caller graph for this function:

◆ getSeed()

u64 ServerMap::getSeed ( )

References getMapgenParams(), and MapgenParams::seed.

Referenced by initBlockMake().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ initBlockMake()

bool ServerMap::initBlockMake ( v3s16 blockpos,
BlockMakeData * data )

copy data from map to prepare for mapgen

Returns
true if mapgen should actually happen

References BlockMakeData::blockpos_max, BlockMakeData::blockpos_min, blockpos_over_mapgen_limit(), MapgenParams::chunksize, createBlock(), createSector(), EMERGE_DBG_OUT, EMERGE_EXTRA_BORDER, emergeBlock(), FATAL_ERROR_IF, EmergeManager::getContainingChunk(), getMapgenParams(), getSeed(), MMVManip::initialEmerge(), m_chunks_in_progress, m_emerge, Map::m_nodedef, BlockMakeData::nodedef, p(), MapBlock::refGrab(), BlockMakeData::seed, MapBlock::setIsUnderground(), BlockMakeData::vmanip, x, y, and z.

Here is the call graph for this function:

◆ isBlockInQueue()

bool ServerMap::isBlockInQueue ( v3s16 pos)

References m_emerge.

◆ isSavingEnabled()

bool ServerMap::isSavingEnabled ( )
inline

References m_map_saving_enabled.

◆ listAllLoadableBlocks()

void ServerMap::listAllLoadableBlocks ( std::vector< v3s16 > & dst)

References m_db.

◆ listAllLoadedBlocks()

void ServerMap::listAllLoadedBlocks ( std::vector< v3s16 > & dst)

References MapSector::getBlocks(), Map::m_sectors, and p().

Here is the call graph for this function:

◆ loadBlock() [1/2]

MapBlock * ServerMap::loadBlock ( const std::string & blob,
v3s16 p,
bool save_after_load = false )

Load a block that was already read from disk.

Used by EmergeManager.

Returns
non-null block (but can be blank)

References MapSector::createBlankBlockNoInsert(), createSector(), deSerializeBlock(), Map::dispatchEvent(), errorstream, g_profiler, g_settings, MapSector::getBlockNoCreateNoEx(), MapSector::insertBlock(), m_emerge, m_transforming_liquid, MEET_OTHER, PRECISION_MICRO, MapBlock::resetModified(), saveBlock(), ReflowScan::scan(), SPT_AVG, MapEditEvent::type, voxalgo::update_block_border_lighting(), and BaseException::what().

Here is the call graph for this function:

◆ loadBlock() [2/2]

MapBlock * ServerMap::loadBlock ( v3s16 p)

References g_profiler, Map::getBlockNoCreateNoEx(), loadBlock(), and m_db.

Referenced by emergeBlock(), and loadBlock().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ PrintInfo()

void ServerMap::PrintInfo ( std::ostream & out)
overridevirtual

Reimplemented from Map.

Referenced by save().

Here is the caller graph for this function:

◆ repairBlockLight()

bool ServerMap::repairBlockLight ( v3s16 blockpos,
std::map< v3s16, MapBlock * > * modified_blocks )

Fixes lighting in one map block. May modify other blocks as well, as light can spread out of the specified block. Returns false if the block is not generated (so nothing changed), true otherwise.

References emergeBlock(), MapBlock::isGenerated(), and voxalgo::repair_block_light().

Referenced by ModApiEnv::l_fix_light().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ reportMetrics()

void ServerMap::reportMetrics ( u64 save_time_us,
u32 saved_blocks,
u32 all_blocks )
overrideprotectedvirtual

Reimplemented from Map.

References m_loaded_blocks_gauge, m_save_count_counter, and m_save_time_counter.

Referenced by save().

Here is the caller graph for this function:

◆ save()

void ServerMap::save ( ModifiedState save_level)
overridevirtual

Reimplemented from Map.

References Profiler::add(), beginSave(), endSave(), MapSector::getBlocks(), porting::getTimeUs(), infostream, m_map_metadata_changed, m_map_saving_enabled, Map::m_sectors, MOD_STATE_CLEAN, Profiler::print(), PrintInfo(), reportMetrics(), saveBlock(), settings_mgr, and warningstream.

Referenced by ~ServerMap().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ saveBlock() [1/2]

bool ServerMap::saveBlock ( MapBlock * block)
overridevirtual

Reimplemented from Map.

References m_db, m_map_compression_level, and saveBlock().

Referenced by Client::handleCommand_BlockData(), loadBlock(), save(), and saveBlock().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ saveBlock() [2/2]

bool ServerMap::saveBlock ( MapBlock * block,
MapDatabase * db,
int compression_level = -1 )
static

References MapBlock::getPos(), MapBlock::resetModified(), MapDatabase::saveBlock(), SER_FMT_VER_HIGHEST_WRITE, and MapBlock::serialize().

Here is the call graph for this function:

◆ step()

void ServerMap::step ( )

References deleteDetachedBlocks().

Here is the call graph for this function:

◆ transforming_liquid_add()

void ServerMap::transforming_liquid_add ( v3s16 p)

References m_transforming_liquid, and p().

Here is the call graph for this function:

◆ transformLiquids()

void ServerMap::transformLiquids ( std::map< v3s16, MapBlock * > & modified_blocks,
ServerEnvironment * env )

References g_settings, porting::getTimeMs(), infostream, m_inc_trending_up_start_time, m_queue_size_timer_started, m_transforming_liquid, m_unprocessed_count, and transformLiquidsLocal().

Here is the call graph for this function:

◆ transformLiquidsLocal()

void ServerMap::transformLiquidsLocal ( std::map< v3s16, MapBlock * > & modified_blocks,
UniqueQueue< v3s16 > & liquid_queue,
ServerEnvironment * env,
u32 liquid_loop_max )

◆ updateVManip()

void ServerMap::updateVManip ( v3s16 pos)

References VoxelArea::contains(), Map::getNode(), idx, VoxelArea::index(), VoxelManipulator::m_area, VoxelManipulator::m_data, m_emerge, VoxelManipulator::m_flags, MMVManip::m_is_dirty, Mapgen::vm, and VOXELFLAG_NO_DATA.

Here is the call graph for this function:

◆ ModApiMapgen

friend class ModApiMapgen
friend

References ModApiMapgen.

Referenced by ModApiMapgen.

Member Data Documentation

◆ EMERGE_EXTRA_BORDER

v3s16 ServerMap::EMERGE_EXTRA_BORDER {1, 1, 1}
staticconstexprprivate

◆ m_chunks_in_progress

std::set<v3s16> ServerMap::m_chunks_in_progress
private

Referenced by finishBlockMake(), and initBlockMake().

◆ m_db

◆ m_detached_blocks

std::vector<std::unique_ptr<MapBlock> > ServerMap::m_detached_blocks
private

◆ m_emerge

◆ m_inc_trending_up_start_time

u64 ServerMap::m_inc_trending_up_start_time = 0
private

Referenced by transformLiquids().

◆ m_loaded_blocks_gauge

MetricGaugePtr ServerMap::m_loaded_blocks_gauge
private

Referenced by ServerMap(), and reportMetrics().

◆ m_map_compression_level

int ServerMap::m_map_compression_level
private

Referenced by ServerMap(), and saveBlock().

◆ m_map_metadata_changed

bool ServerMap::m_map_metadata_changed = true
private

Referenced by save().

◆ m_map_saving_enabled

bool ServerMap::m_map_saving_enabled
private

◆ m_queue_size_timer_started

bool ServerMap::m_queue_size_timer_started = false
private

Referenced by transformLiquids().

◆ m_save_count_counter

MetricCounterPtr ServerMap::m_save_count_counter
private

Referenced by ServerMap(), and reportMetrics().

◆ m_save_time_counter

MetricCounterPtr ServerMap::m_save_time_counter
private

Referenced by ServerMap(), and reportMetrics().

◆ m_savedir

std::string ServerMap::m_savedir
private

Referenced by ServerMap(), and ~ServerMap().

◆ m_transforming_liquid

UniqueQueue<v3s16> ServerMap::m_transforming_liquid
private

◆ m_transforming_liquid_loop_count_multiplier

f32 ServerMap::m_transforming_liquid_loop_count_multiplier = 1.0f
private

◆ m_unprocessed_count

u32 ServerMap::m_unprocessed_count = 0
private

Referenced by transformLiquids().

◆ settings_mgr

MapSettingsManager ServerMap::settings_mgr

Referenced by ServerMap(), getMapgenParams(), and save().


The documentation for this class was generated from the following files: