]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/itemstackmetadata.cpp
Allow overriding tool capabilities through itemstack metadata
[dragonfireclient.git] / src / itemstackmetadata.cpp
index f63671425d390222397a35df81aa0a0dbbe68b10..53c8bad83e25680f4d0c5da866ca6963203d1fcc 100644 (file)
@@ -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, "");
 }