From 6957f144e1e32e1228756907a1bcc6bccda2f6f2 Mon Sep 17 00:00:00 2001 From: InviseDivine Date: Fri, 27 Mar 2026 17:05:50 +0200 Subject: [PATCH] FIX: Inventory change when cheating items (TODO: Linked slots) --- src/network/ClientSideNetworkHandler.cpp | 12 ++++++++++++ src/network/ClientSideNetworkHandler.h | 1 + src/network/ServerSideNetworkHandler.cpp | 6 ++++++ 3 files changed, 19 insertions(+) diff --git a/src/network/ClientSideNetworkHandler.cpp b/src/network/ClientSideNetworkHandler.cpp index fc3a815..696e918 100755 --- a/src/network/ClientSideNetworkHandler.cpp +++ b/src/network/ClientSideNetworkHandler.cpp @@ -386,6 +386,18 @@ void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, MovePlay entity->lerpTo(packet->x, packet->y, packet->z, packet->yRot, packet->xRot, 3); } } + +void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, SendInventoryPacket* packet) { + if (!level) return; + + // TODO: Linked slots + if (packet->entityId == minecraft->player->entityId) { + auto items = packet->items; + + minecraft->player->inventory->replace(items); + } +} + void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, TakeItemPacket* packet) { if (!level) return; diff --git a/src/network/ClientSideNetworkHandler.h b/src/network/ClientSideNetworkHandler.h index b0cb98f..4847c74 100755 --- a/src/network/ClientSideNetworkHandler.h +++ b/src/network/ClientSideNetworkHandler.h @@ -80,6 +80,7 @@ public: virtual void handle(const RakNet::RakNetGUID& source, RemoveItemPacket* packet); virtual void handle(const RakNet::RakNetGUID& source, TakeItemPacket* packet); virtual void handle(const RakNet::RakNetGUID& source, WantCreatePacket* packet); + virtual void handle(const RakNet::RakNetGUID& source, SendInventoryPacket* packet); private: diff --git a/src/network/ServerSideNetworkHandler.cpp b/src/network/ServerSideNetworkHandler.cpp index 9228e0f..c897591 100755 --- a/src/network/ServerSideNetworkHandler.cpp +++ b/src/network/ServerSideNetworkHandler.cpp @@ -7,6 +7,7 @@ #include "../world/inventory/BaseContainerMenu.h" #include "network/packet/ContainerSetSlotPacket.h" #include "network/packet/RemoveBlockPacket.h" +#include "network/packet/SendInventoryPacket.h" #include "network/packet/UpdateBlockPacket.h" #include "network/packet/RemoveItemPacket.h" #include "network/packet/TakeItemPacket.h" @@ -359,6 +360,7 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, MovePlay //LOGI("MovePlayerPacket\n"); if (Entity* entity = level->getEntity(packet->entityId)) { + entity->xd = entity->yd = entity->zd = 0; entity->lerpTo(packet->x, packet->y, packet->z, packet->yRot, packet->xRot, 3); @@ -477,6 +479,10 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, PlayerEq if (slot < 0 && packet->itemId != 0) { LOGW("PlayerEquipmentPacket: Remote player doesn't have his thing (or crafted it)!\n"); + + SendInventoryPacket newInventory (player, false); + raknetInstance->send(newInventory); + return; }