summaryrefslogtreecommitdiff
path: root/src/itemstackmetadata.cpp
diff options
context:
space:
mode:
authorraymoo <uguu@installgentoo.com>2017-04-18 16:30:27 -0700
committerparamat <mat.gregory@virginmedia.com>2017-10-29 11:57:38 +0000
commita637107a4e81be88938d68df4deae50e68cf2cd8 (patch)
tree2d35b9bf380af88bb7618a6b4efbca6f55c338d3 /src/itemstackmetadata.cpp
parent610ea6f21629933be3b38c2b5fce53a35c5aac3a (diff)
downloadminetest-a637107a4e81be88938d68df4deae50e68cf2cd8.tar.gz
minetest-a637107a4e81be88938d68df4deae50e68cf2cd8.tar.bz2
minetest-a637107a4e81be88938d68df4deae50e68cf2cd8.zip
Allow overriding tool capabilities through itemstack metadata
This makes it possible to modify the tool capabilities of individual itemstacks by calling a method on itemstack metadata references.
Diffstat (limited to 'src/itemstackmetadata.cpp')
-rw-r--r--src/itemstackmetadata.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/itemstackmetadata.cpp b/src/itemstackmetadata.cpp
index f63671425..53c8bad83 100644
--- a/src/itemstackmetadata.cpp
+++ b/src/itemstackmetadata.cpp
@@ -9,6 +9,22 @@
#define DESERIALIZE_KV_DELIM_STR "\x02"
#define DESERIALIZE_PAIR_DELIM_STR "\x03"
+#define TOOLCAP_KEY "tool_capabilities"
+
+void ItemStackMetadata::clear()
+{
+ Metadata::clear();
+ updateToolCapabilities();
+}
+
+bool ItemStackMetadata::setString(const std::string &name, const std::string &var)
+{
+ bool result = Metadata::setString(name, var);
+ if (name == TOOLCAP_KEY)
+ updateToolCapabilities();
+ return result;
+}
+
void ItemStackMetadata::serialize(std::ostream &os) const
{
std::ostringstream os2;
@@ -41,4 +57,29 @@ void ItemStackMetadata::deSerialize(std::istream &is)
m_stringvars[""] = in;
}
}
+ updateToolCapabilities();
+}
+
+void ItemStackMetadata::updateToolCapabilities()
+{
+ if (contains(TOOLCAP_KEY)) {
+ toolcaps_overridden = true;
+ toolcaps_override = ToolCapabilities();
+ std::istringstream is(getString(TOOLCAP_KEY));
+ toolcaps_override.deserializeJson(is);
+ } else {
+ toolcaps_overridden = false;
+ }
+}
+
+void ItemStackMetadata::setToolCapabilities(const ToolCapabilities &caps)
+{
+ std::ostringstream os;
+ caps.serializeJson(os);
+ setString(TOOLCAP_KEY, os.str());
+}
+
+void ItemStackMetadata::clearToolCapabilities()
+{
+ setString(TOOLCAP_KEY, "");
}