Minor changes to DebugListener.

Also prints the class names of all registered listeners now.
master
blablubbabc 2019-07-26 05:57:35 +02:00
parent cf89a2cb6f
commit 87c9c0dc41
3 changed files with 20 additions and 12 deletions

View File

@ -288,8 +288,10 @@ public class SKShopkeepersPlugin extends JavaPlugin implements ShopkeepersPlugin
// register debug listener:
// run delayed to also catch events / event listeners of other plugins:
Bukkit.getScheduler().runTaskLater(this, () -> {
if (Settings.debugOptions.contains("log-all-events") || Settings.debugOptions.contains("print-listeners")) {
DebugListener.register();
boolean logAllEvent = Settings.debugOptions.contains("log-all-events");
boolean printListeners = Settings.debugOptions.contains("print-listeners");
if (logAllEvent || printListeners) {
DebugListener.register(logAllEvent, printListeners);
}
}, 10L);
}

View File

@ -13,15 +13,13 @@ import org.bukkit.plugin.EventExecutor;
import org.bukkit.plugin.RegisteredListener;
import com.nisovin.shopkeepers.SKShopkeepersPlugin;
import com.nisovin.shopkeepers.Settings;
public class DebugListener implements Listener {
public static void register() {
public static DebugListener register(boolean logAllEvents, boolean printListeners) {
// TODO might only log events whose classes got loaded yet (eg. with registered listeners).
// TODO quite spammy. Filter/Reduce spamming events output.
Log.info("Registering DebugListener to log all events!");
DebugListener debugListener = new DebugListener();
Log.info("Registering DebugListener.");
DebugListener debugListener = new DebugListener(logAllEvents, printListeners);
List<HandlerList> allHandlerLists = HandlerList.getHandlerLists();
for (HandlerList handlerList : allHandlerLists) {
handlerList.register(new RegisteredListener(debugListener, new EventExecutor() {
@ -31,6 +29,7 @@ public class DebugListener implements Listener {
}
}, EventPriority.LOWEST, SKShopkeepersPlugin.getInstance(), false));
}
return debugListener;
}
private static class EventData {
@ -41,13 +40,19 @@ public class DebugListener implements Listener {
private String lastLoggedEvent = null;
private int lastLoggedEventCounter = 0;
private boolean logAllEvents = Settings.debugOptions.contains("log-all-events");
private boolean printListeners = Settings.debugOptions.contains("print-listeners");
private final boolean logAllEvents;
private final boolean printListeners;
DebugListener() {
private DebugListener(boolean logAllEvents, boolean printListeners) {
this.logAllEvents = logAllEvents;
this.printListeners = printListeners;
}
public void handleEvent(Event event) {
public void unregister() {
HandlerList.unregisterAll(this);
}
private void handleEvent(Event event) {
String eventName = event.getEventName();
EventData data = eventData.get(eventName);
if (data == null) {

View File

@ -49,7 +49,8 @@ public final class Utils {
HandlerList handlerList = event.getHandlers();
Log.info("Registered listeners for event " + event.getEventName() + ":");
for (RegisteredListener rl : handlerList.getRegisteredListeners()) {
Log.info(" - " + rl.getPlugin().getName() + ", priority: " + rl.getPriority() + ", ignoring cancelled: " + rl.isIgnoringCancelled());
Log.info(" - " + rl.getPlugin().getName() + " (" + rl.getListener().getClass().getName() + ")"
+ ", priority: " + rl.getPriority() + ", ignoring cancelled: " + rl.isIgnoringCancelled());
}
}