1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Send only changed node metadata to clients instead of whole mapblock (#5268)

Includes newer style changes and fixes by est31

Improve the block position de-serialization
Add type NodeMetadataMap
This commit is contained in:
SmallJoker 2018-12-04 20:37:48 +01:00 committed by GitHub
parent ae8d14b009
commit 3d66622772
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 202 additions and 70 deletions

View file

@ -46,7 +46,7 @@ void ItemStackMetaRef::clearMeta()
istack->metadata.clear();
}
void ItemStackMetaRef::reportMetadataChange()
void ItemStackMetaRef::reportMetadataChange(const std::string *name)
{
// TODO
}

View file

@ -40,7 +40,7 @@ private:
virtual void clearMeta();
virtual void reportMetadataChange();
virtual void reportMetadataChange(const std::string *name = nullptr);
void setToolCapabilities(const ToolCapabilities &caps)
{

View file

@ -122,7 +122,7 @@ int MetaDataRef::l_set_string(lua_State *L)
return 0;
meta->setString(name, str);
ref->reportMetadataChange();
ref->reportMetadataChange(&name);
return 0;
}
@ -160,7 +160,7 @@ int MetaDataRef::l_set_int(lua_State *L)
return 0;
meta->setString(name, str);
ref->reportMetadataChange();
ref->reportMetadataChange(&name);
return 0;
}
@ -198,7 +198,7 @@ int MetaDataRef::l_set_float(lua_State *L)
return 0;
meta->setString(name, str);
ref->reportMetadataChange();
ref->reportMetadataChange(&name);
return 0;
}

View file

@ -37,7 +37,7 @@ public:
protected:
static MetaDataRef *checkobject(lua_State *L, int narg);
virtual void reportMetadataChange() {}
virtual void reportMetadataChange(const std::string *name = nullptr) {}
virtual Metadata *getmeta(bool auto_create) = 0;
virtual void clearMeta() = 0;

View file

@ -58,21 +58,17 @@ void NodeMetaRef::clearMeta()
m_env->getMap().removeNodeMetadata(m_p);
}
void NodeMetaRef::reportMetadataChange()
void NodeMetaRef::reportMetadataChange(const std::string *name)
{
// NOTE: This same code is in rollback_interface.cpp
// Inform other things that the metadata has changed
v3s16 blockpos = getNodeBlockPos(m_p);
NodeMetadata *meta = dynamic_cast<NodeMetadata*>(m_meta);
MapEditEvent event;
event.type = MEET_BLOCK_NODE_METADATA_CHANGED;
event.p = blockpos;
event.p = m_p;
event.is_private_change = name && meta && meta->isPrivate(*name);
m_env->getMap().dispatchEvent(&event);
// Set the block to be saved
MapBlock *block = m_env->getMap().getBlockNoCreateNoEx(blockpos);
if (block) {
block->raiseModified(MOD_STATE_WRITE_NEEDED,
MOD_REASON_REPORT_META_CHANGE);
}
}
// Exported functions

View file

@ -60,7 +60,7 @@ private:
virtual Metadata* getmeta(bool auto_create);
virtual void clearMeta();
virtual void reportMetadataChange();
virtual void reportMetadataChange(const std::string *name = nullptr);
virtual void handleToTable(lua_State *L, Metadata *_meta);
virtual bool handleFromTable(lua_State *L, int table, Metadata *_meta);