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);