X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fitemstackmetadata.cpp;h=53c8bad83e25680f4d0c5da866ca6963203d1fcc;hb=b692454f70cb661a8ce733a4bcbbadcb5edd0049;hp=f63671425d390222397a35df81aa0a0dbbe68b10;hpb=557bbc670451f82c384032383df80a1a92ffe724;p=dragonfireclient.git 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, ""); }