diff --git a/src/main/java/dev/plex/command/annotation/System.java b/src/main/java/dev/plex/command/annotation/System.java index 718be26..0e27e90 100644 --- a/src/main/java/dev/plex/command/annotation/System.java +++ b/src/main/java/dev/plex/command/annotation/System.java @@ -2,7 +2,6 @@ package dev.plex.command.annotation; public @interface System { - String value() default ""; boolean debug() default false; diff --git a/src/main/java/dev/plex/handlers/CommandHandler.java b/src/main/java/dev/plex/handlers/CommandHandler.java index c9ba2be..c67e716 100644 --- a/src/main/java/dev/plex/handlers/CommandHandler.java +++ b/src/main/java/dev/plex/handlers/CommandHandler.java @@ -42,7 +42,7 @@ public class CommandHandler extends PlexBase } catch (InvocationTargetException | InstantiationException | IllegalAccessException | NoSuchMethodException ex) { - PlexLog.log("Failed to register " + clazz.getSimpleName() + " as a command!"); + PlexLog.error("Failed to register " + clazz.getSimpleName() + " as a command!"); } }); diff --git a/src/main/java/dev/plex/handlers/ListenerHandler.java b/src/main/java/dev/plex/handlers/ListenerHandler.java index 8796c3d..7e64a16 100644 --- a/src/main/java/dev/plex/handlers/ListenerHandler.java +++ b/src/main/java/dev/plex/handlers/ListenerHandler.java @@ -1,40 +1,44 @@ package dev.plex.handlers; import com.google.common.collect.Lists; -import dev.plex.Plex; +import dev.plex.PlexBase; import dev.plex.listener.PlexListener; -import dev.plex.listener.impl.AdminListener; -import dev.plex.listener.impl.BanListener; -import dev.plex.listener.impl.ChatListener; -import dev.plex.listener.impl.CommandListener; -import dev.plex.listener.impl.FreezeListener; -import dev.plex.listener.impl.GameModeListener; -import dev.plex.listener.impl.PlayerListener; -import dev.plex.listener.impl.ServerListener; -import dev.plex.listener.impl.TabListener; -import dev.plex.listener.impl.WorldListener; +import dev.plex.listener.annotation.Toggled; import dev.plex.util.PlexLog; +import dev.plex.util.PlexUtils; +import java.lang.reflect.InvocationTargetException; import java.util.List; +import java.util.Set; -//TODO: Switch to Reflections API -public class ListenerHandler +public class ListenerHandler extends PlexBase { public ListenerHandler() { + Set> listenerSet = PlexUtils.getClassesBySubType("dev.plex.listener.impl", PlexListener.class); List listeners = Lists.newArrayList(); - listeners.add(new AdminListener()); - listeners.add(new BanListener()); - if (Plex.get().config.getBoolean("chat.enabled")) + + listenerSet.forEach(clazz -> { - listeners.add(new ChatListener()); - } - listeners.add(new CommandListener()); - listeners.add(new FreezeListener()); - listeners.add(new GameModeListener()); - listeners.add(new PlayerListener()); - listeners.add(new ServerListener()); - listeners.add(new TabListener()); - listeners.add(new WorldListener()); - PlexLog.log(String.format("Registered %s listeners!", listeners.size())); + try + { + Toggled annotation = clazz.getDeclaredAnnotation(Toggled.class); + if (annotation != null) + { + if (plugin.config.getBoolean("chat.enabled") && annotation.enabled()) + { + listeners.add(clazz.getConstructor().newInstance()); + } + } + else + { + listeners.add(clazz.getConstructor().newInstance()); + } + } + catch (InvocationTargetException | InstantiationException | IllegalAccessException | NoSuchMethodException ex) + { + PlexLog.error("Failed to register " + clazz.getSimpleName() + " as a listener!"); + } + }); + PlexLog.log(String.format("Registered %s listeners from %s classes!", listeners.size(), listenerSet.size())); } } diff --git a/src/main/java/dev/plex/listener/annotation/Toggled.java b/src/main/java/dev/plex/listener/annotation/Toggled.java new file mode 100644 index 0000000..bcb1e6b --- /dev/null +++ b/src/main/java/dev/plex/listener/annotation/Toggled.java @@ -0,0 +1,6 @@ +package dev.plex.listener.annotation; + +public @interface Toggled +{ + boolean enabled() default false; +} diff --git a/src/main/java/dev/plex/listener/impl/ChatListener.java b/src/main/java/dev/plex/listener/impl/ChatListener.java index 71323e8..5d4cede 100644 --- a/src/main/java/dev/plex/listener/impl/ChatListener.java +++ b/src/main/java/dev/plex/listener/impl/ChatListener.java @@ -2,8 +2,8 @@ package dev.plex.listener.impl; import dev.plex.cache.PlayerCache; import dev.plex.listener.PlexListener; +import dev.plex.listener.annotation.Toggled; import dev.plex.player.PlexPlayer; -import dev.plex.util.PlexLog; import dev.plex.util.PlexUtils; import io.papermc.paper.chat.ChatRenderer; import io.papermc.paper.event.player.AsyncChatEvent; @@ -15,6 +15,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.jetbrains.annotations.NotNull; +@Toggled(enabled = true) public class ChatListener extends PlexListener { private final PlexChatRenderer renderer = new PlexChatRenderer();