From f93521a879b8a4379f477b78fddc90159b5aa7e0 Mon Sep 17 00:00:00 2001 From: InviseDivine Date: Sun, 26 Jul 2026 01:02:27 +0200 Subject: [PATCH] login plugin works yoy --- src/client/gui/screens/ConsoleScreen.cpp | 22 +++++++-------- src/main_dedicated.cpp | 4 +-- src/network/ServerSideNetworkHandler.cpp | 4 ++- src/plugins/PluginsManager.cpp | 36 ++++++++++++++++++++++++ src/plugins/PluginsManager.hpp | 20 ++----------- 5 files changed, 55 insertions(+), 31 deletions(-) diff --git a/src/client/gui/screens/ConsoleScreen.cpp b/src/client/gui/screens/ConsoleScreen.cpp index 5a9e4a6..70ab2b8 100644 --- a/src/client/gui/screens/ConsoleScreen.cpp +++ b/src/client/gui/screens/ConsoleScreen.cpp @@ -6,7 +6,7 @@ #include "../../../world/level/Level.h" #include "../../../network/RakNetInstance.h" #include "../../../network/ServerSideNetworkHandler.h" -#include "../../../network/packet/MessagePacket.h" +#include "../../../network/packet/ChatPacket.h" #include "../../../platform/log.h" #include "util/StringUtils.h" @@ -63,25 +63,25 @@ void ConsoleScreen::execute() return minecraft->setScreen(NULL); } - if (_input[0] == '/') { - // Command - _input = Util::stringTrim(_input.substr(1)); + // if (_input[0] == '/') { + // // Command + // _input = Util::stringTrim(_input.substr(1)); - std::istringstream iss(minecraft->commandManager().execute(*minecraft, *minecraft->player, _input)); - for (std::string line; std::getline(iss, line); ) { - minecraft->gui.addMessage(line); - } - } else { + // std::istringstream iss(minecraft->commandManager().execute(*minecraft, *minecraft->player, _input)); + // for (std::string line; std::getline(iss, line); ) { + // minecraft->gui.addMessage(line); + // } + // } else { // @ai @rewrite if (minecraft->netCallback && minecraft->raknetInstance->isServer()) { static_cast(minecraft->netCallback)->displayGameMessage(_input); } else if (minecraft->netCallback) { - MessagePacket chatPkt(_input.c_str()); + ChatPacket chatPkt(_input); minecraft->raknetInstance->send(chatPkt); } else { minecraft->gui.addMessage("<" + minecraft->player->name + "> " + _input); } - } + // } minecraft->setScreen(NULL); } diff --git a/src/main_dedicated.cpp b/src/main_dedicated.cpp index ec813c5..fc135b1 100755 --- a/src/main_dedicated.cpp +++ b/src/main_dedicated.cpp @@ -234,13 +234,13 @@ int main(int numArguments, char* pszArgs[]) { } else { throw std::runtime_error("Cannot open banned players list."); } - + PluginsManager::get().emit("ServerShutdown"); + ((MAIN_CLASS*)g_app)->level->saveLevelData(); delete app; appContext.platform->finish(); delete appContext.platform; - PluginsManager::get().emit("ServerShutdown"); std::cout << "Quit correctly" << std::endl; return g_exitCode; diff --git a/src/network/ServerSideNetworkHandler.cpp b/src/network/ServerSideNetworkHandler.cpp index a520402..84600b2 100755 --- a/src/network/ServerSideNetworkHandler.cpp +++ b/src/network/ServerSideNetworkHandler.cpp @@ -166,9 +166,11 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, ChatPack // This is a command auto cmd = Util::stringTrim(packet->message.substr(1)); - if (PluginsManager::get().emitCommands(cmd, LuaPlayer(source))) { + if (PluginsManager::get().emitCommands(cmd, source)) { ChatPacket resp(minecraft->commandManager().execute(*minecraft, *player, cmd)); return sendPrivate(resp, source); + } else { + return; } } diff --git a/src/plugins/PluginsManager.cpp b/src/plugins/PluginsManager.cpp index ebc1af9..64bec6c 100644 --- a/src/plugins/PluginsManager.cpp +++ b/src/plugins/PluginsManager.cpp @@ -7,6 +7,42 @@ namespace fs = std::filesystem; +int PluginsManager::emitCommands(std::string command, const RakNet::RakNetGUID& source) { + std::vector args; + std::string cmd; + + int i = 0; + std::string word; + std::stringstream ss(command); + + while (ss >> word) { + if (i == 0) { + cmd = word; + } else { + args.push_back(word); + } + + i++; + } + + std::cout << cmd << " " << " ff" << std::endl; + + auto it = m_luaCommands.find(cmd); + + if (it == m_luaCommands.end()) return 1; + + for (auto& callback : it->second) { + sol::protected_function_result result = callback(LuaPlayer(source), sol::as_table(args)); + + if (!result.valid()) { + sol::error err = result; + std::cout << err.what() << std::endl; + } + } + + return 0; +} + void PluginsManager::init(Minecraft& minecraft) { m_lua.open_libraries(sol::lib::base, sol::lib::package, sol::lib::string, sol::lib::math, sol::lib::table, sol::lib::io); registerTypes(); diff --git a/src/plugins/PluginsManager.hpp b/src/plugins/PluginsManager.hpp index c5cf2e1..271d01f 100644 --- a/src/plugins/PluginsManager.hpp +++ b/src/plugins/PluginsManager.hpp @@ -4,6 +4,7 @@ #include #include #include +#include class Minecraft; @@ -42,23 +43,8 @@ public: } } - template - int emitCommands(std::string event, Args&&... args) { - auto it = m_luaCommands.find(event); - - if (it == m_luaCommands.end()) return 1; - - for (auto& callback : it->second) { - sol::protected_function_result result = callback(std::forward(args)...); - - if (!result.valid()) { - sol::error err = result; - std::cout << err.what() << std::endl; - } - } - - return 0; - } + int emitCommands(std::string command, const RakNet::RakNetGUID& source); + Minecraft* getMinecraft() { return m_minecraft; } private: std::unordered_map> m_callbacks;