1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-07-02 16:38:41 +00:00

Add callback on_mapblocks_changed

This commit is contained in:
Jude Melton-Houghton 2022-09-03 22:05:07 -04:00
parent 7701e70dc9
commit 5c248c2d7d
10 changed files with 141 additions and 6 deletions

View file

@ -381,6 +381,18 @@ void ActiveBlockList::update(std::vector<PlayerSAO*> &active_players,
m_list = std::move(newlist);
}
/*
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);
}