Refactored event calling so its front loading avoiding the lookup for each event call.

This now uses an annoymous class implementing IExecutor that facilitates direct event method handler calling

Changed commands from being executed exclusively by a player to by a CommandSender to facilitate external command callers such as rcon

Fixed CustomEventListener

Merged in additional events

Added getFullName to PluginDescriptionFile which returns the combination of Name and Version

There's also a few bits of reformatting as it seems someones been editing with either tabs or dos eol :(

By: stevenh <steven.hartland@multiplay.co.uk>
This commit is contained in:
Bukkit/Spigot
2011-01-29 16:23:56 +00:00
parent 9755073204
commit df05c36540
18 changed files with 534 additions and 361 deletions

View File

@ -193,15 +193,11 @@ public final class SimplePluginManager implements PluginManager {
if (eventListeners != null) {
for (RegisteredListener registration : eventListeners) {
Plugin plugin = registration.getPlugin();
PluginLoader loader = plugin.getPluginLoader();
if (plugin.isEnabled()) {
try {
loader.callEvent(registration, event);
} catch (Throwable ex) {
Logger.getLogger(SimplePluginManager.class.getName()).log(Level.SEVERE, "Could not pass event " + event.getType() + " to " + plugin.getDescription().getName(), ex);
}
// NOTE: no need to check isEnabled as all disabled plugins have their listeners disabled
try {
registration.callEvent( event );
} catch (Throwable ex) {
Logger.getLogger(SimplePluginManager.class.getName()).log(Level.SEVERE, "Could not pass event " + event.getType() + " to " + registration.getPlugin().getDescription().getName(), ex);
}
}
}
@ -216,19 +212,43 @@ 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));
}
/**
* Registers the given event to the specified listener
*
* @param type EventType to register
* @param listener PlayerListener to register
* @param priority Priority of this event
* @param plugin Plugin to register
*/
public void registerEvent(Event.Type type, Listener listener, IExecutor executor, Priority priority, Plugin plugin) {
getEventListeners( type ).offer(new RegisteredListener(listener, executor, priority, plugin));
}
/**
* Returns a PriorityQueue 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
*/
private PriorityQueue<RegisteredListener> getEventListeners( Event.Type type )
{
PriorityQueue<RegisteredListener> eventListeners = listeners.get(type);
if (eventListeners == null) {
eventListeners = new PriorityQueue<RegisteredListener>(11,
new Comparator<RegisteredListener>( ) {
public int compare(RegisteredListener i, RegisteredListener j) {
return i.getPriority().compareTo(j.getPriority());
}
}
);
listeners.put(type, eventListeners);
if (eventListeners != null) {
return eventListeners;
}
eventListeners.offer(new RegisteredListener(listener, priority, plugin));
eventListeners = new PriorityQueue<RegisteredListener>(
11, new Comparator<RegisteredListener>() {
public int compare(RegisteredListener i, RegisteredListener j) {
return i.getPriority().compareTo(j.getPriority());
}
}
);
listeners.put(type, eventListeners);
return eventListeners;
}
}