Plex/server/src/main/java/dev/plex/handlers/ListenerHandler.java

47 lines
1.7 KiB
Java
Raw Normal View History

2021-01-03 07:21:15 +00:00
package dev.plex.handlers;
import com.google.common.collect.Lists;
2022-03-19 19:27:55 +00:00
import dev.plex.PlexBase;
2021-01-03 07:21:15 +00:00
import dev.plex.listener.PlexListener;
import dev.plex.listener.annotation.Toggleable;
2021-01-03 07:21:15 +00:00
import dev.plex.util.PlexLog;
2022-04-19 20:19:55 +00:00
import dev.plex.util.ReflectionsUtil;
2023-03-08 20:26:10 +00:00
2022-03-19 19:27:55 +00:00
import java.lang.reflect.InvocationTargetException;
2022-01-04 03:04:39 +00:00
import java.util.List;
2022-03-19 19:27:55 +00:00
import java.util.Set;
2022-01-04 03:04:39 +00:00
2022-04-17 05:27:04 +00:00
public class ListenerHandler implements PlexBase
{
public ListenerHandler()
{
2022-04-19 20:19:55 +00:00
Set<Class<? extends PlexListener>> listenerSet = ReflectionsUtil.getClassesBySubType("dev.plex.listener.impl", PlexListener.class);
2021-06-20 08:02:07 +00:00
List<PlexListener> listeners = Lists.newArrayList();
2022-03-19 19:27:55 +00:00
listenerSet.forEach(clazz ->
2022-03-19 01:12:05 +00:00
{
2022-03-19 19:27:55 +00:00
try
{
if (clazz.isAnnotationPresent(Toggleable.class))
2022-03-19 19:27:55 +00:00
{
Toggleable annotation = clazz.getDeclaredAnnotation(Toggleable.class);
if (plugin.config.get(annotation.value()) != null && plugin.config.getBoolean(annotation.value()))
2022-03-19 19:27:55 +00:00
{
listeners.add(clazz.getConstructor().newInstance());
}
}
else
{
listeners.add(clazz.getConstructor().newInstance());
}
}
2022-04-13 02:22:17 +00:00
catch (InvocationTargetException | InstantiationException | IllegalAccessException |
NoSuchMethodException ex)
2022-03-19 19:27:55 +00:00
{
PlexLog.error("Failed to register " + clazz.getSimpleName() + " as a listener!");
}
});
PlexLog.log(String.format("Registered %s listeners from %s classes!", listeners.size(), listenerSet.size()));
}
}