This commit is contained in:
2026-07-21 22:42:28 +02:00
parent 6f1ca8fc3b
commit 67acd7f9a6
10 changed files with 159 additions and 29 deletions

View File

@@ -2,19 +2,48 @@
#include <unordered_map>
#include <sol/sol.hpp>
#include <vector>
#include <plugins/LuaServer.hpp>
class Level;
class Minecraft;
class PluginsManager {
public:
PluginsManager(Level& level);
static inline PluginsManager& get() {
static PluginsManager inst;
return inst;
}
void init(Minecraft& minecraft);
void registerTypes();
void subscribe(std::string event, sol::function function);
void loadPlugins();
// @ai @note maybe we should rewrite it...
// problem that i dont know how to pass args in sol::function dynamically
// so i used ai
// sry :(
template<typename... Args>
void emit(std::string event, Args&&... args) {
auto it = m_callbacks.find(event);
if (it == m_callbacks.end()) return;
for (auto& callback : it->second) {
sol::protected_function_result result = callback(std::forward<Args>(args)...);
if (!result.valid()) {
sol::error err = result;
std::cout << err.what() << std::endl;
}
}
}
Minecraft* getMinecraft() { return m_minecraft; }
private:
std::unordered_map<std::string, std::vector<sol::function>> m_callbacks;
LuaServer m_srv;
sol::state m_lua;
Level& m_level;
Minecraft* m_minecraft;
};