diff options
author | Elias Fleckenstein <eliasfleckenstein@web.de> | 2021-03-05 16:17:23 +0100 |
---|---|---|
committer | Elias Fleckenstein <eliasfleckenstein@web.de> | 2021-03-05 16:17:23 +0100 |
commit | b36ab2d0637503c647a74131eac2cf2c38d670f5 (patch) | |
tree | 3ef82023aa087dce676ea1b0f534f33c8f535f7e | |
parent | 232923667a49be16d0fd3fedd61cb6fe901a0af2 (diff) | |
download | minetest-b36ab2d0637503c647a74131eac2cf2c38d670f5.tar.xz |
Send a hash of unsent fields for proper combining prediction
-rw-r--r-- | src/itemstackmetadata.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/itemstackmetadata.cpp b/src/itemstackmetadata.cpp index f840da690..b437a05f5 100644 --- a/src/itemstackmetadata.cpp +++ b/src/itemstackmetadata.cpp @@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "itemstackmetadata.h" #include "util/serialize.h" #include "util/strfnd.h" +#include "util/numeric.h" #include <algorithm> #define DESERIALIZE_START '\x01' @@ -62,18 +63,24 @@ void ItemStackMetadata::serialize(std::ostream &os, bool disk) const { std::ostringstream os2; os2 << DESERIALIZE_START; + std::string unsent_fields; for (const auto &stringvar : m_stringvars) { if (! disk && stringvar.first != TOOLCAP_KEY && stringvar.first != "description" && stringvar.first != "color" && stringvar.first != "short_description" - && stringvar.first != "palette_index") + && stringvar.first != "palette_index") { + unsent_fields += stringvar.first + "=" + stringvar.second; continue; + } if (!stringvar.first.empty() || !stringvar.second.empty()) os2 << stringvar.first << DESERIALIZE_KV_DELIM << stringvar.second << DESERIALIZE_PAIR_DELIM; } + if (! unsent_fields.empty()) + os2 << "hash" << DESERIALIZE_KV_DELIM + << murmur_hash_64_ua(unsent_fields.data(), unsent_fields.length(), 0xdeadbeef) << DESERIALIZE_PAIR_DELIM; os << serializeJsonStringIfNeeded(os2.str()); } |