]> git.lizzy.rs Git - minetest.git/commitdiff
Make MapEditEvent more complete
authorJude Melton-Houghton <jwmhjwmh@gmail.com>
Sat, 8 Oct 2022 14:25:22 +0000 (10:25 -0400)
committerJude Melton-Houghton <jwmhjwmh@gmail.com>
Sat, 24 Dec 2022 13:24:59 +0000 (08:24 -0500)
SetBlocksNotSent is no longer used.

src/emerge.cpp
src/map.h
src/rollback_interface.cpp
src/script/lua_api/l_nodemeta.cpp
src/server.cpp
src/server.h
src/server/serverinventorymgr.cpp

index d58323ed5c2ed4cb74fe4bd45dbf0be5ff259313..34c13cbd5200b17973c45efc921099d45eeae3f7 100644 (file)
@@ -722,8 +722,15 @@ void *EmergeThread::run()
                if (block)
                        modified_blocks[pos] = block;
 
-               if (!modified_blocks.empty())
-                       m_server->SetBlocksNotSent(modified_blocks);
+               if (!modified_blocks.empty()) {
+                       MapEditEvent event;
+                       event.type = MEET_OTHER;
+                       for (const auto &pair : modified_blocks) {
+                               event.modified_blocks.insert(pair.first);
+                       }
+                       MutexAutoLock envlock(m_server->m_env_mutex);
+                       m_map->dispatchEvent(event);
+               }
                modified_blocks.clear();
        }
        } catch (VersionMismatchException &e) {
index 363da6076a420708e5139558c389e0432edd67e5..e049588713fcaacff9b32745a72d1a0c09b4b682 100644 (file)
--- a/src/map.h
+++ b/src/map.h
@@ -79,21 +79,21 @@ struct MapEditEvent
 
        MapEditEvent() = default;
 
+       // Sets the event's position and marks the block as modified.
+       void setPositionModified(v3s16 pos)
+       {
+               p = pos;
+               modified_blocks.insert(getNodeBlockPos(pos));
+       }
+
        VoxelArea getArea() const
        {
                switch(type){
                case MEET_ADDNODE:
-                       return VoxelArea(p);
                case MEET_REMOVENODE:
-                       return VoxelArea(p);
                case MEET_SWAPNODE:
-                       return VoxelArea(p);
                case MEET_BLOCK_NODE_METADATA_CHANGED:
-               {
-                       v3s16 np1 = p*MAP_BLOCKSIZE;
-                       v3s16 np2 = np1 + v3s16(1,1,1)*MAP_BLOCKSIZE - v3s16(1,1,1);
-                       return VoxelArea(np1, np2);
-               }
+                       return VoxelArea(p);
                case MEET_OTHER:
                {
                        VoxelArea a;
index c00206e984592a53f167ced313544b672dbbbcdc..6f19f441dea260d247f3fdf163be64b6876ea9d0 100644 (file)
@@ -175,7 +175,7 @@ bool RollbackAction::applyRevert(Map *map, InventoryManager *imgr, IGameDef *gam
                                // Inform other things that the meta data has changed
                                MapEditEvent event;
                                event.type = MEET_BLOCK_NODE_METADATA_CHANGED;
-                               event.p = p;
+                               event.setPositionModified(p);
                                map->dispatchEvent(event);
                        } catch (InvalidPositionException &e) {
                                infostream << "RollbackAction::applyRevert(): "
index f4edc17900da52524acf97788d090dad94a6e0a5..f1a2d5c4bc547dd2ca9b3024a746f8d4f6076307 100644 (file)
@@ -66,7 +66,7 @@ void NodeMetaRef::reportMetadataChange(const std::string *name)
 
        MapEditEvent event;
        event.type = MEET_BLOCK_NODE_METADATA_CHANGED;
-       event.p = m_p;
+       event.setPositionModified(m_p);
        event.is_private_change = name && meta && meta->isPrivate(*name);
        m_env->getMap().dispatchEvent(event);
 }
index fb2e0db95b33ab8534b8383f8a6f5e5a1f79f686..a20e82856e889c44a408f5b3efd3f8b7a52cdf67 100644 (file)
@@ -696,11 +696,13 @@ void Server::AsyncRunStep(bool initial_step)
                std::map<v3s16, MapBlock*> modified_blocks;
                m_env->getServerMap().transformLiquids(modified_blocks, m_env);
 
-               /*
-                       Set the modified blocks unsent for all the clients
-               */
                if (!modified_blocks.empty()) {
-                       SetBlocksNotSent(modified_blocks);
+                       MapEditEvent event;
+                       event.type = MEET_OTHER;
+                       for (const auto &pair : modified_blocks) {
+                               event.modified_blocks.insert(pair.first);
+                       }
+                       m_env->getMap().dispatchEvent(event);
                }
        }
        m_clients.step(dtime);
@@ -1253,17 +1255,6 @@ void Server::onMapEditEvent(const MapEditEvent &event)
        m_unsent_map_edit_queue.push(new MapEditEvent(event));
 }
 
-void Server::SetBlocksNotSent(std::map<v3s16, MapBlock *>& block)
-{
-       std::vector<session_t> clients = m_clients.getClientIDs();
-       ClientInterface::AutoLock clientlock(m_clients);
-       // Set the modified blocks unsent for all the clients
-       for (const session_t client_id : clients) {
-                       if (RemoteClient *client = m_clients.lockedGetClientNoEx(client_id))
-                               client->SetBlocksNotSent(block);
-       }
-}
-
 void Server::peerAdded(con::Peer *peer)
 {
        verbosestream<<"Server::peerAdded(): peer->id="
index 365fdf625f6d776e67554fd62ffb7451e33a6f44..168680694affe2a3e418f1f1f273d9182a88606a 100644 (file)
@@ -439,9 +439,6 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        void SendNodeDef(session_t peer_id, const NodeDefManager *nodedef,
                u16 protocol_version);
 
-       /* mark blocks not sent for all clients */
-       void SetBlocksNotSent(std::map<v3s16, MapBlock *>& block);
-
 
        virtual void SendChatMessage(session_t peer_id, const ChatMessage &message);
        void SendTimeOfDay(session_t peer_id, u16 time, f32 time_speed);
index 63d1645cb5699f7ec188aeffcf0d2be237801364..b29bf95a5240a8672a343e7eaada3bd9418c2edf 100644 (file)
@@ -95,7 +95,7 @@ void ServerInventoryManager::setInventoryModified(const InventoryLocation &loc)
        case InventoryLocation::NODEMETA: {
                MapEditEvent event;
                event.type = MEET_BLOCK_NODE_METADATA_CHANGED;
-               event.p = loc.p;
+               event.setPositionModified(loc.p);
                m_env->getMap().dispatchEvent(event);
        } break;
        case InventoryLocation::DETACHED: {