SetBlocksNotSent is no longer used.
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) {
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;
// 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(): "
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);
}
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);
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="
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);
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: {