From 5c68dd85041e89a1d7b45af1d68efd05b58aa2c2 Mon Sep 17 00:00:00 2001 From: extio-de Date: Sat, 3 Jan 2026 20:47:36 +0100 Subject: [PATCH] ModuleService: Activate modules in changeDisplayState(true) first --- .../game_engine/module/ModuleServiceImpl.java | 48 +++++++++++-------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/src/main/java/de/extio/game_engine/module/ModuleServiceImpl.java b/src/main/java/de/extio/game_engine/module/ModuleServiceImpl.java index d6655c0..49f8ecd 100644 --- a/src/main/java/de/extio/game_engine/module/ModuleServiceImpl.java +++ b/src/main/java/de/extio/game_engine/module/ModuleServiceImpl.java @@ -183,30 +183,34 @@ public class ModuleServiceImpl implements ModuleService, ApplicationListener m instanceof AbstractClientModule) - .map(m -> (AbstractClientModule) m) - .toList(); - } - synchronized (this.executorCallbackMap) { - final var subscriptions = module.executorCallbackSubscriptions(); - if (subscriptions != null) { - for (final var subscription : subscriptions) { - executorCallbackMap.computeIfAbsent(subscription, k -> Collections.synchronizedList(new ArrayList<>())).add(module); - } - } - } - this.invokeSafe(module, AbstractModule::onActivate); - - LOGGER.info("Activated {}", id); + this.doActivateModule(id, module); } } }); } + + private void doActivateModule(final String id, final AbstractModule module) { + this.modulesActive.add(module); + this.sortModules(this.modulesActive); + synchronized (this.modulesActive) { + this.modulesActiveView = List.copyOf(this.modulesActive); + this.modulesActiveClientModulesView = this.modulesActive.stream() + .filter(m -> m instanceof AbstractClientModule) + .map(m -> (AbstractClientModule) m) + .toList(); + } + synchronized (this.executorCallbackMap) { + final var subscriptions = module.executorCallbackSubscriptions(); + if (subscriptions != null) { + for (final var subscription : subscriptions) { + executorCallbackMap.computeIfAbsent(subscription, k -> Collections.synchronizedList(new ArrayList<>())).add(module); + } + } + } + this.invokeSafe(module, AbstractModule::onActivate); + + LOGGER.info("Activated {}", id); + } @Override public void deactivateAll() { @@ -225,6 +229,10 @@ public class ModuleServiceImpl implements ModuleService, ApplicationListener mod.getId().equals(id))) { + this.doActivateModule(id, clientModule); + } + this.modulesDisplayed.add(clientModule); clientModule.setDisplayed(true); LOGGER.info("Displayed {}", id);