aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElias Fleckenstein <eliasfleckenstein@web.de>2021-03-05 16:17:23 +0100
committerElias Fleckenstein <eliasfleckenstein@web.de>2021-03-05 16:17:23 +0100
commitb36ab2d0637503c647a74131eac2cf2c38d670f5 (patch)
tree3ef82023aa087dce676ea1b0f534f33c8f535f7e
parent232923667a49be16d0fd3fedd61cb6fe901a0af2 (diff)
downloadminetest-b36ab2d0637503c647a74131eac2cf2c38d670f5.tar.xz
Send a hash of unsent fields for proper combining prediction
-rw-r--r--src/itemstackmetadata.cpp9
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());
}