diff options
Diffstat (limited to 'src/serverenvironment.cpp')
-rw-r--r-- | src/serverenvironment.cpp | 25 |
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); } |