diff options
author | sfan5 <sfan5@live.de> | 2022-05-26 15:45:34 +0200 |
---|---|---|
committer | sfan5 <sfan5@live.de> | 2022-05-29 14:00:19 +0200 |
commit | 8908a9101608d3343023b470743ef63f1c44b0b7 (patch) | |
tree | 026ce924286a08222bbb88936e203fce7f116f68 /src/script/lua_api | |
parent | 261a8db9dd0403f8d0a7d71f46d4cb272e217cd1 (diff) | |
download | minetest-8908a9101608d3343023b470743ef63f1c44b0b7.tar.gz minetest-8908a9101608d3343023b470743ef63f1c44b0b7.tar.bz2 minetest-8908a9101608d3343023b470743ef63f1c44b0b7.zip |
Get rid of node metadata when it becomes empty
fixes #8943
Diffstat (limited to 'src/script/lua_api')
-rw-r--r-- | src/script/lua_api/l_nodemeta.cpp | 13 | ||||
-rw-r--r-- | src/script/lua_api/l_nodemeta.h | 6 |
2 files changed, 12 insertions, 7 deletions
diff --git a/src/script/lua_api/l_nodemeta.cpp b/src/script/lua_api/l_nodemeta.cpp index 1d052685e..514a1b78b 100644 --- a/src/script/lua_api/l_nodemeta.cpp +++ b/src/script/lua_api/l_nodemeta.cpp @@ -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) { } diff --git a/src/script/lua_api/l_nodemeta.h b/src/script/lua_api/l_nodemeta.h index fdc1766ed..265ece3d0 100644 --- a/src/script/lua_api/l_nodemeta.h +++ b/src/script/lua_api/l_nodemeta.h @@ -33,10 +33,12 @@ class NodeMetadata; class NodeMetaRef : public MetaDataRef { private: + bool m_is_local = false; + // Set for server metadata v3s16 m_p; ServerEnvironment *m_env = nullptr; - Metadata *m_meta = nullptr; - bool m_is_local = false; + // Set for client metadata + Metadata *m_local_meta = nullptr; static const char className[]; static const luaL_Reg methodsServer[]; |