mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-06 00:07:56 +01:00
Event hooks were ordered in backwards order versus the expected way. To avoid sorting problems and manual sorting, changed priority to be handled by a PriorityQueue<>() rather than a manually sorted List().
Resolves issue 211 http://bugs.bukkit.org/issues/211 By: mcasper <mcasper@FLARE>
This commit is contained in:
parent
4676f99999
commit
14009cb350
@ -4,10 +4,12 @@ package org.bukkit.plugin;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.PriorityQueue;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
@ -27,7 +29,7 @@ public final class SimplePluginManager implements PluginManager {
|
|||||||
private final Map<Pattern, PluginLoader> fileAssociations = new HashMap<Pattern, PluginLoader>();
|
private final Map<Pattern, PluginLoader> fileAssociations = new HashMap<Pattern, PluginLoader>();
|
||||||
private final List<Plugin> plugins = new ArrayList<Plugin>();
|
private final List<Plugin> plugins = new ArrayList<Plugin>();
|
||||||
private final Map<String, Plugin> lookupNames = new HashMap<String, Plugin>();
|
private final Map<String, Plugin> lookupNames = new HashMap<String, Plugin>();
|
||||||
private final Map<Event.Type, List<RegisteredListener>> listeners = new EnumMap<Event.Type, List<RegisteredListener>>(Event.Type.class);
|
private final Map<Event.Type, PriorityQueue<RegisteredListener>> listeners = new EnumMap<Event.Type, PriorityQueue<RegisteredListener>>(Event.Type.class);
|
||||||
|
|
||||||
public SimplePluginManager(Server instance) {
|
public SimplePluginManager(Server instance) {
|
||||||
server = instance;
|
server = instance;
|
||||||
@ -187,7 +189,7 @@ public final class SimplePluginManager implements PluginManager {
|
|||||||
* @param event Event details
|
* @param event Event details
|
||||||
*/
|
*/
|
||||||
public void callEvent(Event event) {
|
public void callEvent(Event event) {
|
||||||
List<RegisteredListener> eventListeners = listeners.get(event.getType());
|
PriorityQueue<RegisteredListener> eventListeners = listeners.get(event.getType());
|
||||||
|
|
||||||
if (eventListeners != null) {
|
if (eventListeners != null) {
|
||||||
for (RegisteredListener registration : eventListeners) {
|
for (RegisteredListener registration : eventListeners) {
|
||||||
@ -214,22 +216,20 @@ public final class SimplePluginManager implements PluginManager {
|
|||||||
* @param plugin Plugin to register
|
* @param plugin Plugin to register
|
||||||
*/
|
*/
|
||||||
public void registerEvent(Event.Type type, Listener listener, Priority priority, Plugin plugin) {
|
public void registerEvent(Event.Type type, Listener listener, Priority priority, Plugin plugin) {
|
||||||
List<RegisteredListener> eventListeners = listeners.get(type);
|
PriorityQueue<RegisteredListener> eventListeners = listeners.get(type);
|
||||||
int position = 0;
|
int position = 0;
|
||||||
|
|
||||||
if (eventListeners != null) {
|
if (eventListeners == null) {
|
||||||
for (RegisteredListener registration : eventListeners) {
|
eventListeners = new PriorityQueue<RegisteredListener>(11,
|
||||||
if (registration.getPriority().compareTo(priority) < 0) {
|
new Comparator<RegisteredListener>( ) {
|
||||||
break;
|
public int compare(RegisteredListener i, RegisteredListener j) {
|
||||||
}
|
return i.getPriority().compareTo(j.getPriority());
|
||||||
|
}
|
||||||
position++;
|
}
|
||||||
}
|
);
|
||||||
} else {
|
|
||||||
eventListeners = new ArrayList<RegisteredListener>();
|
|
||||||
listeners.put(type, eventListeners);
|
listeners.put(type, eventListeners);
|
||||||
}
|
}
|
||||||
|
|
||||||
eventListeners.add(position, new RegisteredListener(listener, priority, plugin));
|
eventListeners.offer(new RegisteredListener(listener, priority, plugin));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user