diff options
author | Jude Melton-Houghton <jwmhjwmh@gmail.com> | 2022-09-03 22:05:07 -0400 |
---|---|---|
committer | Jude Melton-Houghton <jwmhjwmh@gmail.com> | 2022-12-24 08:24:59 -0500 |
commit | 5c248c2d7de3db54e85f7c388743a2eb8e36fee4 (patch) | |
tree | b0d27690b3e852b207345dc5e00dc4457a7e6268 /src/serverenvironment.cpp | |
parent | 7701e70dc92262c41d68cf1c9f7fbd0c333e5c52 (diff) | |
download | minetest-5c248c2d7de3db54e85f7c388743a2eb8e36fee4.tar.xz |
Add callback on_mapblocks_changed
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); } |