diff --git a/plugin/build.gradle.kts b/plugin/build.gradle.kts index 860de2d..0423be9 100644 --- a/plugin/build.gradle.kts +++ b/plugin/build.gradle.kts @@ -6,6 +6,7 @@ plugins { dependencies { implementation(project(":api")) compileOnly("com.alttd:Galaxy-API:1.21.1-R0.1-SNAPSHOT") + api("org.reflections:reflections:0.10.2") compileOnly("org.projectlombok:lombok:1.18.34") annotationProcessor("org.projectlombok:lombok:1.18.34") diff --git a/plugin/src/main/java/com/alttd/essentia/EssentiaPlugin.java b/plugin/src/main/java/com/alttd/essentia/EssentiaPlugin.java index 49f025a..75f5a9c 100644 --- a/plugin/src/main/java/com/alttd/essentia/EssentiaPlugin.java +++ b/plugin/src/main/java/com/alttd/essentia/EssentiaPlugin.java @@ -10,8 +10,14 @@ import com.alttd.essentia.storage.StorageType; import com.alttd.essentia.user.EssentiaUserManager; import com.alttd.essentia.api.user.UserManager; import lombok.Getter; +import org.bukkit.event.Listener; +import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; +import org.reflections.Reflections; +import org.reflections.scanners.Scanners; + +import java.util.Set; public class EssentiaPlugin extends JavaPlugin implements EssentiaAPI { @@ -74,7 +80,17 @@ public class EssentiaPlugin extends JavaPlugin implements EssentiaAPI { void loadEventListeners() { final PluginManager pluginManager = getServer().getPluginManager(); - pluginManager.registerEvents(new PlayerListener(this), this); + Reflections reflections = new Reflections("com.alttd.essentia.listeners"); + Set> subTypes = reflections.get(Scanners.SubTypes.of(Listener.class).asClass()); + + subTypes.forEach(clazz -> { + try { + Listener listener = (Listener) clazz.getDeclaredConstructor().newInstance(); + pluginManager.registerEvents(listener, this); + } catch (Exception e) { + EssentiaPlugin.instance().getLogger().severe("Failed to register event listener " + clazz.getSimpleName()); + } + }); } void loadManagers() {