#pragma once #include #include #include #include #include #include #include #include #include #include #include #include // TODO: Optimize includes class LuaPlayer { public: LuaPlayer(const RakNet::RakNetGUID source) : m_source(source) {} Player* getPlayer() { auto mc = PluginsManager::get().getMinecraft(); ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) mc->netCallback; auto plr = ss->getPlayer(m_source); return plr; } std::string getNickname() { auto plr = getPlayer(); if (plr != nullptr) return plr->name; return ""; } std::tuple getPos() { auto plr = getPlayer(); if (plr != nullptr) return {plr->x, plr->y, plr->z, plr->yRot, plr->xRot}; return {0, 0, 0, 0, 0}; } void setPos(float x, float y, float z, float yRot, float xRot) { auto plr = getPlayer(); if (plr == nullptr) return; auto mc = PluginsManager::get().getMinecraft(); ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) mc->netCallback; // plr->x = x; // plr->y = y; // plr->z = z; // plr->yRot = yRot; // plr->xRot = xRot; plr->xd = plr->yd = plr->zd = 0; plr->lerpTo(x, y, z, yRot, xRot, 3); MovePlayerPacket move(plr->entityId, x, y, z, yRot, xRot); ss->sendPrivate(move, m_source); } void sendMessage(std::string msg) { auto mc = PluginsManager::get().getMinecraft(); ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) mc->netCallback; ChatPacket packet(msg); ss->sendPrivate(packet, m_source); } void addItem(int id, int count, int auxValue) { auto plr = getPlayer(); if (plr == nullptr) return; 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() { auto plr = getPlayer(); if (plr == nullptr) return {}; sol::table inv = PluginsManager::get().getLua().create_table(); for (int i = Inventory::MAX_SELECTION_SIZE; i < plr->inventory->getContainerSize(); i++) { auto itm = plr->inventory->getItem(i); if (itm != NULL) { inv[i - 8] = {itm->id, itm->count, itm->getAuxValue()}; } else { inv[i - 8] = sol::lua_nil; } } return inv; } int getHp() { auto plr = getPlayer(); if (plr == nullptr) return -1; return plr->health; } void setHp(int hp) { auto plr = getPlayer(); if (plr == nullptr) return; plr->health = hp; auto mc = PluginsManager::get().getMinecraft(); ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) mc->netCallback; SetHealthPacket hpPacket(plr->health); ss->sendPrivate(hpPacket, m_source); } private: const RakNet::RakNetGUID m_source; };