summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDinnerbone <dinnerbone@dinnerbone.com>2011-02-19 20:43:35 +0000
committerDinnerbone <dinnerbone@dinnerbone.com>2011-02-19 20:43:35 +0000
commiteb7d3710e1ddf3e092b1a1d29b74859a82cca52a (patch)
tree64335c67472c7c6facd391db2ecd56f464f22771 /src
parent361d8f2b9fdefc5565696d0ed90e6e166e5bca2b (diff)
downloadbukkit-eb7d3710e1ddf3e092b1a1d29b74859a82cca52a.tar
bukkit-eb7d3710e1ddf3e092b1a1d29b74859a82cca52a.tar.gz
bukkit-eb7d3710e1ddf3e092b1a1d29b74859a82cca52a.tar.lz
bukkit-eb7d3710e1ddf3e092b1a1d29b74859a82cca52a.tar.xz
bukkit-eb7d3710e1ddf3e092b1a1d29b74859a82cca52a.zip
Fixed event priorities
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/bukkit/plugin/RegisteredListener.java1
-rw-r--r--src/main/java/org/bukkit/plugin/SimplePluginManager.java40
2 files changed, 22 insertions, 19 deletions
diff --git a/src/main/java/org/bukkit/plugin/RegisteredListener.java b/src/main/java/org/bukkit/plugin/RegisteredListener.java
index fc2f53bb..b281f292 100644
--- a/src/main/java/org/bukkit/plugin/RegisteredListener.java
+++ b/src/main/java/org/bukkit/plugin/RegisteredListener.java
@@ -3,7 +3,6 @@ package org.bukkit.plugin;
import org.bukkit.event.Event;
import org.bukkit.event.Listener;
-import org.bukkit.plugin.EventExecutor;
/**
* Stores relevant information for plugin listeners
diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
index 2af45672..1b612788 100644
--- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java
+++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
@@ -9,8 +9,9 @@ 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.SortedSet;
+import java.util.TreeSet;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
@@ -29,7 +30,18 @@ public final class SimplePluginManager implements PluginManager {
private final Map<Pattern, PluginLoader> fileAssociations = new HashMap<Pattern, PluginLoader>();
private final List<Plugin> plugins = new ArrayList<Plugin>();
private final Map<String, Plugin> lookupNames = new HashMap<String, Plugin>();
- private final Map<Event.Type, PriorityQueue<RegisteredListener>> listeners = new EnumMap<Event.Type, PriorityQueue<RegisteredListener>>(Event.Type.class);
+ private final Map<Event.Type, SortedSet<RegisteredListener>> listeners = new EnumMap<Event.Type, SortedSet<RegisteredListener>>(Event.Type.class);
+ private final Comparator<RegisteredListener> comparer = new Comparator<RegisteredListener>() {
+ public int compare(RegisteredListener i, RegisteredListener j) {
+ int result = i.getPriority().compareTo(j.getPriority());
+
+ if ((result == 0) && (i != j)) {
+ result = 1;
+ }
+
+ return result;
+ }
+ };
public SimplePluginManager(Server instance) {
server = instance;
@@ -205,11 +217,10 @@ public final class SimplePluginManager implements PluginManager {
* @param event Event details
*/
public void callEvent(Event event) {
- PriorityQueue<RegisteredListener> eventListeners = listeners.get(event.getType());
+ SortedSet<RegisteredListener> eventListeners = listeners.get(event.getType());
if (eventListeners != null) {
for (RegisteredListener registration : eventListeners) {
- // NOTE: no need to check isEnabled as all disabled plugins have their listeners disabled
try {
registration.callEvent( event );
} catch (Throwable ex) {
@@ -228,7 +239,7 @@ public final class SimplePluginManager implements PluginManager {
* @param plugin Plugin to register
*/
public void registerEvent(Event.Type type, Listener listener, Priority priority, Plugin plugin) {
- getEventListeners( type ).offer(new RegisteredListener(listener, priority, plugin, type));
+ getEventListeners( type ).add(new RegisteredListener(listener, priority, plugin, type));
}
/**
@@ -241,30 +252,23 @@ public final class SimplePluginManager implements PluginManager {
* @param plugin Plugin to register
*/
public void registerEvent(Event.Type type, Listener listener, EventExecutor executor, Priority priority, Plugin plugin) {
- getEventListeners( type ).offer(new RegisteredListener(listener, executor, priority, plugin));
+ getEventListeners( type ).add(new RegisteredListener(listener, executor, priority, plugin));
}
/**
- * Returns a PriorityQueue of RegisteredListener for the specified event type creating a new queue if needed
+ * Returns a SortedSet of RegisteredListener for the specified event type creating a new queue if needed
*
* @param type EventType to lookup
- * @return PriorityQueue<RegisteredListener> the looked up or create queue matching the requested type
+ * @return SortedSet<RegisteredListener> the looked up or create queue matching the requested type
*/
- private PriorityQueue<RegisteredListener> getEventListeners( Event.Type type )
- {
- PriorityQueue<RegisteredListener> eventListeners = listeners.get(type);
+ private SortedSet<RegisteredListener> getEventListeners(Event.Type type) {
+ SortedSet<RegisteredListener> eventListeners = listeners.get(type);
if (eventListeners != null) {
return eventListeners;
}
- eventListeners = new PriorityQueue<RegisteredListener>(
- 11, new Comparator<RegisteredListener>() {
- public int compare(RegisteredListener i, RegisteredListener j) {
- return i.getPriority().compareTo(j.getPriority());
- }
- }
- );
+ eventListeners = new TreeSet<RegisteredListener>(comparer);
listeners.put(type, eventListeners);
return eventListeners;
}