This commit is contained in:
2026-07-26 19:43:51 +02:00
parent f93521a879
commit f1ff828027
4 changed files with 52 additions and 5 deletions

View File

@@ -448,7 +448,7 @@ void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, TakeItem
LOGI("TakeItemPacket\n"); LOGI("TakeItemPacket\n");
ItemInstance* item; ItemInstance* item = new ItemInstance();
item->count = packet->count; item->count = packet->count;
item->id = packet->itemId; item->id = packet->itemId;

View File

@@ -357,8 +357,6 @@ void ServerSideNetworkHandler::onReady_ClientGeneration(const RakNet::RakNetGUID
#else #else
LOGW("%s joined the game\n", newPlayer->name.c_str()); LOGW("%s joined the game\n", newPlayer->name.c_str());
#endif #endif
PluginsManager::get().emit("PlayerJoin", LuaPlayer(source));
// Send all Entities to the new player // Send all Entities to the new player
for (unsigned int i = 0; i < level->entities.size(); ++i) { for (unsigned int i = 0; i < level->entities.size(); ++i) {
Entity* e = level->entities[i]; Entity* e = level->entities[i];
@@ -414,6 +412,8 @@ void ServerSideNetworkHandler::onReady_ClientGeneration(const RakNet::RakNetGUID
bitStream.Reset(); bitStream.Reset();
AddPlayerPacket(newPlayer).write(&bitStream); AddPlayerPacket(newPlayer).write(&bitStream);
rakPeer->Send(&bitStream, HIGH_PRIORITY, RELIABLE_ORDERED, 0, source, true); rakPeer->Send(&bitStream, HIGH_PRIORITY, RELIABLE_ORDERED, 0, source, true);
PluginsManager::get().emit("PlayerJoin", LuaPlayer(source));
} }
// //

View File

@@ -7,8 +7,11 @@
#include <client/Minecraft.h> #include <client/Minecraft.h>
#include <network/packet/ChatPacket.h> #include <network/packet/ChatPacket.h>
#include <network/packet/MovePlayerPacket.h> #include <network/packet/MovePlayerPacket.h>
#include <network/packet/RemoveItemPacket.h>
#include <network/packet/TakeItemPacket.h>
#include <world/entity/player/Inventory.h> #include <world/entity/player/Inventory.h>
// TODO: Optimize includes
class LuaPlayer { class LuaPlayer {
public: public:
LuaPlayer(const RakNet::RakNetGUID source) : m_source(source) {} LuaPlayer(const RakNet::RakNetGUID source) : m_source(source) {}
@@ -68,7 +71,48 @@ public:
auto plr = getPlayer(); auto plr = getPlayer();
if (plr == nullptr) return; 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<int, int, int> 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() { sol::table getInventory() {

View File

@@ -73,7 +73,10 @@ void PluginsManager::registerTypes() {
"getPos", &LuaPlayer::getPos, "getPos", &LuaPlayer::getPos,
"setPos", &LuaPlayer::setPos, "setPos", &LuaPlayer::setPos,
"sendMessage", &LuaPlayer::sendMessage, "sendMessage", &LuaPlayer::sendMessage,
"getInventory", &LuaPlayer::getInventory "getInventory", &LuaPlayer::getInventory,
"addItem", &LuaPlayer::addItem,
"getItem", &LuaPlayer::getItem,
"clearInventory", &LuaPlayer::clearInventory
); );
m_lua["Server"] = &m_srv; m_lua["Server"] = &m_srv;