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:
@@ -4,7 +4,7 @@ package org.bukkit.plugin;
|
||||
import java.io.File;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.util.config.Configuration;
|
||||
|
||||
/**
|
||||
@@ -14,21 +14,21 @@ public interface Plugin {
|
||||
/**
|
||||
* Returns the folder that the plugin data's files are located in. The
|
||||
* folder may not yet exist.
|
||||
*
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public File getDataFolder();
|
||||
|
||||
|
||||
/**
|
||||
* Returns the plugin.yaml file containing the details for this plugin
|
||||
*
|
||||
* @return Contents of the plugin.yaml file
|
||||
*/
|
||||
public PluginDescriptionFile getDescription();
|
||||
|
||||
|
||||
/**
|
||||
* Returns the main configuration file. It should be loaded.
|
||||
*
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Configuration getConfiguration();
|
||||
@@ -63,11 +63,11 @@ public interface Plugin {
|
||||
* Called when this plugin is enabled
|
||||
*/
|
||||
public void onEnable();
|
||||
|
||||
|
||||
/**
|
||||
* Called when a command registered by this plugin is received.
|
||||
* @param commandLabel
|
||||
* @param commandLabel
|
||||
* @return TODO
|
||||
*/
|
||||
public boolean onCommand(Player player, Command command, String commandLabel, String[] args);
|
||||
public boolean onCommand(CommandSender sender, Command command, String commandLabel, String[] args);
|
||||
}
|
||||
|
||||
@@ -77,6 +77,15 @@ public final class PluginDescriptionFile {
|
||||
return version;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of a plugin including the version
|
||||
*
|
||||
* @return String name
|
||||
*/
|
||||
public String getFullName() {
|
||||
return name + " v" + version;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the main class for a plugin
|
||||
*
|
||||
@@ -85,7 +94,7 @@ public final class PluginDescriptionFile {
|
||||
public String getMain() {
|
||||
return main;
|
||||
}
|
||||
|
||||
|
||||
public Object getCommands() {
|
||||
return commands;
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import java.io.File;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
/**
|
||||
* Represents a plugin loader, which handles direct access to specific types
|
||||
@@ -27,13 +28,12 @@ public interface PluginLoader {
|
||||
public Pattern[] getPluginFileFilters();
|
||||
|
||||
/**
|
||||
* Calls a player related event with the given details
|
||||
* Creates and returns an event executor
|
||||
*
|
||||
* @param registration Registered information on the plugin to call about this event
|
||||
* @param type Type of player related event to call
|
||||
* @param event Event details
|
||||
* @param type Type of the event executor to create
|
||||
* @param listener the object that will handle the eventual call back
|
||||
*/
|
||||
public void callEvent(RegisteredListener registration, Event event);
|
||||
public IExecutor createExecutor(Event.Type type, Listener listener);
|
||||
|
||||
/**
|
||||
* Enables the specified plugin
|
||||
|
||||
@@ -93,6 +93,17 @@ public interface PluginManager {
|
||||
*/
|
||||
public void registerEvent(Event.Type type, Listener listener, Priority priority, Plugin plugin);
|
||||
|
||||
/**
|
||||
* Registers the given event to the specified executor
|
||||
*
|
||||
* @param type EventType to register
|
||||
* @param listener Listener to register
|
||||
* @param executor IExecutor 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);
|
||||
|
||||
/**
|
||||
* Enables the specified plugin
|
||||
*
|
||||
|
||||
@@ -3,6 +3,7 @@ package org.bukkit.plugin;
|
||||
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.plugin.IExecutor;
|
||||
|
||||
/**
|
||||
* Stores relevant information for plugin listeners
|
||||
@@ -11,11 +12,20 @@ public class RegisteredListener {
|
||||
private final Listener listener;
|
||||
private final Event.Priority priority;
|
||||
private final Plugin plugin;
|
||||
private final IExecutor executor;
|
||||
|
||||
public RegisteredListener(final Listener pluginListener, final Event.Priority eventPriority, final Plugin registeredPlugin) {
|
||||
public RegisteredListener(final Listener pluginListener, final IExecutor eventExecutor, final Event.Priority eventPriority, final Plugin registeredPlugin ) {
|
||||
listener = pluginListener;
|
||||
priority = eventPriority;
|
||||
plugin = registeredPlugin;
|
||||
executor = eventExecutor;
|
||||
}
|
||||
|
||||
public RegisteredListener(final Listener pluginListener, final Event.Priority eventPriority, final Plugin registeredPlugin, Event.Type type ) {
|
||||
listener = pluginListener;
|
||||
priority = eventPriority;
|
||||
plugin = registeredPlugin;
|
||||
executor = registeredPlugin.getPluginLoader().createExecutor( type, pluginListener );
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -41,4 +51,12 @@ public class RegisteredListener {
|
||||
public Event.Priority getPriority() {
|
||||
return priority;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calls the event executor
|
||||
* @return Registered Priority
|
||||
*/
|
||||
public void callEvent(Event event) {
|
||||
executor.execute( listener, event );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ package org.bukkit.plugin.java;
|
||||
import java.io.File;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.PluginDescriptionFile;
|
||||
import org.bukkit.plugin.PluginLoader;
|
||||
@@ -49,7 +49,7 @@ public abstract class JavaPlugin implements Plugin {
|
||||
/**
|
||||
* Returns the folder that the plugin data's files are located in. The
|
||||
* folder may not yet exist.
|
||||
*
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public File getDataFolder() {
|
||||
@@ -100,13 +100,13 @@ public abstract class JavaPlugin implements Plugin {
|
||||
public PluginDescriptionFile getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the main configuration located at
|
||||
* <plugin name>/config.yml and loads the file. If the configuration file
|
||||
* does not exist and it cannot be loaded, no error will be emitted and
|
||||
* the configuration file will have no values.
|
||||
*
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Configuration getConfiguration() {
|
||||
@@ -138,11 +138,11 @@ public abstract class JavaPlugin implements Plugin {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called when a command registered by this plugin is received.
|
||||
*/
|
||||
public boolean onCommand(Player player, Command cmd, String commandLabel, String[] args) {
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
||||
return false; // default implementation: do nothing!
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,16 +16,9 @@ import org.bukkit.event.CustomEventListener;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.*;
|
||||
import org.bukkit.event.entity.EntityCombustEvent;
|
||||
import org.bukkit.event.entity.EntityDamageByBlockEvent;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.entity.EntityDamageByProjectileEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||
import org.bukkit.event.entity.EntityListener;
|
||||
import org.bukkit.event.entity.*;
|
||||
import org.bukkit.event.player.*;
|
||||
import org.bukkit.event.server.PluginEvent;
|
||||
import org.bukkit.event.server.ServerListener;
|
||||
import org.bukkit.event.server.*;
|
||||
import org.bukkit.event.vehicle.*;
|
||||
import org.bukkit.event.world.ChunkLoadEvent;
|
||||
import org.bukkit.event.world.ChunkUnloadEvent;
|
||||
@@ -77,7 +70,7 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
Class<?> jarClass = Class.forName(description.getMain(), true, loader);
|
||||
Class<? extends JavaPlugin> plugin = jarClass.asSubclass(JavaPlugin.class);
|
||||
Constructor<? extends JavaPlugin> constructor = plugin.getConstructor(PluginLoader.class, Server.class, PluginDescriptionFile.class, File.class, File.class, ClassLoader.class);
|
||||
|
||||
|
||||
result = constructor.newInstance(this, server, description, dataFolder, file, loader);
|
||||
} catch (Throwable ex) {
|
||||
throw new InvalidPluginException(ex);
|
||||
@@ -85,13 +78,13 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
|
||||
return (Plugin)result;
|
||||
}
|
||||
|
||||
|
||||
private File getDataFolder(File file) {
|
||||
File dataFolder = null;
|
||||
|
||||
|
||||
String filename = file.getName();
|
||||
int index = file.getName().lastIndexOf(".");
|
||||
|
||||
|
||||
if (index != -1) {
|
||||
String name = filename.substring(0, index);
|
||||
dataFolder = new File(file.getParentFile(), name);
|
||||
@@ -100,9 +93,9 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
// Using _ to prevent name collision
|
||||
dataFolder = new File(file.getParentFile(), filename + "_");
|
||||
}
|
||||
|
||||
|
||||
//dataFolder.mkdirs();
|
||||
|
||||
|
||||
return dataFolder;
|
||||
}
|
||||
|
||||
@@ -118,158 +111,238 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
classes.put(name, clazz);
|
||||
}
|
||||
|
||||
public void callEvent(RegisteredListener registration, Event event) {
|
||||
Listener listener = registration.getListener();
|
||||
public IExecutor createExecutor( Event.Type type, Listener listener ) {
|
||||
// TODO: remove multiple Listener type and hence casts
|
||||
switch (type) {
|
||||
// Player Events
|
||||
case PLAYER_JOIN:
|
||||
return new IExecutor() {
|
||||
public void execute( Listener listener, Event event ) {
|
||||
((PlayerListener)listener).onPlayerJoin( (PlayerEvent)event );
|
||||
}
|
||||
};
|
||||
case PLAYER_QUIT:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((PlayerListener)listener).onPlayerQuit( (PlayerEvent)event );
|
||||
}
|
||||
};
|
||||
case PLAYER_COMMAND:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((PlayerListener)listener).onPlayerCommand( (PlayerChatEvent)event );
|
||||
}
|
||||
};
|
||||
case PLAYER_CHAT:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((PlayerListener)listener).onPlayerChat( (PlayerChatEvent)event );
|
||||
}
|
||||
};
|
||||
case PLAYER_MOVE:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((PlayerListener)listener).onPlayerMove( (PlayerMoveEvent)event );
|
||||
}
|
||||
};
|
||||
case PLAYER_TELEPORT:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((PlayerListener)listener).onPlayerTeleport( (PlayerMoveEvent)event );
|
||||
}
|
||||
};
|
||||
case PLAYER_ITEM:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((PlayerListener)listener).onPlayerItem( (PlayerItemEvent)event );
|
||||
}
|
||||
};
|
||||
case PLAYER_LOGIN:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((PlayerListener)listener).onPlayerLogin( (PlayerLoginEvent)event );
|
||||
}
|
||||
};
|
||||
case PLAYER_EGG_THROW:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((PlayerListener)listener).onPlayerEggThrow( (PlayerEggThrowEvent)event );
|
||||
}
|
||||
};
|
||||
case PLAYER_ANIMATION:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((PlayerListener)listener).onPlayerAnimation( (PlayerAnimationEvent)event );
|
||||
}
|
||||
};
|
||||
|
||||
if (listener instanceof PlayerListener) {
|
||||
PlayerListener trueListener = (PlayerListener)listener;
|
||||
// Block Events
|
||||
case BLOCK_PHYSICS:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((BlockListener)listener).onBlockPhysics( (BlockPhysicsEvent)event );
|
||||
}
|
||||
};
|
||||
case BLOCK_CANBUILD:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((BlockListener)listener).onBlockCanBuild( (BlockCanBuildEvent)event );
|
||||
}
|
||||
};
|
||||
case BLOCK_RIGHTCLICKED:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((BlockListener)listener).onBlockRightClick( (BlockRightClickEvent)event );
|
||||
}
|
||||
};
|
||||
case BLOCK_PLACED:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((BlockListener)listener).onBlockPlace( (BlockPlaceEvent)event );
|
||||
}
|
||||
};
|
||||
case BLOCK_DAMAGED:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((BlockListener)listener).onBlockDamage( (BlockDamageEvent)event );
|
||||
}
|
||||
};
|
||||
case BLOCK_INTERACT:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((BlockListener)listener).onBlockInteract( (BlockInteractEvent)event );
|
||||
}
|
||||
};
|
||||
case BLOCK_FLOW:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((BlockListener)listener).onBlockFlow( (BlockFromToEvent)event );
|
||||
}
|
||||
};
|
||||
case LEAVES_DECAY:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((BlockListener)listener).onLeavesDecay( (LeavesDecayEvent)event );
|
||||
}
|
||||
};
|
||||
case BLOCK_IGNITE:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((BlockListener)listener).onBlockIgnite( (BlockIgniteEvent)event );
|
||||
}
|
||||
};
|
||||
case REDSTONE_CHANGE:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((BlockListener)listener).onBlockRedstoneChange( (BlockFromToEvent)event );
|
||||
}
|
||||
};
|
||||
|
||||
switch (event.getType()) {
|
||||
case PLAYER_JOIN:
|
||||
trueListener.onPlayerJoin((PlayerEvent)event);
|
||||
break;
|
||||
case PLAYER_QUIT:
|
||||
trueListener.onPlayerQuit((PlayerEvent)event);
|
||||
break;
|
||||
case PLAYER_COMMAND:
|
||||
trueListener.onPlayerCommand((PlayerChatEvent)event);
|
||||
break;
|
||||
case PLAYER_CHAT:
|
||||
trueListener.onPlayerChat((PlayerChatEvent)event);
|
||||
break;
|
||||
case PLAYER_MOVE:
|
||||
trueListener.onPlayerMove((PlayerMoveEvent)event);
|
||||
break;
|
||||
case PLAYER_TELEPORT:
|
||||
trueListener.onPlayerTeleport((PlayerMoveEvent)event);
|
||||
break;
|
||||
case PLAYER_ITEM:
|
||||
trueListener.onPlayerItem((PlayerItemEvent)event);
|
||||
break;
|
||||
case PLAYER_LOGIN:
|
||||
trueListener.onPlayerLogin((PlayerLoginEvent)event);
|
||||
break;
|
||||
case PLAYER_EGG_THROW:
|
||||
trueListener.onPlayerEggThrow((PlayerEggThrowEvent)event);
|
||||
break;
|
||||
case PLAYER_ANIMATION:
|
||||
trueListener.onPlayerAnimation((PlayerAnimationEvent)event);
|
||||
break;
|
||||
}
|
||||
} else if (listener instanceof BlockListener) {
|
||||
BlockListener trueListener = (BlockListener)listener;
|
||||
case BLOCK_BURN:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((BlockListener)listener).onBlockBurn( (BlockBurnEvent)event );
|
||||
}
|
||||
};
|
||||
|
||||
switch (event.getType()) {
|
||||
case BLOCK_PHYSICS:
|
||||
trueListener.onBlockPhysics((BlockPhysicsEvent)event);
|
||||
break;
|
||||
case BLOCK_CANBUILD:
|
||||
trueListener.onBlockCanBuild((BlockCanBuildEvent)event);
|
||||
break;
|
||||
case BLOCK_RIGHTCLICKED:
|
||||
trueListener.onBlockRightClick((BlockRightClickEvent) event);
|
||||
break;
|
||||
case BLOCK_PLACED:
|
||||
trueListener.onBlockPlace((BlockPlaceEvent)event);
|
||||
break;
|
||||
case BLOCK_DAMAGED:
|
||||
trueListener.onBlockDamage((BlockDamageEvent)event);
|
||||
break;
|
||||
case BLOCK_INTERACT:
|
||||
trueListener.onBlockInteract((BlockInteractEvent)event);
|
||||
break;
|
||||
case BLOCK_FLOW:
|
||||
trueListener.onBlockFlow((BlockFromToEvent)event);
|
||||
break;
|
||||
case LEAVES_DECAY:
|
||||
trueListener.onLeavesDecay((LeavesDecayEvent)event);
|
||||
break;
|
||||
case BLOCK_IGNITE:
|
||||
trueListener.onBlockIgnite((BlockIgniteEvent)event);
|
||||
break;
|
||||
case REDSTONE_CHANGE:
|
||||
trueListener.onBlockRedstoneChange((BlockFromToEvent)event);
|
||||
break;
|
||||
}
|
||||
} else if(listener instanceof ServerListener) {
|
||||
ServerListener trueListener = (ServerListener)listener;
|
||||
// Server Events
|
||||
case PLUGIN_ENABLE:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((ServerListener)listener).onPluginEnabled( (PluginEvent)event );
|
||||
}
|
||||
};
|
||||
case PLUGIN_DISABLE:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((ServerListener)listener).onPluginDisabled( (PluginEvent)event );
|
||||
}
|
||||
};
|
||||
|
||||
switch (event.getType()) {
|
||||
case PLUGIN_ENABLE:
|
||||
trueListener.onPluginEnabled((PluginEvent)event);
|
||||
break;
|
||||
case PLUGIN_DISABLE:
|
||||
trueListener.onPluginDisabled((PluginEvent)event);
|
||||
break;
|
||||
}
|
||||
} else if(listener instanceof WorldListener) {
|
||||
WorldListener trueListener = (WorldListener)listener;
|
||||
case SERVER_COMMAND:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((ServerListener)listener).onServerCommand( (ServerCommandEvent)event );
|
||||
}
|
||||
};
|
||||
|
||||
switch (event.getType()) {
|
||||
case CHUNK_LOADED:
|
||||
trueListener.onChunkLoaded((ChunkLoadEvent)event);
|
||||
break;
|
||||
case CHUNK_UNLOADED:
|
||||
trueListener.onChunkUnloaded((ChunkUnloadEvent)event);
|
||||
break;
|
||||
}
|
||||
} else if(listener instanceof EntityListener) {
|
||||
EntityListener trueListener = (EntityListener) listener;
|
||||
switch(event.getType())
|
||||
{
|
||||
case ENTITY_DAMAGEDBY_BLOCK:
|
||||
trueListener.onEntityDamageByBlock((EntityDamageByBlockEvent)event);
|
||||
break;
|
||||
case ENTITY_DAMAGEDBY_ENTITY:
|
||||
trueListener.onEntityDamageByEntity((EntityDamageByEntityEvent)event);
|
||||
break;
|
||||
case ENTITY_DAMAGEDBY_PROJECTILE:
|
||||
trueListener.onEntityDamageByProjectile((EntityDamageByProjectileEvent)event);
|
||||
break;
|
||||
case ENTITY_DAMAGED:
|
||||
trueListener.onEntityDamage((EntityDamageEvent)event);
|
||||
break;
|
||||
case ENTITY_DEATH:
|
||||
// TODO: ENTITY_DEATH hook
|
||||
break;
|
||||
case ENTITY_COMBUST:
|
||||
trueListener.onEntityCombust((EntityCombustEvent)event);
|
||||
break;
|
||||
case ENTITY_EXPLODE:
|
||||
trueListener.onEntityExplode((EntityExplodeEvent)event);
|
||||
break;
|
||||
}
|
||||
} else if (listener instanceof VehicleListener) {
|
||||
VehicleListener trueListener = (VehicleListener)listener;
|
||||
// World Events
|
||||
case CHUNK_LOADED:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((WorldListener)listener).onChunkLoaded( (ChunkLoadEvent)event );
|
||||
}
|
||||
};
|
||||
case CHUNK_UNLOADED:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((WorldListener)listener).onChunkUnloaded( (ChunkUnloadEvent)event );
|
||||
}
|
||||
};
|
||||
|
||||
switch (event.getType()) {
|
||||
case VEHICLE_CREATE:
|
||||
trueListener.onVehicleCreate((VehicleCreateEvent)event);
|
||||
break;
|
||||
case VEHICLE_DAMAGE:
|
||||
trueListener.onVehicleDamage((VehicleDamageEvent)event);
|
||||
break;
|
||||
case VEHICLE_COLLISION_BLOCK:
|
||||
trueListener.onVehicleBlockCollision((VehicleBlockCollisionEvent)event);
|
||||
break;
|
||||
case VEHICLE_COLLISION_ENTITY:
|
||||
trueListener.onVehicleEntityCollision((VehicleEntityCollisionEvent)event);
|
||||
break;
|
||||
case VEHICLE_ENTER:
|
||||
trueListener.onVehicleEnter((VehicleEnterEvent)event);
|
||||
break;
|
||||
case VEHICLE_EXIT:
|
||||
trueListener.onVehicleExit((VehicleExitEvent)event);
|
||||
break;
|
||||
case VEHICLE_MOVE:
|
||||
trueListener.onVehicleMove((VehicleMoveEvent)event);
|
||||
break;
|
||||
}
|
||||
} else if(listener instanceof CustomEventListener) {
|
||||
if(event.getType()==Event.Type.CUSTOM_EVENT) {
|
||||
((CustomEventListener)listener).onCustomEvent(event);
|
||||
}
|
||||
// Entity Events
|
||||
case ENTITY_DAMAGEDBY_BLOCK:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((EntityListener)listener).onEntityDamageByBlock( (EntityDamageByBlockEvent)event );
|
||||
}
|
||||
};
|
||||
case ENTITY_DAMAGEDBY_ENTITY:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((EntityListener)listener).onEntityDamageByEntity( (EntityDamageByEntityEvent)event );
|
||||
}
|
||||
};
|
||||
case ENTITY_DAMAGEDBY_PROJECTILE:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((EntityListener)listener).onEntityDamageByProjectile( (EntityDamageByProjectileEvent)event );
|
||||
}
|
||||
};
|
||||
case ENTITY_DAMAGED:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((EntityListener)listener).onEntityDamage( (EntityDamageEvent)event );
|
||||
}
|
||||
};
|
||||
case ENTITY_DEATH:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((EntityListener)listener).onEntityDeath( (EntityDeathEvent)event );
|
||||
}
|
||||
};
|
||||
case ENTITY_COMBUST:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((EntityListener)listener).onEntityCombust( (EntityCombustEvent)event );
|
||||
}
|
||||
};
|
||||
case ENTITY_EXPLODE:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((EntityListener)listener).onEntityExplode( (EntityExplodeEvent)event );
|
||||
}
|
||||
};
|
||||
case ENTITY_TARGET:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((EntityListener)listener).onEntityTarget( (EntityTargetEvent)event );
|
||||
}
|
||||
};
|
||||
|
||||
// Vehicle Events
|
||||
case VEHICLE_CREATE:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((VehicleListener)listener).onVehicleCreate( (VehicleCreateEvent)event );
|
||||
}
|
||||
};
|
||||
case VEHICLE_DAMAGE:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((VehicleListener)listener).onVehicleDamage( (VehicleDamageEvent)event );
|
||||
}
|
||||
};
|
||||
case VEHICLE_COLLISION_BLOCK:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((VehicleListener)listener).onVehicleBlockCollision( (VehicleBlockCollisionEvent)event );
|
||||
}
|
||||
};
|
||||
case VEHICLE_COLLISION_ENTITY:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((VehicleListener)listener).onVehicleEntityCollision( (VehicleEntityCollisionEvent)event );
|
||||
}
|
||||
};
|
||||
case VEHICLE_ENTER:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((VehicleListener)listener).onVehicleEnter( (VehicleEnterEvent)event );
|
||||
}
|
||||
};
|
||||
case VEHICLE_EXIT:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((VehicleListener)listener).onVehicleExit( (VehicleExitEvent)event );
|
||||
}
|
||||
};
|
||||
case VEHICLE_MOVE:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((VehicleListener)listener).onVehicleMove( (VehicleMoveEvent)event );
|
||||
}
|
||||
};
|
||||
|
||||
// Custom Events
|
||||
case CUSTOM_EVENT:
|
||||
return new IExecutor() { public void execute( Listener listener, Event event ) {
|
||||
((CustomEventListener)listener).onCustomEvent( event );
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
throw new IllegalArgumentException( "Event " + type + " is not supported" );
|
||||
}
|
||||
|
||||
public void enablePlugin(final Plugin plugin) {
|
||||
@@ -281,7 +354,7 @@ public final class JavaPluginLoader implements PluginLoader {
|
||||
JavaPlugin jPlugin = (JavaPlugin)plugin;
|
||||
|
||||
server.getPluginManager().callEvent(new PluginEvent(Event.Type.PLUGIN_ENABLE, plugin));
|
||||
|
||||
|
||||
jPlugin.setEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user