mirror of
https://github.com/luanti-org/luanti.git
synced 2025-08-11 17:51:04 +00:00
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.
This commit is contained in:
parent
610ea6f216
commit
a637107a4e
10 changed files with 206 additions and 14 deletions
|
@ -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, "");
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue