package net.viper.status.module; import net.md_5.bungee.api.plugin.Plugin; import java.util.LinkedHashMap; import java.util.Map; /** * Verwaltet alle geladenen Module. * Verwendet LinkedHashMap um die Registrierungsreihenfolge zu erhalten, * damit Abhängigkeiten (z.B. VanishModule → ChatModule) korrekt aufgelöst werden. */ public class ModuleManager { private final Map modules = new LinkedHashMap<>(); public void registerModule(Module module) { modules.put(module.getName().toLowerCase(), module); } public void enableAll(Plugin plugin) { for (Module module : modules.values()) { try { module.onEnable(plugin); } catch (Exception e) { plugin.getLogger().severe("Fehler beim Aktivieren von Modul " + module.getName() + ": " + e.getMessage()); e.printStackTrace(); } } } public void disableAll(Plugin plugin) { for (Module module : modules.values()) { try { module.onDisable(plugin); } catch (Exception e) { plugin.getLogger().warning("Fehler beim Deaktivieren von Modul " + module.getName()); } } modules.clear(); } /** * Ermöglicht anderen Komponenten (wie dem WebServer) Zugriff auf spezifische Module. */ public Module getModule(String name) { return modules.get(name.toLowerCase()); } /** * Ersetzt ein bestehendes Modul durch eine neue Instanz (für Reload). * Das alte Modul muss bereits deaktiviert worden sein. */ public void replaceModule(String name, Module newModule) { modules.put(name.toLowerCase(), newModule); } @SuppressWarnings("unchecked") public T getModule(Class clazz) { for (Module m : modules.values()) { if (clazz.isInstance(m)) { return (T) m; } } return null; } }