Search in sources :

Example 1 with EventExecutor

use of org.bukkit.plugin.EventExecutor in project HawkEye by oliverwoodings.

the class HawkEyeListener method registerEvents.

public final void registerEvents() {
    PluginManager pm = plugin.getServer().getPluginManager();
    Method[] methods = this.getClass().getDeclaredMethods();
    for (int i = 0; i < methods.length; i++) {
        final Method method = methods[i];
        final HawkEvent he = method.getAnnotation(HawkEvent.class);
        if (he == null)
            continue;
        boolean register = false;
        for (DataType dt : he.dataType()) {
            if (Config.isLogged(dt))
                register = true;
        }
        if (!register)
            continue;
        Class<?>[] params = method.getParameterTypes();
        if (!Event.class.isAssignableFrom(params[0]) || params.length != 1) {
            continue;
        }
        final Class<? extends Event> eventClass = params[0].asSubclass(Event.class);
        method.setAccessible(true);
        EventExecutor executor = new EventExecutor() {

            public void execute(Listener listener, Event event) throws EventException {
                try {
                    if (!eventClass.isAssignableFrom(event.getClass())) {
                        return;
                    }
                    Util.debug(DebugLevel.HIGH, "Calling event: " + event.getEventName());
                    method.invoke(listener, event);
                    Util.debug(DebugLevel.HIGH, "Event call complete: " + event.getEventName());
                } catch (Exception ex) {
                    throw new EventException(ex.getCause());
                }
            }
        };
        Util.debug("Registering listener for " + eventClass.getName());
        pm.registerEvent(eventClass, this, he.priority(), executor, plugin, he.ignoreCancelled());
    }
}
Also used : Listener(org.bukkit.event.Listener) EventException(org.bukkit.event.EventException) Method(java.lang.reflect.Method) EventException(org.bukkit.event.EventException) PluginManager(org.bukkit.plugin.PluginManager) EventExecutor(org.bukkit.plugin.EventExecutor) DataType(uk.co.oliwali.HawkEye.DataType) Event(org.bukkit.event.Event) HawkEvent(uk.co.oliwali.HawkEye.HawkEvent) HawkEvent(uk.co.oliwali.HawkEye.HawkEvent)

Example 2 with EventExecutor

use of org.bukkit.plugin.EventExecutor in project Bukkit by Bukkit.

the class JavaPluginLoader method createRegisteredListeners.

public Map<Class<? extends Event>, Set<RegisteredListener>> createRegisteredListeners(Listener listener, final Plugin plugin) {
    Validate.notNull(plugin, "Plugin can not be null");
    Validate.notNull(listener, "Listener can not be null");
    boolean useTimings = server.getPluginManager().useTimings();
    Map<Class<? extends Event>, Set<RegisteredListener>> ret = new HashMap<Class<? extends Event>, Set<RegisteredListener>>();
    Set<Method> methods;
    try {
        Method[] publicMethods = listener.getClass().getMethods();
        methods = new HashSet<Method>(publicMethods.length, Float.MAX_VALUE);
        for (Method method : publicMethods) {
            methods.add(method);
        }
        for (Method method : listener.getClass().getDeclaredMethods()) {
            methods.add(method);
        }
    } catch (NoClassDefFoundError e) {
        plugin.getLogger().severe("Plugin " + plugin.getDescription().getFullName() + " has failed to register events for " + listener.getClass() + " because " + e.getMessage() + " does not exist.");
        return ret;
    }
    for (final Method method : methods) {
        final EventHandler eh = method.getAnnotation(EventHandler.class);
        if (eh == null)
            continue;
        final Class<?> checkClass;
        if (method.getParameterTypes().length != 1 || !Event.class.isAssignableFrom(checkClass = method.getParameterTypes()[0])) {
            plugin.getLogger().severe(plugin.getDescription().getFullName() + " attempted to register an invalid EventHandler method signature \"" + method.toGenericString() + "\" in " + listener.getClass());
            continue;
        }
        final Class<? extends Event> eventClass = checkClass.asSubclass(Event.class);
        method.setAccessible(true);
        Set<RegisteredListener> eventSet = ret.get(eventClass);
        if (eventSet == null) {
            eventSet = new HashSet<RegisteredListener>();
            ret.put(eventClass, eventSet);
        }
        for (Class<?> clazz = eventClass; Event.class.isAssignableFrom(clazz); clazz = clazz.getSuperclass()) {
            // This loop checks for extending deprecated events
            if (clazz.getAnnotation(Deprecated.class) != null) {
                Warning warning = clazz.getAnnotation(Warning.class);
                WarningState warningState = server.getWarningState();
                if (!warningState.printFor(warning)) {
                    break;
                }
                plugin.getLogger().log(Level.WARNING, String.format("\"%s\" has registered a listener for %s on method \"%s\", but the event is Deprecated." + " \"%s\"; please notify the authors %s.", plugin.getDescription().getFullName(), clazz.getName(), method.toGenericString(), (warning != null && warning.reason().length() != 0) ? warning.reason() : "Server performance will be affected", Arrays.toString(plugin.getDescription().getAuthors().toArray())), warningState == WarningState.ON ? new AuthorNagException(null) : null);
                break;
            }
        }
        EventExecutor executor = new EventExecutor() {

            public void execute(Listener listener, Event event) throws EventException {
                try {
                    if (!eventClass.isAssignableFrom(event.getClass())) {
                        return;
                    }
                    method.invoke(listener, event);
                } catch (InvocationTargetException ex) {
                    throw new EventException(ex.getCause());
                } catch (Throwable t) {
                    throw new EventException(t);
                }
            }
        };
        if (useTimings) {
            eventSet.add(new TimedRegisteredListener(listener, executor, eh.priority(), plugin, eh.ignoreCancelled()));
        } else {
            eventSet.add(new RegisteredListener(listener, executor, eh.priority(), plugin, eh.ignoreCancelled()));
        }
    }
    return ret;
}
Also used : Warning(org.bukkit.Warning) HashSet(java.util.HashSet) Set(java.util.Set) WarningState(org.bukkit.Warning.WarningState) TimedRegisteredListener(org.bukkit.plugin.TimedRegisteredListener) Listener(org.bukkit.event.Listener) RegisteredListener(org.bukkit.plugin.RegisteredListener) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) EventHandler(org.bukkit.event.EventHandler) TimedRegisteredListener(org.bukkit.plugin.TimedRegisteredListener) TimedRegisteredListener(org.bukkit.plugin.TimedRegisteredListener) RegisteredListener(org.bukkit.plugin.RegisteredListener) AuthorNagException(org.bukkit.plugin.AuthorNagException) EventException(org.bukkit.event.EventException) Method(java.lang.reflect.Method) InvocationTargetException(java.lang.reflect.InvocationTargetException) EventExecutor(org.bukkit.plugin.EventExecutor) Event(org.bukkit.event.Event) PluginEnableEvent(org.bukkit.event.server.PluginEnableEvent) PluginDisableEvent(org.bukkit.event.server.PluginDisableEvent)

Example 3 with EventExecutor

use of org.bukkit.plugin.EventExecutor in project Essentials by drtshock.

the class EssentialsSpawn method onEnable.

@Override
public void onEnable() {
    final PluginManager pluginManager = getServer().getPluginManager();
    ess = (IEssentials) pluginManager.getPlugin("Essentials");
    if (!this.getDescription().getVersion().equals(ess.getDescription().getVersion())) {
        LOGGER.log(Level.WARNING, tl("versionMismatchAll"));
    }
    if (!ess.isEnabled()) {
        this.setEnabled(false);
        return;
    }
    spawns = new SpawnStorage(ess);
    ess.addReloadListener(spawns);
    final EssentialsSpawnPlayerListener playerListener = new EssentialsSpawnPlayerListener(ess, spawns);
    pluginManager.registerEvent(PlayerRespawnEvent.class, playerListener, ess.getSettings().getRespawnPriority(), new EventExecutor() {

        @Override
        public void execute(final Listener ll, final Event event) throws EventException {
            ((EssentialsSpawnPlayerListener) ll).onPlayerRespawn((PlayerRespawnEvent) event);
        }
    }, this);
    pluginManager.registerEvent(PlayerJoinEvent.class, playerListener, ess.getSettings().getRespawnPriority(), new EventExecutor() {

        @Override
        public void execute(final Listener ll, final Event event) throws EventException {
            ((EssentialsSpawnPlayerListener) ll).onPlayerJoin((PlayerJoinEvent) event);
        }
    }, this);
}
Also used : PluginManager(org.bukkit.plugin.PluginManager) PlayerJoinEvent(org.bukkit.event.player.PlayerJoinEvent) EventExecutor(org.bukkit.plugin.EventExecutor) Listener(org.bukkit.event.Listener) EventException(org.bukkit.event.EventException) PlayerRespawnEvent(org.bukkit.event.player.PlayerRespawnEvent) PlayerJoinEvent(org.bukkit.event.player.PlayerJoinEvent) Event(org.bukkit.event.Event) PlayerRespawnEvent(org.bukkit.event.player.PlayerRespawnEvent)

Aggregations

Event (org.bukkit.event.Event)3 EventException (org.bukkit.event.EventException)3 Listener (org.bukkit.event.Listener)3 EventExecutor (org.bukkit.plugin.EventExecutor)3 Method (java.lang.reflect.Method)2 PluginManager (org.bukkit.plugin.PluginManager)2 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 LinkedHashMap (java.util.LinkedHashMap)1 Set (java.util.Set)1 Warning (org.bukkit.Warning)1 WarningState (org.bukkit.Warning.WarningState)1 EventHandler (org.bukkit.event.EventHandler)1 PlayerJoinEvent (org.bukkit.event.player.PlayerJoinEvent)1 PlayerRespawnEvent (org.bukkit.event.player.PlayerRespawnEvent)1 PluginDisableEvent (org.bukkit.event.server.PluginDisableEvent)1 PluginEnableEvent (org.bukkit.event.server.PluginEnableEvent)1 AuthorNagException (org.bukkit.plugin.AuthorNagException)1 RegisteredListener (org.bukkit.plugin.RegisteredListener)1