From f1ff828027a38911e2360cf23458afb46f0e428e Mon Sep 17 00:00:00 2001 From: InviseDivine Date: Sun, 26 Jul 2026 19:43:51 +0200 Subject: [PATCH] i --- src/network/ClientSideNetworkHandler.cpp | 2 +- src/network/ServerSideNetworkHandler.cpp | 4 +-- src/plugins/LuaPlayer.hpp | 46 +++++++++++++++++++++++- src/plugins/PluginsManager.cpp | 5 ++- 4 files changed, 52 insertions(+), 5 deletions(-) diff --git a/src/network/ClientSideNetworkHandler.cpp b/src/network/ClientSideNetworkHandler.cpp index 022b35f..e2b8150 100755 --- a/src/network/ClientSideNetworkHandler.cpp +++ b/src/network/ClientSideNetworkHandler.cpp @@ -448,7 +448,7 @@ void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, TakeItem LOGI("TakeItemPacket\n"); - ItemInstance* item; + ItemInstance* item = new ItemInstance(); item->count = packet->count; item->id = packet->itemId; diff --git a/src/network/ServerSideNetworkHandler.cpp b/src/network/ServerSideNetworkHandler.cpp index 84600b2..9c3c239 100755 --- a/src/network/ServerSideNetworkHandler.cpp +++ b/src/network/ServerSideNetworkHandler.cpp @@ -357,8 +357,6 @@ void ServerSideNetworkHandler::onReady_ClientGeneration(const RakNet::RakNetGUID #else LOGW("%s joined the game\n", newPlayer->name.c_str()); #endif - PluginsManager::get().emit("PlayerJoin", LuaPlayer(source)); - // Send all Entities to the new player for (unsigned int i = 0; i < level->entities.size(); ++i) { Entity* e = level->entities[i]; @@ -414,6 +412,8 @@ void ServerSideNetworkHandler::onReady_ClientGeneration(const RakNet::RakNetGUID bitStream.Reset(); AddPlayerPacket(newPlayer).write(&bitStream); rakPeer->Send(&bitStream, HIGH_PRIORITY, RELIABLE_ORDERED, 0, source, true); + + PluginsManager::get().emit("PlayerJoin", LuaPlayer(source)); } // diff --git a/src/plugins/LuaPlayer.hpp b/src/plugins/LuaPlayer.hpp index 2745bd8..0234854 100644 --- a/src/plugins/LuaPlayer.hpp +++ b/src/plugins/LuaPlayer.hpp @@ -7,8 +7,11 @@ #include #include #include +#include +#include #include +// TODO: Optimize includes class LuaPlayer { public: LuaPlayer(const RakNet::RakNetGUID source) : m_source(source) {} @@ -68,7 +71,48 @@ public: auto plr = getPlayer(); if (plr == nullptr) return; - plr->inventory->add(new ItemInstance(id, count, auxValue)); + auto mc = PluginsManager::get().getMinecraft(); + ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) mc->netCallback; + auto item = new ItemInstance(id, count, auxValue); + + if (!plr->inventory->add(item)) { + plr->inventory->add(item); + } + + TakeItemPacket itemAdd(plr->entityId, count, auxValue, id); + ss->sendPrivate(itemAdd, m_source); + } + + std::tuple getItem(int index) { + auto plr = getPlayer(); + if (plr == nullptr) return {0, 0, 0}; + + auto item = plr->inventory->getItem(index); + + if (item != nullptr) { + return {item->id, item->count, item->getAuxValue()}; + } else { + return {0, 0, 0}; + } + } + + void clearInventory() { + auto plr = getPlayer(); + if (plr == nullptr) return; + + auto mc = PluginsManager::get().getMinecraft(); + ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) mc->netCallback; + + for (int i = Inventory::MAX_SELECTION_SIZE; i < plr->inventory->getContainerSize(); i++) { + auto itm = plr->inventory->getItem(i); + + if (itm != NULL) { + printf("remove %d \n", plr->inventory->removeResource(ItemInstance(itm->id, itm->count, itm->getAuxValue()))); + RemoveItemPacket itemAdd(plr->entityId, itm->count, itm->getAuxValue(), itm->id); + ss->sendPrivate(itemAdd, m_source); + } + } + } sol::table getInventory() { diff --git a/src/plugins/PluginsManager.cpp b/src/plugins/PluginsManager.cpp index 64bec6c..cdb1c7e 100644 --- a/src/plugins/PluginsManager.cpp +++ b/src/plugins/PluginsManager.cpp @@ -73,7 +73,10 @@ void PluginsManager::registerTypes() { "getPos", &LuaPlayer::getPos, "setPos", &LuaPlayer::setPos, "sendMessage", &LuaPlayer::sendMessage, - "getInventory", &LuaPlayer::getInventory + "getInventory", &LuaPlayer::getInventory, + "addItem", &LuaPlayer::addItem, + "getItem", &LuaPlayer::getItem, + "clearInventory", &LuaPlayer::clearInventory ); m_lua["Server"] = &m_srv;