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
*/
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()
// 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);
}