private static Listener getRegisteredListener(Listener listener) { RegisteredListener[] registeredListeners = PlayerMoveEvent.getHandlerList().getRegisteredListeners(); for (RegisteredListener registeredListener : registeredListeners) { if (registeredListener.getListener() == listener) { return listener; } } return null; }
/** * Registers all the events in the given listener class. * * @param listener - listener to register * @param plugin - plugin to register */ public void registerEvents(Listener listener, Plugin plugin) { if (!plugin.isEnabled()) throw new IllegalPluginAccessException( "Plugin attempted to register " + listener + " while not enabled"); // Just in case Bukkit decides to validate the parameters in the future EventExecutor nullExecutor = (arg0, arg1) -> { throw new IllegalStateException("This method should never be called!"); }; for (Entry<Class<? extends Event>, Set<RegisteredListener>> entry : plugin.getPluginLoader().createRegisteredListeners(listener, plugin).entrySet()) { Collection<RegisteredListener> listeners = entry.getValue(); Collection<RegisteredListener> modified = Lists.newArrayList(); // Use our plugin specific logger instead for (final RegisteredListener delegate : listeners) { RegisteredListener customListener = new RegisteredListener( delegate.getListener(), nullExecutor, delegate.getPriority(), delegate.getPlugin(), delegate.isIgnoringCancelled()) { @Override public void callEvent(Event event) throws EventException { try { delegate.callEvent(event); } catch (AuthorNagException e) { // Let Bukkit handle that one throw e; } catch (Throwable e) { customHandler(event, e); } } }; modified.add(customListener); } getEventListeners(getRegistrationClass(entry.getKey())).registerAll(modified); } }
@Override public boolean canTeleport(Location loc) { org.bukkit.Location to = BukkitUtil.getLocation(loc); org.bukkit.Location from = this.player.getLocation(); PlayerTeleportEvent event = new PlayerTeleportEvent(this.player, from, to); RegisteredListener[] listeners = event.getHandlers().getRegisteredListeners(); for (RegisteredListener listener : listeners) { if ("PlotSquared".equals(listener.getPlugin().getName())) { continue; } try { listener.callEvent(event); } catch (EventException e) { e.printStackTrace(); } } if (event.isCancelled() || !event.getTo().equals(to)) { return false; } event = new PlayerTeleportEvent(this.player, to, from); for (RegisteredListener listener : listeners) { if ("PlotSquared".equals(listener.getPlugin().getName())) { continue; } try { listener.callEvent(event); } catch (EventException e) { e.printStackTrace(); } } return true; }
public static void call(Event event, EventPriority priority) { for (RegisteredListener registration : event.getHandlers().getRegisteredListeners(priority)) { if (!registration.getPlugin().isEnabled()) { continue; } try { registration.callEvent(event); } catch (AuthorNagException ex) { Plugin plugin = registration.getPlugin(); if (plugin.isNaggable()) { plugin.setNaggable(false); Pore.getServer() .getLogger() .log( Level.SEVERE, String.format( "Nag author(s): '%s' of '%s' about the following: %s", plugin.getDescription().getAuthors(), plugin.getDescription().getFullName(), ex.getMessage())); } } catch (EventException ex) { Pore.getServer() .getLogger() .log( Level.SEVERE, "Could not pass event " + event.getEventName() + " to " + registration.getPlugin().getDescription().getFullName(), ex); } } }