Skip to content

Commit f6634fa

Browse files
committed
refactor: modify PluginManager on client to ensure compatibility
1 parent f0b04ad commit f6634fa

3 files changed

Lines changed: 36 additions & 2 deletions

File tree

src-client/lse/PluginManager.cpp

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,17 @@ namespace lse {
5858
PluginManager::PluginManager() : ll::mod::ModManager(PluginManagerName) {}
5959
PluginManager::~PluginManager() = default;
6060

61+
void PluginManager::enableAllPlugins() {
62+
for (auto& mod : mods()) {
63+
enableScriptPlugin(mod.getName());
64+
}
65+
}
66+
void PluginManager::disableAllPlugins() {
67+
for (auto& mod : mods()) {
68+
disableScriptPlugin(mod.getName());
69+
}
70+
}
71+
6172
ll::Expected<> PluginManager::load(ll::mod::Manifest manifest) {
6273
if (hasMod(manifest.name)) {
6374
return ll::makeStringError("Plugin has already loaded");
@@ -68,7 +79,7 @@ ll::Expected<> PluginManager::load(ll::mod::Manifest manifest) {
6879
return plugin->onLoad().transform([&, this] { addMod(manifest.name, plugin); });
6980
}
7081

71-
ll::Expected<> PluginManager::enable(std::string_view name) {
82+
ll::Expected<> PluginManager::enableScriptPlugin(std::string_view name) {
7283
auto plugin = std::static_pointer_cast<ScriptPlugin>(getMod(name));
7384
if (!plugin) {
7485
return ll::makeStringError("Plugin {0} not found"_tr(name));
@@ -249,7 +260,14 @@ ll::Expected<> PluginManager::enable(std::string_view name) {
249260
}
250261
}
251262

252-
ll::Expected<> PluginManager::disable(std::string_view name) {
263+
ll::Expected<> PluginManager::enable(std::string_view name) {
264+
if (ll::getGamingStatus() == ll::GamingStatus::Running) {
265+
return enableScriptPlugin(name);
266+
}
267+
return {};
268+
}
269+
270+
ll::Expected<> PluginManager::disableScriptPlugin(std::string_view name) {
253271
try {
254272
auto scriptEngine = EngineManager::getEngine(std::string(name));
255273

@@ -286,6 +304,8 @@ ll::Expected<> PluginManager::disable(std::string_view name) {
286304
}
287305
}
288306

307+
ll::Expected<> PluginManager::disable(std::string_view name) { return disableScriptPlugin(name); }
308+
289309
ll::Expected<> PluginManager::unload(std::string_view name) {
290310
if (auto res = std::static_pointer_cast<ScriptPlugin>(getMod(name))->onUnload(); !res) {
291311
return res;

src-client/lse/PluginManager.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,16 @@ class PluginManager final : public ll::mod::ModManager {
1111
public:
1212
PluginManager();
1313
~PluginManager() override;
14+
void enableAllPlugins();
15+
void disableAllPlugins();
1416

1517
private:
1618
ll::Expected<> load(ll::mod::Manifest manifest) override;
1719
ll::Expected<> unload(std::string_view name) override;
1820
ll::Expected<> enable(std::string_view name) override;
1921
ll::Expected<> disable(std::string_view name) override;
22+
ll::Expected<> enableScriptPlugin(std::string_view name);
23+
ll::Expected<> disableScriptPlugin(std::string_view name);
2024
};
2125

2226
} // namespace lse

src/lse/Entry.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
#include "ll/api/Config.h"
88
#include "ll/api/event/EventBus.h"
99
#include "ll/api/event/command/ServerCommandRegisterEvent.h"
10+
#include "ll/api/event/server/ServerStartedEvent.h"
11+
#include "ll/api/event/server/ServerStoppingEvent.h"
1012
#include "ll/api/i18n/I18n.h"
1113
#include "ll/api/io/FileUtils.h"
1214
#include "ll/api/mod/ModManagerRegistry.h"
@@ -71,6 +73,14 @@ LegacyScriptEngine& LegacyScriptEngine::getInstance() {
7173

7274
bool LegacyScriptEngine::enable() {
7375
ll::service::PlayerInfo::getInstance();
76+
#ifdef LL_PLAT_C
77+
using namespace ll::event;
78+
auto& bus = EventBus::getInstance();
79+
bus.emplaceListener<ServerStartedEvent>([](ServerStartedEvent&) { getInstance().getManager().enableAllPlugins(); });
80+
bus.emplaceListener<ServerStoppingEvent>([](ServerStoppingEvent&) {
81+
getInstance().getManager().disableAllPlugins();
82+
});
83+
#endif
7484
return true;
7585
}
7686

0 commit comments

Comments
 (0)