From 3bc58b7f9c535563f6f99e4f3334332a1aae658f Mon Sep 17 00:00:00 2001 From: Len <40720638+destro174@users.noreply.github.com> Date: Wed, 14 Aug 2024 20:42:22 +0200 Subject: [PATCH] Use reflection to load event listeners --- plugin/build.gradle.kts | 1 + .../com/alttd/essentia/EssentiaPlugin.java | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) 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() {