]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/itemstackmetadata.cpp
Disable HW stereo for IrrLicht 1.9 (not supported anymore)
[dragonfireclient.git] / src / itemstackmetadata.cpp
index 02c548abb6ae88b18519eec027f480381f385f0d..4aa1a09030541e42ceb6800ac242f29799c16661 100644 (file)
@@ -1,3 +1,23 @@
+/*
+Minetest
+Copyright (C) 2017-8 rubenwardy <rw@rubenwardy.com>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+
 #include "itemstackmetadata.h"
 #include "util/serialize.h"
 #include "util/strfnd.h"
 #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;
        os2 << DESERIALIZE_START;
        for (const auto &stringvar : m_stringvars) {
-               os2 << stringvar.first << DESERIALIZE_KV_DELIM
-                   << stringvar.second << DESERIALIZE_PAIR_DELIM;
+               if (!stringvar.first.empty() || !stringvar.second.empty())
+                       os2 << stringvar.first << DESERIALIZE_KV_DELIM
+                               << stringvar.second << DESERIALIZE_PAIR_DELIM;
        }
        os << serializeJsonStringIfNeeded(os2.str());
 }
@@ -40,4 +77,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, "");
 }