Minetest 5.9.0-dev
 
Loading...
Searching...
No Matches
servermap.h
Go to the documentation of this file.
1/*
2Minetest
3Copyright (C) 2010-2024 celeron55, Perttu Ahola <celeron55@gmail.com>
4
5This program is free software; you can redistribute it and/or modify
6it under the terms of the GNU Lesser General Public License as published by
7the Free Software Foundation; either version 2.1 of the License, or
8(at your option) any later version.
9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU Lesser General Public License for more details.
14
15You should have received a copy of the GNU Lesser General Public License along
16with this program; if not, write to the Free Software Foundation, Inc.,
1751 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18*/
19
20#pragma once
21
22#include <vector>
23#include <memory>
24
25#include "map.h"
26#include "util/container.h"
27#include "util/metricsbackend.h"
29
30class Settings;
31class MapDatabase;
33class EmergeManager;
35struct BlockMakeData;
36
37class MetricsBackend;
38
39/*
40 ServerMap
41
42 This is the only map class that is able to generate map.
43*/
44
45class ServerMap : public Map
46{
47public:
48 /*
49 savedir: directory to which map data should be saved
50 */
51 ServerMap(const std::string &savedir, IGameDef *gamedef, EmergeManager *emerge, MetricsBackend *mb);
52 ~ServerMap();
53
54 /*
55 Get a sector from somewhere.
56 - Check memory
57 - Check disk (doesn't load blocks)
58 - Create blank one
59 */
61
62 /*
63 Blocks are generated by using these and makeBlock().
64 */
66 bool initBlockMake(v3s16 blockpos, BlockMakeData *data);
68 std::map<v3s16, MapBlock*> *changed_blocks);
69
70 /*
71 Get a block from somewhere.
72 - Memory
73 - Create blank
74 */
76
77 /*
78 Forcefully get a block from somewhere.
79 - Memory
80 - Load from disk
81 - Create blank filled with CONTENT_IGNORE
82
83 */
84 MapBlock *emergeBlock(v3s16 p, bool create_blank=true) override;
85
86 /*
87 Try to get a block.
88 If it does not exist in memory, add it to the emerge queue.
89 - Memory
90 - Emerge Queue (deferred disk or generate)
91 */
92 MapBlock *getBlockOrEmerge(v3s16 p3d, bool generate);
93
94 bool isBlockInQueue(v3s16 pos);
95
97 std::map<v3s16, MapBlock*> &modified_blocks,
98 bool remove_metadata) override;
99
100 /*
101 Database functions
102 */
103 static MapDatabase *createDatabase(const std::string &name, const std::string &savedir, Settings &conf);
104
105 // Call these before and after saving of blocks
106 void beginSave() override;
107 void endSave() override;
108
109 void save(ModifiedState save_level) override;
110 void listAllLoadableBlocks(std::vector<v3s16> &dst);
111 void listAllLoadedBlocks(std::vector<v3s16> &dst);
112
114
115 bool saveBlock(MapBlock *block) override;
116 static bool saveBlock(MapBlock *block, MapDatabase *db, int compression_level = -1);
118 // Database version
119 void loadBlock(std::string *blob, v3s16 p3d, MapSector *sector, bool save_after_load=false);
120
121 // Blocks are removed from the map but not deleted from memory until
122 // deleteDetachedBlocks() is called, since pointers to them may still exist
123 // when deleteBlock() is called.
124 bool deleteBlock(v3s16 blockpos) override;
125
127
128 void step();
129
130 void updateVManip(v3s16 pos);
131
132 // For debug printing
133 void PrintInfo(std::ostream &out) override;
134
136
137 u64 getSeed();
138
146 bool repairBlockLight(v3s16 blockpos,
147 std::map<v3s16, MapBlock *> *modified_blocks);
148
149 void transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks,
150 ServerEnvironment *env);
151
153
155
156protected:
157
158 void reportMetrics(u64 save_time_us, u32 saved_blocks, u32 all_blocks) override;
159
160private:
161 friend class ModApiMapgen; // for m_transforming_liquid
162
163 // Emerge manager
165
166 std::string m_savedir;
168
170
171 std::set<v3s16> m_chunks_in_progress;
172
173 // used by deleteBlock() and deleteDetachedBlocks()
174 std::vector<std::unique_ptr<MapBlock>> m_detached_blocks;
175
176 // Queued transforming water nodes
180 u64 m_inc_trending_up_start_time = 0; // milliseconds
182
183 /*
184 Metadata is re-written on disk only if this is true.
185 This is reset to false when written on disk.
186 */
188 MapDatabase *dbase = nullptr;
190
191 // Map metrics
195};
Definition: emerge.h:130
Definition: gamedef.h:51
Definition: rollback_interface.h:112
Definition: mapblock.h:73
Definition: database.h:38
Definition: mapsector.h:40
Definition: map_settings_manager.h:45
Definition: map.h:116
Definition: metricsbackend.h:54
Definition: serverenvironment.h:220
Definition: servermap.h:46
void updateVManip(v3s16 pos)
Definition: servermap.cpp:449
MapSettingsManager settings_mgr
Definition: servermap.h:154
MapBlock * emergeBlock(v3s16 p, bool create_blank=true) override
Definition: servermap.cpp:386
u64 getSeed()
Definition: servermap.cpp:178
MapDatabase * dbase_ro
Definition: servermap.h:189
void step()
Definition: servermap.cpp:763
bool blockpos_over_mapgen_limit(v3s16 p)
Definition: servermap.cpp:183
MapDatabase * dbase
Definition: servermap.h:188
bool repairBlockLight(v3s16 blockpos, std::map< v3s16, MapBlock * > *modified_blocks)
Definition: servermap.cpp:775
void finishBlockMake(BlockMakeData *data, std::map< v3s16, MapBlock * > *changed_blocks)
Definition: servermap.cpp:261
~ServerMap()
Definition: servermap.cpp:142
void endSave() override
Definition: servermap.cpp:603
MapSector * createSector(v2s16 p)
Definition: servermap.cpp:323
bool saveBlock(MapBlock *block) override
Definition: servermap.cpp:608
std::set< v3s16 > m_chunks_in_progress
Definition: servermap.h:171
MetricGaugePtr m_loaded_blocks_gauge
Definition: servermap.h:192
static MapDatabase * createDatabase(const std::string &name, const std::string &savedir, Settings &conf)
Definition: servermap.cpp:570
std::string m_savedir
Definition: servermap.h:166
bool m_map_saving_enabled
Definition: servermap.h:167
void listAllLoadedBlocks(std::vector< v3s16 > &dst)
Definition: servermap.cpp:555
void PrintInfo(std::ostream &out) override
Definition: servermap.cpp:770
std::vector< std::unique_ptr< MapBlock > > m_detached_blocks
Definition: servermap.h:174
UniqueQueue< v3s16 > m_transforming_liquid
Definition: servermap.h:177
void deleteDetachedBlocks()
Definition: servermap.cpp:753
MetricCounterPtr m_save_count_counter
Definition: servermap.h:194
void transformLiquids(std::map< v3s16, MapBlock * > &modified_blocks, ServerEnvironment *env)
Definition: servermap.cpp:853
EmergeManager * m_emerge
Definition: servermap.h:164
bool isBlockInQueue(v3s16 pos)
Definition: servermap.cpp:419
void reportMetrics(u64 save_time_us, u32 saved_blocks, u32 all_blocks) override
Definition: servermap.cpp:469
int m_map_compression_level
Definition: servermap.h:169
bool m_map_metadata_changed
Definition: servermap.h:187
bool initBlockMake(v3s16 blockpos, BlockMakeData *data)
Definition: servermap.cpp:196
f32 m_transforming_liquid_loop_count_multiplier
Definition: servermap.h:178
MapBlock * createBlock(v3s16 p)
Definition: servermap.cpp:351
void save(ModifiedState save_level) override
Definition: servermap.cpp:476
MetricCounterPtr m_save_time_counter
Definition: servermap.h:193
MapBlock * getBlockOrEmerge(v3s16 p3d, bool generate)
Definition: servermap.cpp:410
u32 m_unprocessed_count
Definition: servermap.h:179
void beginSave() override
Definition: servermap.cpp:598
void transforming_liquid_add(v3s16 p)
Definition: servermap.cpp:848
MapgenParams * getMapgenParams()
Definition: servermap.cpp:171
void listAllLoadableBlocks(std::vector< v3s16 > &dst)
Definition: servermap.cpp:548
void addNodeAndUpdate(v3s16 p, MapNode n, std::map< v3s16, MapBlock * > &modified_blocks, bool remove_metadata) override
Definition: servermap.cpp:424
bool m_queue_size_timer_started
Definition: servermap.h:181
bool isSavingEnabled()
Definition: servermap.h:135
MapBlock * loadBlock(v3s16 p)
Definition: servermap.cpp:698
bool deleteBlock(v3s16 blockpos) override
Definition: servermap.cpp:734
u64 m_inc_trending_up_start_time
Definition: servermap.h:180
Definition: settings.h:124
Definition: container.h:41
core::vector2d< s16 > v2s16
Definition: irr_v2d.h:27
core::vector3d< s16 > v3s16
Definition: irr_v3d.h:28
std::shared_ptr< MetricCounter > MetricCounterPtr
Definition: metricsbackend.h:37
std::shared_ptr< MetricGauge > MetricGaugePtr
Definition: metricsbackend.h:51
ModifiedState
Definition: modifiedstate.h:25
Definition: emerge.h:51
Definition: mapnode.h:139
Definition: mapgen.h:129
Definition: l_mapgen.cpp:42
static std::string p(std::string path)
Definition: test_filesys.cpp:64