package pro.gravit.launcher.modules; import java.io.IOException; import java.nio.file.Path; import java.util.List; import java.util.function.Predicate; import pro.gravit.utils.Version; public interface LauncherModulesManager { LauncherModule loadModule(LauncherModule module); LauncherModule loadModule(Path file) throws IOException; LauncherModule getModule(String name); LauncherModule getCoreModule(); default boolean containsModule(String name) { return getModule(name) != null; } default boolean containsModule(Class clazz) { return getModule(clazz) != null; } ClassLoader getModuleClassLoader(); ModulesConfigManager getConfigManager(); T getModule(Class clazz); T getModuleByInterface(Class clazz); List getModulesByInterface(Class clazz); T findModule(Class clazz, Predicate versionPredicate); /** * Invoke event processing for all modules. * Event processing is carried out in the order of the modules in the list (sorted by priority) * @param event event handled * @param event type */ void invokeEvent(T event); }