aboutsummaryrefslogtreecommitdiff
path: root/src/serverenvironment.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/serverenvironment.cpp')
-rw-r--r--src/serverenvironment.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/serverenvironment.cpp b/src/serverenvironment.cpp
index 9dd5ba621..aa6ba2f96 100644
--- a/src/serverenvironment.cpp
+++ b/src/serverenvironment.cpp
@@ -382,6 +382,18 @@ void ActiveBlockList::update(std::vector<PlayerSAO*> &active_players,
}
/*
+ OnMapblocksChangedReceiver
+*/
+
+void OnMapblocksChangedReceiver::onMapEditEvent(const MapEditEvent &event)
+{
+ assert(receiving);
+ for (const v3s16 &p : event.modified_blocks) {
+ modified_blocks.insert(p);
+ }
+}
+
+/*
ServerEnvironment
*/
@@ -476,6 +488,11 @@ void ServerEnvironment::init()
m_player_database = openPlayerDatabase(player_backend_name, m_path_world, conf);
m_auth_database = openAuthDatabase(auth_backend_name, m_path_world, conf);
+
+ if (m_map && m_script->has_on_mapblocks_changed()) {
+ m_map->addEventReceiver(&m_on_mapblocks_changed_receiver);
+ m_on_mapblocks_changed_receiver.receiving = true;
+ }
}
ServerEnvironment::~ServerEnvironment()
@@ -1570,6 +1587,14 @@ void ServerEnvironment::step(float dtime)
// Send outdated detached inventories
m_server->sendDetachedInventories(PEER_ID_INEXISTENT, true);
+ // Notify mods of modified mapblocks
+ if (m_on_mapblocks_changed_receiver.receiving &&
+ !m_on_mapblocks_changed_receiver.modified_blocks.empty()) {
+ std::unordered_set<v3s16> modified_blocks;
+ std::swap(modified_blocks, m_on_mapblocks_changed_receiver.modified_blocks);
+ m_script->on_mapblocks_changed(modified_blocks);
+ }
+
const auto end_time = porting::getTimeUs();
m_step_time_counter->increment(end_time - start_time);
}