diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java index 15e25a6a..ed34a264 100644 --- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java +++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java @@ -4,10 +4,12 @@ package org.bukkit.plugin; import java.io.File; import java.lang.reflect.Constructor; import java.util.ArrayList; +import java.util.Comparator; import java.util.EnumMap; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.PriorityQueue; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; @@ -27,7 +29,7 @@ public final class SimplePluginManager implements PluginManager { private final Map fileAssociations = new HashMap(); private final List plugins = new ArrayList(); private final Map lookupNames = new HashMap(); - private final Map> listeners = new EnumMap>(Event.Type.class); + private final Map> listeners = new EnumMap>(Event.Type.class); public SimplePluginManager(Server instance) { server = instance; @@ -187,7 +189,7 @@ public final class SimplePluginManager implements PluginManager { * @param event Event details */ public void callEvent(Event event) { - List eventListeners = listeners.get(event.getType()); + PriorityQueue eventListeners = listeners.get(event.getType()); if (eventListeners != null) { for (RegisteredListener registration : eventListeners) { @@ -214,22 +216,20 @@ public final class SimplePluginManager implements PluginManager { * @param plugin Plugin to register */ public void registerEvent(Event.Type type, Listener listener, Priority priority, Plugin plugin) { - List eventListeners = listeners.get(type); + PriorityQueue eventListeners = listeners.get(type); int position = 0; - if (eventListeners != null) { - for (RegisteredListener registration : eventListeners) { - if (registration.getPriority().compareTo(priority) < 0) { - break; - } - - position++; - } - } else { - eventListeners = new ArrayList(); + if (eventListeners == null) { + eventListeners = new PriorityQueue(11, + new Comparator( ) { + public int compare(RegisteredListener i, RegisteredListener j) { + return i.getPriority().compareTo(j.getPriority()); + } + } + ); listeners.put(type, eventListeners); } - eventListeners.add(position, new RegisteredListener(listener, priority, plugin)); + eventListeners.offer(new RegisteredListener(listener, priority, plugin)); } }