#pragma once #include "Minecraft.h" #include #include #include #include #if defined(_WIN32) #include #include #else #include #include #endif class File; class FileFilter; typedef void (*ModEntry)(Minecraft *minecraft); const std::string ModEntryName = "mcmain"; #if defined(_WIN32) using LibHandle = std::unique_ptr>; #else using LibHandle = std::unique_ptr>; #endif struct Plugin { LibHandle handle; File path; ModEntry init; Plugin(LibHandle h, const File &f, ModEntry e) : handle(std::move(h)), path(f), init(e) {} Plugin(Plugin&&) = default; Plugin& operator=(Plugin&&) = default; Plugin(const Plugin&) = delete; Plugin& operator=(const Plugin&) = delete; }; class Modloader { public: explicit Modloader(Minecraft *minecraft); explicit Modloader(const File &pluginFolder, Minecraft *minecraft); ~Modloader() = default; bool addPlugin(const File &pluginFile); private: bool loadPlugin(const File &library); std::vector scanPlugins(const File &folder); std::vector plugins_; Minecraft *m_instance; };