From 97b0fb4d4678f2948c71c7e3e6c95db336c7d496 Mon Sep 17 00:00:00 2001 From: InviseDivine Date: Fri, 27 Mar 2026 20:16:59 +0200 Subject: [PATCH] FEAT: New proto check --- src/SharedConstants.h | 5 ++--- src/network/ClientSideNetworkHandler.cpp | 2 +- src/network/ServerSideNetworkHandler.cpp | 15 +++++++++------ src/network/packet/LoginPacket.h | 15 ++++++++++++--- src/server/ServerPlayer.cpp | 5 +++-- src/server/ServerPlayer.h | 19 ++++++++++++++----- 6 files changed, 41 insertions(+), 20 deletions(-) diff --git a/src/SharedConstants.h b/src/SharedConstants.h index dcae293..f97ea36 100755 --- a/src/SharedConstants.h +++ b/src/SharedConstants.h @@ -16,9 +16,8 @@ namespace SharedConstants { // 0.5.0 uses NPv8 // 0.6.0 uses NPv9 - // TODO: Better proto check - const int NetworkProtocolVersion = 10; - const int NetworkProtocolLowestSupportedVersion = 10; + const int NetworkProtocolVersion = 9; + const int NetworkProtocolLowestSupportedVersion = 9; const int GameProtocolVersion = 1; const int GameProtocolLowestSupportedVersion = 1; diff --git a/src/network/ClientSideNetworkHandler.cpp b/src/network/ClientSideNetworkHandler.cpp index 696e918..53570d5 100755 --- a/src/network/ClientSideNetworkHandler.cpp +++ b/src/network/ClientSideNetworkHandler.cpp @@ -87,7 +87,7 @@ void ClientSideNetworkHandler::onConnect(const RakNet::RakNetGUID& hostGuid) serverGuid = hostGuid; clearChunksLoaded(); - LoginPacket packet(minecraft->options.getStringValue(OPTIONS_USERNAME).c_str(), SharedConstants::NetworkProtocolVersion); + LoginPacket packet(minecraft->options.getStringValue(OPTIONS_USERNAME).c_str(), SharedConstants::NetworkProtocolVersion, true); raknetInstance->send(packet); } diff --git a/src/network/ServerSideNetworkHandler.cpp b/src/network/ServerSideNetworkHandler.cpp index 996a567..fbb9308 100755 --- a/src/network/ServerSideNetworkHandler.cpp +++ b/src/network/ServerSideNetworkHandler.cpp @@ -194,7 +194,6 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, LoginPac LOGI("LoginPacket\n"); - printf("%d", packet->clientNetworkVersion); int loginStatus = LoginStatus::Success; // // Bad/incompatible client version @@ -204,6 +203,9 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, LoginPac if (oldClient || oldServer) loginStatus = oldClient? LoginStatus::Failed_ClientOld : LoginStatus::Failed_ServerOld; + if (packet->newProto) { + printf("New proto! \n"); + } RakNet::BitStream bitStream; LoginStatusPacket(loginStatus).write(&bitStream); rakPeer->Send(&bitStream, HIGH_PRIORITY, RELIABLE_ORDERED, 0, source, false); @@ -214,8 +216,9 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, LoginPac // // Valid client version // - Player* newPlayer = new ServerPlayer(minecraft, level); - + + Player* newPlayer = new ServerPlayer(minecraft, level, packet->newProto); + minecraft->gameMode->initAbilities(newPlayer->abilities); newPlayer->owner = source; newPlayer->name = packet->clientName.C_String(); @@ -366,7 +369,7 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, MovePlay float vectorDist = sqrt( (packet->x - entity->x) * (packet->x - entity->x) + (packet->y - entity->y) * (packet->y - entity->y) + (packet->z - entity->z) * (packet->z - entity->z)); - float speed = vectorDist / (minecraft->getTicks() - player->lastMoveTicks); + float speed = vectorDist / (minecraft->getTicks() - player->getLastMoveTicks()); if (speed < 2.5f) { entity->xd = entity->yd = entity->zd = 0; @@ -376,7 +379,7 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, MovePlay redistributePacket(packet, source); } - player->lastMoveTicks = minecraft->getTicks(); + player->setLastMoveTicks(minecraft->getTicks()); } } @@ -512,7 +515,7 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, PlayerAr if (!player) return; if (rakPeer->GetMyGUID() == player->owner) return; - LOGI("Equip armor: %i %i %i %i\n", packet->head, packet->torso, packet->legs, packet->feet); + // LOGI("Equip armor: %i %i %i %i\n", packet->head, packet->torso, packet->legs, packet->feet); packet->fillIn(player); redistributePacket(packet, source); diff --git a/src/network/packet/LoginPacket.h b/src/network/packet/LoginPacket.h index b44a44a..50caee3 100755 --- a/src/network/packet/LoginPacket.h +++ b/src/network/packet/LoginPacket.h @@ -9,17 +9,20 @@ public: RakNet::RakString clientName; int clientNetworkVersion; int clientNetworkLowestSupportedVersion; + bool newProto; LoginPacket() : clientNetworkVersion(-1), - clientNetworkLowestSupportedVersion(-1) + clientNetworkLowestSupportedVersion(-1), + newProto(false) { } - LoginPacket(const RakNet::RakString& clientName, int clientVersion) + LoginPacket(const RakNet::RakString& clientName, int clientVersion, bool newProto) : clientName(clientName), clientNetworkVersion(clientVersion), - clientNetworkLowestSupportedVersion(clientVersion) + clientNetworkLowestSupportedVersion(clientVersion), + newProto(newProto) { } @@ -29,6 +32,7 @@ public: bitStream->Write(clientName); bitStream->Write(clientNetworkVersion); bitStream->Write(clientNetworkLowestSupportedVersion); + bitStream->Write(newProto); } void read(RakNet::BitStream* bitStream) @@ -39,6 +43,11 @@ public: if (bitStream->GetNumberOfUnreadBits() > 0) { bitStream->Read(clientNetworkVersion); bitStream->Read(clientNetworkLowestSupportedVersion); + + // Checking for new proto + if (bitStream->GetNumberOfUnreadBits() > 0) { + bitStream->Read(newProto); + } } } diff --git a/src/server/ServerPlayer.cpp b/src/server/ServerPlayer.cpp index c27ae38..3f89033 100755 --- a/src/server/ServerPlayer.cpp +++ b/src/server/ServerPlayer.cpp @@ -22,11 +22,12 @@ #include "network/packet/SendInventoryPacket.h" #include "world/entity/player/Inventory.h" -ServerPlayer::ServerPlayer( Minecraft* minecraft, Level* level ) +ServerPlayer::ServerPlayer( Minecraft* minecraft, Level* level, bool proto) : super(level, minecraft->isCreativeMode()), _mc(minecraft), _prevHealth(-999), - _containerCounter(0) + _containerCounter(0), + isNewProto(proto) { // hasFakeInventory = true; footSize = 0; diff --git a/src/server/ServerPlayer.h b/src/server/ServerPlayer.h index c95a066..77579d9 100755 --- a/src/server/ServerPlayer.h +++ b/src/server/ServerPlayer.h @@ -15,7 +15,7 @@ class ServerPlayer: public Player, { typedef Player super; public: - ServerPlayer(Minecraft* minecraft, Level* level); + ServerPlayer(Minecraft* minecraft, Level* level, bool proto); ~ServerPlayer(); @@ -44,10 +44,14 @@ public: void completeUsingItem(); - // Getter and setter? Doesnt hear about that - // TODO: Getter and setter :trollface: - int lastMoveTicks = 0; - int ticksInAir = 0; + void setLastMoveTicks(int lastMoveTicks) { this->lastMoveTicks = lastMoveTicks; } + int getLastMoveTicks() { return lastMoveTicks; } + + void setTicksInAir(int ticksInAir) { this->ticksInAir = ticksInAir; } + int getTicksInAir() { return ticksInAir; } + + void setNewProto(bool proto) { isNewProto = proto; } + bool getProto() { return isNewProto; } private: void nextContainerCounter(); void setContainerMenu( BaseContainerMenu* menu ); @@ -55,6 +59,11 @@ private: Minecraft* _mc; int _prevHealth; int _containerCounter; + + int lastMoveTicks = 0; + int ticksInAir = 0; + + bool isNewProto = false; }; #endif /*ServerPlayer_H__*/