if (!modified_blocks.empty()) {
MapEditEvent event;
event.type = MEET_OTHER;
- for (const auto &pair : modified_blocks) {
- event.modified_blocks.insert(pair.first);
- }
+ event.setModifiedBlocks(modified_blocks);
MutexAutoLock envlock(m_server->m_env_mutex);
m_map->dispatchEvent(event);
}
std::map<v3s16, MapBlock*> modified_blocks;
addNodeAndUpdate(p, n, modified_blocks, remove_metadata);
- // Copy modified_blocks to event
- for (auto &modified_block : modified_blocks) {
- event.modified_blocks.insert(modified_block.first);
- }
+ event.setModifiedBlocks(modified_blocks);
}
catch(InvalidPositionException &e){
succeeded = false;
std::map<v3s16, MapBlock*> modified_blocks;
removeNodeAndUpdate(p, modified_blocks);
- // Copy modified_blocks to event
- for (auto &modified_block : modified_blocks) {
- event.modified_blocks.insert(modified_block.first);
- }
+ event.setModifiedBlocks(modified_blocks);
}
catch(InvalidPositionException &e){
succeeded = false;
//Modified lighting, send event
MapEditEvent event;
event.type = MEET_OTHER;
- std::map<v3s16, MapBlock *>::iterator it;
- for (it = modified_blocks.begin();
- it != modified_blocks.end(); ++it)
- event.modified_blocks.insert(it->first);
+ event.setModifiedBlocks(modified_blocks);
dispatchEvent(event);
}
}
MapEditEventType type = MEET_OTHER;
v3s16 p;
MapNode n = CONTENT_AIR;
- std::set<v3s16> modified_blocks;
+ std::vector<v3s16> modified_blocks; // Represents a set
bool is_private_change = false;
MapEditEvent() = default;
// Sets the event's position and marks the block as modified.
void setPositionModified(v3s16 pos)
{
+ assert(modified_blocks.empty()); // only meant for initialization (once)
p = pos;
- modified_blocks.insert(getNodeBlockPos(pos));
+ modified_blocks.push_back(getNodeBlockPos(pos));
+ }
+
+ void setModifiedBlocks(const std::map<v3s16, MapBlock *> blocks)
+ {
+ assert(modified_blocks.empty()); // only meant for initialization (once)
+ modified_blocks.reserve(blocks.size());
+ for (const auto &block : blocks)
+ modified_blocks.push_back(block.first);
}
VoxelArea getArea() const
//// Create & dispatch map modification events to observers
MapEditEvent event;
event.type = MEET_OTHER;
- for (it = modified_blocks.begin(); it != modified_blocks.end(); ++it)
- event.modified_blocks.insert(it->first);
+ event.setModifiedBlocks(modified_blocks);
map->dispatchEvent(event);
}
// Send a MEET_OTHER event
MapEditEvent event;
event.type = MEET_OTHER;
- for (auto &modified_block : modified_blocks)
- event.modified_blocks.insert(modified_block.first);
+ event.setModifiedBlocks(modified_blocks);
map->dispatchEvent(event);
return SUCCESS;
}
if (!modified_blocks.empty()) {
MapEditEvent event;
event.type = MEET_OTHER;
- for (auto &modified_block : modified_blocks)
- event.modified_blocks.insert(modified_block.first);
+ event.setModifiedBlocks(modified_blocks);
map.dispatchEvent(event);
}
v3s16 bp(x, y, z);
if (map.deleteBlock(bp)) {
env->setStaticForActiveObjectsInBlock(bp, false);
- event.modified_blocks.insert(bp);
+ event.modified_blocks.push_back(bp);
} else {
success = false;
}
MapEditEvent event;
event.type = MEET_OTHER;
- for (const auto &it : modified_blocks)
- event.modified_blocks.insert(it.first);
+ event.setModifiedBlocks(modified_blocks);
map->dispatchEvent(event);
return 0;
if (!modified_blocks.empty()) {
MapEditEvent event;
event.type = MEET_OTHER;
- for (const auto &pair : modified_blocks) {
- event.modified_blocks.insert(pair.first);
- }
+ event.setModifiedBlocks(modified_blocks);
m_env->getMap().dispatchEvent(event);
}
}