aboutsummaryrefslogtreecommitdiff
path: root/src/script/lua_api
diff options
context:
space:
mode:
authorSmallJoker <SmallJoker@users.noreply.github.com>2018-12-04 20:37:48 +0100
committerGitHub <noreply@github.com>2018-12-04 20:37:48 +0100
commit3d66622772e66154b7624957a27f9be54c4c7c28 (patch)
tree7ff32e791a39d302f6d1306089b95cb23ebba838 /src/script/lua_api
parentae8d14b009650f0fe019301123793312406556e4 (diff)
downloadminetest-3d66622772e66154b7624957a27f9be54c4c7c28.tar.gz
minetest-3d66622772e66154b7624957a27f9be54c4c7c28.tar.bz2
minetest-3d66622772e66154b7624957a27f9be54c4c7c28.zip
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
Diffstat (limited to 'src/script/lua_api')
-rw-r--r--src/script/lua_api/l_itemstackmeta.cpp2
-rw-r--r--src/script/lua_api/l_itemstackmeta.h2
-rw-r--r--src/script/lua_api/l_metadata.cpp6
-rw-r--r--src/script/lua_api/l_metadata.h2
-rw-r--r--src/script/lua_api/l_nodemeta.cpp14
-rw-r--r--src/script/lua_api/l_nodemeta.h2
6 files changed, 12 insertions, 16 deletions
diff --git a/src/script/lua_api/l_itemstackmeta.cpp b/src/script/lua_api/l_itemstackmeta.cpp
index 07ab86499..d1ba1bda4 100644
--- a/src/script/lua_api/l_itemstackmeta.cpp
+++ b/src/script/lua_api/l_itemstackmeta.cpp
@@ -46,7 +46,7 @@ void ItemStackMetaRef::clearMeta()
istack->metadata.clear();
}
-void ItemStackMetaRef::reportMetadataChange()
+void ItemStackMetaRef::reportMetadataChange(const std::string *name)
{
// TODO
}
diff --git a/src/script/lua_api/l_itemstackmeta.h b/src/script/lua_api/l_itemstackmeta.h
index 2f4c37fd9..c3198be4f 100644
--- a/src/script/lua_api/l_itemstackmeta.h
+++ b/src/script/lua_api/l_itemstackmeta.h
@@ -40,7 +40,7 @@ private:
virtual void clearMeta();
- virtual void reportMetadataChange();
+ virtual void reportMetadataChange(const std::string *name = nullptr);
void setToolCapabilities(const ToolCapabilities &caps)
{
diff --git a/src/script/lua_api/l_metadata.cpp b/src/script/lua_api/l_metadata.cpp
index 4f64cc8a6..21002e6a7 100644
--- a/src/script/lua_api/l_metadata.cpp
+++ b/src/script/lua_api/l_metadata.cpp
@@ -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;
}
diff --git a/src/script/lua_api/l_metadata.h b/src/script/lua_api/l_metadata.h
index cee38ed45..e655eb684 100644
--- a/src/script/lua_api/l_metadata.h
+++ b/src/script/lua_api/l_metadata.h
@@ -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;
diff --git a/src/script/lua_api/l_nodemeta.cpp b/src/script/lua_api/l_nodemeta.cpp
index 33b158ae0..22fc61782 100644
--- a/src/script/lua_api/l_nodemeta.cpp
+++ b/src/script/lua_api/l_nodemeta.cpp
@@ -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
diff --git a/src/script/lua_api/l_nodemeta.h b/src/script/lua_api/l_nodemeta.h
index b0b4a9623..fdc1766ed 100644
--- a/src/script/lua_api/l_nodemeta.h
+++ b/src/script/lua_api/l_nodemeta.h
@@ -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);