From a637107a4e81be88938d68df4deae50e68cf2cd8 Mon Sep 17 00:00:00 2001 From: raymoo Date: Tue, 18 Apr 2017 16:30:27 -0700 Subject: 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. --- src/itemstackmetadata.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'src/itemstackmetadata.cpp') 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, ""); } -- cgit v1.2.3