From bb56db715b6c6725dfa7f8d6be6beb2323fbb1d0 Mon Sep 17 00:00:00 2001 From: engsr6982 <109733049+engsr6982@users.noreply.github.com> Date: Thu, 19 Dec 2024 06:15:30 +0800 Subject: [PATCH] fix: ensure the correct plugin loader is selected when loading from file (#110) * fix: fix EndstonePluginManager::loadPlugin #98 * refactor: improve plugin loading logic in EndstonePluginManager * refactor: revert back to range-based loop for plugin loading --------- Co-authored-by: Vincent --- src/endstone_core/plugin/plugin_manager.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/endstone_core/plugin/plugin_manager.cpp b/src/endstone_core/plugin/plugin_manager.cpp index a5e872d53..3cd89b6c4 100644 --- a/src/endstone_core/plugin/plugin_manager.cpp +++ b/src/endstone_core/plugin/plugin_manager.cpp @@ -87,11 +87,15 @@ Plugin *EndstonePluginManager::loadPlugin(std::string file) { Plugin *result = nullptr; for (const auto &loader : plugin_loaders_) { - if (auto *plugin = loader->loadPlugin(file); plugin) { - if (initPlugin(*plugin, *loader, fs::path(file).parent_path())) { - result = plugin; + for (const auto &pattern : loader->getPluginFileFilters()) { + if (std::regex r(pattern); std::regex_search(file, r)) { + if (auto *plugin = loader->loadPlugin(file); plugin) { + if (initPlugin(*plugin, *loader, fs::path(file).parent_path())) { + result = plugin; + } + break; + } } - break; } } return result; @@ -104,7 +108,7 @@ std::vector EndstonePluginManager::loadPlugins(std::string directory) // TODO(plugin): handling logic for depend, soft_depend, load_before and provides for (const auto &loader : plugin_loaders_) { auto plugins = loader->loadPlugins(directory); - for (const auto &plugin : plugins) { + for (auto *plugin : plugins) { if (!plugin) { continue; }