]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/script/lua_api/l_nodemeta.cpp
Get rid of node metadata when it becomes empty
[dragonfireclient.git] / src / script / lua_api / l_nodemeta.cpp
index 1d052685e4fbc5dbae4ef632933448d5cd0bf117..514a1b78b18bfe8ae59ed00a214abcdb5d7373ad 100644 (file)
@@ -40,7 +40,7 @@ NodeMetaRef* NodeMetaRef::checkobject(lua_State *L, int narg)
 Metadata* NodeMetaRef::getmeta(bool auto_create)
 {
        if (m_is_local)
-               return m_meta;
+               return m_local_meta;
 
        NodeMetadata *meta = m_env->getMap().getNodeMetadata(m_p);
        if (meta == NULL && auto_create) {
@@ -62,9 +62,12 @@ void NodeMetaRef::clearMeta()
 void NodeMetaRef::reportMetadataChange(const std::string *name)
 {
        SANITY_CHECK(!m_is_local);
-       // NOTE: This same code is in rollback_interface.cpp
        // Inform other things that the metadata has changed
-       NodeMetadata *meta = dynamic_cast<NodeMetadata*>(m_meta);
+       NodeMetadata *meta = dynamic_cast<NodeMetadata*>(getmeta(false));
+
+       // If the metadata is now empty, get rid of it
+       if (meta && meta->empty())
+               clearMeta();
 
        MapEditEvent event;
        event.type = MEET_BLOCK_NODE_METADATA_CHANGED;
@@ -174,8 +177,8 @@ NodeMetaRef::NodeMetaRef(v3s16 p, ServerEnvironment *env):
 }
 
 NodeMetaRef::NodeMetaRef(Metadata *meta):
-       m_meta(meta),
-       m_is_local(true)
+       m_is_local(true),
+       m_local_meta(meta)
 {
 }