diff options
author | Elias Fleckenstein <eliasfleckenstein@web.de> | 2021-03-05 15:51:49 +0100 |
---|---|---|
committer | Elias Fleckenstein <eliasfleckenstein@web.de> | 2021-03-05 15:51:49 +0100 |
commit | 232923667a49be16d0fd3fedd61cb6fe901a0af2 (patch) | |
tree | 72c4980276a0f69ae78c723c8ab0cce4c7ed31b2 | |
parent | 1f4d8d860ebb6784842e794c8e2633954bbb5332 (diff) | |
download | minetest-232923667a49be16d0fd3fedd61cb6fe901a0af2.tar.xz |
Send all item metadata when local map saving is enabled
-rw-r--r-- | src/client/client.cpp | 3 | ||||
-rw-r--r-- | src/clientiface.h | 2 | ||||
-rw-r--r-- | src/network/serverpackethandler.cpp | 7 | ||||
-rw-r--r-- | src/server.cpp | 4 |
4 files changed, 13 insertions, 3 deletions
diff --git a/src/client/client.cpp b/src/client/client.cpp index ef4a3cdfc..d8a83136c 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -1008,7 +1008,7 @@ AuthMechanism Client::choseAuthMech(const u32 mechs) void Client::sendInit(const std::string &playerName) { - NetworkPacket pkt(TOSERVER_INIT, 1 + 2 + 2 + (1 + playerName.size())); + NetworkPacket pkt(TOSERVER_INIT, 1 + 2 + 2 + (1 + playerName.size()) + 1); // we don't support network compression yet u16 supp_comp_modes = NETPROTO_COMPRESSION_NONE; @@ -1016,6 +1016,7 @@ void Client::sendInit(const std::string &playerName) pkt << (u8) SER_FMT_VER_HIGHEST_READ << (u16) supp_comp_modes; pkt << (u16) CLIENT_PROTOCOL_VERSION_MIN << (u16) CLIENT_PROTOCOL_VERSION_MAX; pkt << playerName; + pkt << (u8) (m_localdb ? 1 : 0); Send(&pkt); } diff --git a/src/clientiface.h b/src/clientiface.h index cc5292b71..9aa760d15 100644 --- a/src/clientiface.h +++ b/src/clientiface.h @@ -233,6 +233,8 @@ public: // u16 net_proto_version = 0; + u8 mapsaving_enabled = 0; + /* Authentication information */ std::string enc_pwd = ""; bool create_player_on_auth_success = false; diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index ddc6f4e47..f485f0c8d 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -100,10 +100,17 @@ void Server::handleCommand_Init(NetworkPacket* pkt) u16 min_net_proto_version = 0; u16 max_net_proto_version; std::string playerName; + u8 mapsaving_enabled = 0; *pkt >> client_max >> supp_compr_modes >> min_net_proto_version >> max_net_proto_version >> playerName; + try { + *pkt >> mapsaving_enabled; + } catch (PacketError &e) {}; + + client->mapsaving_enabled = mapsaving_enabled; + u8 our_max = SER_FMT_VER_HIGHEST_READ; // Use the highest version supported by both u8 depl_serial_v = std::min(client_max, our_max); diff --git a/src/server.cpp b/src/server.cpp index 13aad1dbf..ef15ed7ba 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1471,7 +1471,7 @@ void Server::SendInventory(PlayerSAO *sao, bool incremental) NetworkPacket pkt(TOCLIENT_INVENTORY, 0, sao->getPeerID()); std::ostringstream os(std::ios::binary); - sao->getInventory()->serialize(os, incremental, g_settings->getBool("send_all_item_metadata")); + sao->getInventory()->serialize(os, incremental, g_settings->getBool("send_all_item_metadata") || getClient(sao->getPeerID(), CS_InitDone)->mapsaving_enabled); sao->getInventory()->setModified(false); player->setModified(true); @@ -2335,7 +2335,7 @@ void Server::SendBlockNoLock(session_t peer_id, MapBlock *block, u8 ver, */ thread_local const int net_compression_level = rangelim(g_settings->getS16("map_compression_level_net"), -1, 9); std::ostringstream os(std::ios_base::binary); - block->serialize(os, ver, false, net_compression_level, g_settings->getBool("send_all_item_metadata")); + block->serialize(os, ver, false, net_compression_level, g_settings->getBool("send_all_item_metadata") || getClient(peer_id)->mapsaving_enabled); block->serializeNetworkSpecific(os); std::string s = os.str(); |