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);
    }
  }
예제 #3
0
 @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;
 }
예제 #4
0
  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);
      }
    }
  }