FEAT: New proto check

This commit is contained in:
2026-03-27 20:16:59 +02:00
parent 8be842a8ac
commit 97b0fb4d46
6 changed files with 41 additions and 20 deletions

View File

@@ -16,9 +16,8 @@ namespace SharedConstants
{ {
// 0.5.0 uses NPv8 // 0.5.0 uses NPv8
// 0.6.0 uses NPv9 // 0.6.0 uses NPv9
// TODO: Better proto check const int NetworkProtocolVersion = 9;
const int NetworkProtocolVersion = 10; const int NetworkProtocolLowestSupportedVersion = 9;
const int NetworkProtocolLowestSupportedVersion = 10;
const int GameProtocolVersion = 1; const int GameProtocolVersion = 1;
const int GameProtocolLowestSupportedVersion = 1; const int GameProtocolLowestSupportedVersion = 1;

View File

@@ -87,7 +87,7 @@ void ClientSideNetworkHandler::onConnect(const RakNet::RakNetGUID& hostGuid)
serverGuid = hostGuid; serverGuid = hostGuid;
clearChunksLoaded(); 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); raknetInstance->send(packet);
} }

View File

@@ -194,7 +194,6 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, LoginPac
LOGI("LoginPacket\n"); LOGI("LoginPacket\n");
printf("%d", packet->clientNetworkVersion);
int loginStatus = LoginStatus::Success; int loginStatus = LoginStatus::Success;
// //
// Bad/incompatible client version // Bad/incompatible client version
@@ -204,6 +203,9 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, LoginPac
if (oldClient || oldServer) if (oldClient || oldServer)
loginStatus = oldClient? LoginStatus::Failed_ClientOld : LoginStatus::Failed_ServerOld; loginStatus = oldClient? LoginStatus::Failed_ClientOld : LoginStatus::Failed_ServerOld;
if (packet->newProto) {
printf("New proto! \n");
}
RakNet::BitStream bitStream; RakNet::BitStream bitStream;
LoginStatusPacket(loginStatus).write(&bitStream); LoginStatusPacket(loginStatus).write(&bitStream);
rakPeer->Send(&bitStream, HIGH_PRIORITY, RELIABLE_ORDERED, 0, source, false); 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 // Valid client version
// //
Player* newPlayer = new ServerPlayer(minecraft, level);
Player* newPlayer = new ServerPlayer(minecraft, level, packet->newProto);
minecraft->gameMode->initAbilities(newPlayer->abilities); minecraft->gameMode->initAbilities(newPlayer->abilities);
newPlayer->owner = source; newPlayer->owner = source;
newPlayer->name = packet->clientName.C_String(); 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) + float vectorDist = sqrt( (packet->x - entity->x) * (packet->x - entity->x) +
(packet->y - entity->y) * (packet->y - entity->y) + (packet->y - entity->y) * (packet->y - entity->y) +
(packet->z - entity->z) * (packet->z - entity->z)); (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) { if (speed < 2.5f) {
entity->xd = entity->yd = entity->zd = 0; entity->xd = entity->yd = entity->zd = 0;
@@ -376,7 +379,7 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, MovePlay
redistributePacket(packet, source); 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 (!player) return;
if (rakPeer->GetMyGUID() == player->owner) 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); packet->fillIn(player);
redistributePacket(packet, source); redistributePacket(packet, source);

View File

@@ -9,17 +9,20 @@ public:
RakNet::RakString clientName; RakNet::RakString clientName;
int clientNetworkVersion; int clientNetworkVersion;
int clientNetworkLowestSupportedVersion; int clientNetworkLowestSupportedVersion;
bool newProto;
LoginPacket() LoginPacket()
: clientNetworkVersion(-1), : 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), : clientName(clientName),
clientNetworkVersion(clientVersion), clientNetworkVersion(clientVersion),
clientNetworkLowestSupportedVersion(clientVersion) clientNetworkLowestSupportedVersion(clientVersion),
newProto(newProto)
{ {
} }
@@ -29,6 +32,7 @@ public:
bitStream->Write(clientName); bitStream->Write(clientName);
bitStream->Write(clientNetworkVersion); bitStream->Write(clientNetworkVersion);
bitStream->Write(clientNetworkLowestSupportedVersion); bitStream->Write(clientNetworkLowestSupportedVersion);
bitStream->Write(newProto);
} }
void read(RakNet::BitStream* bitStream) void read(RakNet::BitStream* bitStream)
@@ -39,6 +43,11 @@ public:
if (bitStream->GetNumberOfUnreadBits() > 0) { if (bitStream->GetNumberOfUnreadBits() > 0) {
bitStream->Read(clientNetworkVersion); bitStream->Read(clientNetworkVersion);
bitStream->Read(clientNetworkLowestSupportedVersion); bitStream->Read(clientNetworkLowestSupportedVersion);
// Checking for new proto
if (bitStream->GetNumberOfUnreadBits() > 0) {
bitStream->Read(newProto);
}
} }
} }

View File

@@ -22,11 +22,12 @@
#include "network/packet/SendInventoryPacket.h" #include "network/packet/SendInventoryPacket.h"
#include "world/entity/player/Inventory.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()), : super(level, minecraft->isCreativeMode()),
_mc(minecraft), _mc(minecraft),
_prevHealth(-999), _prevHealth(-999),
_containerCounter(0) _containerCounter(0),
isNewProto(proto)
{ {
// hasFakeInventory = true; // hasFakeInventory = true;
footSize = 0; footSize = 0;

View File

@@ -15,7 +15,7 @@ class ServerPlayer: public Player,
{ {
typedef Player super; typedef Player super;
public: public:
ServerPlayer(Minecraft* minecraft, Level* level); ServerPlayer(Minecraft* minecraft, Level* level, bool proto);
~ServerPlayer(); ~ServerPlayer();
@@ -44,10 +44,14 @@ public:
void completeUsingItem(); void completeUsingItem();
// Getter and setter? Doesnt hear about that void setLastMoveTicks(int lastMoveTicks) { this->lastMoveTicks = lastMoveTicks; }
// TODO: Getter and setter :trollface: int getLastMoveTicks() { return lastMoveTicks; }
int lastMoveTicks = 0;
int ticksInAir = 0; void setTicksInAir(int ticksInAir) { this->ticksInAir = ticksInAir; }
int getTicksInAir() { return ticksInAir; }
void setNewProto(bool proto) { isNewProto = proto; }
bool getProto() { return isNewProto; }
private: private:
void nextContainerCounter(); void nextContainerCounter();
void setContainerMenu( BaseContainerMenu* menu ); void setContainerMenu( BaseContainerMenu* menu );
@@ -55,6 +59,11 @@ private:
Minecraft* _mc; Minecraft* _mc;
int _prevHealth; int _prevHealth;
int _containerCounter; int _containerCounter;
int lastMoveTicks = 0;
int ticksInAir = 0;
bool isNewProto = false;
}; };
#endif /*ServerPlayer_H__*/ #endif /*ServerPlayer_H__*/