diff options
author | durron597 <martin.jared@gmail.com> | 2010-12-28 10:48:03 +0800 |
---|---|---|
committer | Nathan Adams <dinnerbone@dinnerbone.com> | 2010-12-28 11:08:17 +0800 |
commit | 37f3b8fe58295ac110fa2c88f78c0e58ec8ff632 (patch) | |
tree | 0ffd82bc5d205eaf562e05d1961b947ee7de8a52 /src/org | |
parent | 2e88ac9e9f355faa82ef5c88e5d76612d05bd0b9 (diff) | |
download | bukkit-37f3b8fe58295ac110fa2c88f78c0e58ec8ff632.tar bukkit-37f3b8fe58295ac110fa2c88f78c0e58ec8ff632.tar.gz bukkit-37f3b8fe58295ac110fa2c88f78c0e58ec8ff632.tar.lz bukkit-37f3b8fe58295ac110fa2c88f78c0e58ec8ff632.tar.xz bukkit-37f3b8fe58295ac110fa2c88f78c0e58ec8ff632.zip |
Eventing redone, revision 1
Diffstat (limited to 'src/org')
-rw-r--r-- | src/org/bukkit/event/Event.java | 135 | ||||
-rw-r--r-- | src/org/bukkit/event/EventException.java | 47 | ||||
-rw-r--r-- | src/org/bukkit/event/player/PlayerEvent.java | 18 | ||||
-rw-r--r-- | src/org/bukkit/plugin/PluginLoader.java | 5 | ||||
-rw-r--r-- | src/org/bukkit/plugin/PluginManager.java | 11 | ||||
-rw-r--r-- | src/org/bukkit/plugin/SimplePluginManager.java | 27 | ||||
-rw-r--r-- | src/org/bukkit/plugin/java/JavaPluginLoader.java | 9 |
7 files changed, 211 insertions, 41 deletions
diff --git a/src/org/bukkit/event/Event.java b/src/org/bukkit/event/Event.java index 3fdb4a1f..03957646 100644 --- a/src/org/bukkit/event/Event.java +++ b/src/org/bukkit/event/Event.java @@ -1,16 +1,20 @@ package org.bukkit.event; +import org.bukkit.Player; import org.bukkit.Server; +import org.bukkit.event.player.PlayerEvent; /** * Represents an event */ public abstract class Event { private final Server server; + private final Type type; - protected Event(final Server instance) { + protected Event(final Server instance, final Type type) { server = instance; + this.type = type; } /** @@ -22,6 +26,14 @@ public abstract class Event { } /** + * Gets the Type of this event + * @return Server which this event was triggered on + */ + public Type getType() { + return type; + } + + /** * Represents an events priority */ public enum Priority { @@ -50,4 +62,125 @@ public abstract class Event { */ Lowest } + + public enum Category { + PLAYER, + BLOCK, + ITEM, + ENVIRONMENT, + ENTITY, + VEHICLE, + INVENTORY, + SIGN, + CUSTOM; + } + + public enum Type { + /** + * Player Events + */ + LOGINCHECK (Category.PLAYER), + JOIN (Category.PLAYER), + CHAT (Category.PLAYER), + COMMAND (Category.PLAYER), + SERVERCOMMAND (Category.PLAYER), + BAN (Category.PLAYER), + IPBAN (Category.PLAYER), + KICK (Category.PLAYER), + QUIT (Category.PLAYER), + PLAYER_MOVE (Category.PLAYER), + ARM_SWING (Category.PLAYER), + TELEPORT (Category.PLAYER), + /** + * Block Events + */ + BLOCK_DESTROYED (Category.BLOCK), + BLOCK_BROKEN (Category.BLOCK), + BLOCK_PLACE (Category.BLOCK), + BLOCK_RIGHTCLICKED (Category.BLOCK), + REDSTONE_CHANGE (Category.BLOCK), + BLOCK_PHYSICS (Category.BLOCK), + /** + * Item Events + */ + ITEM_DROP (Category.ITEM), + ITEM_PICK_UP (Category.ITEM), + ITEM_USE (Category.ITEM), + /** + * Environment Events + */ + IGNITE (Category.ENVIRONMENT), + FLOW (Category.ENVIRONMENT), + EXPLODE (Category.ENVIRONMENT), + LIQUID_DESTROY (Category.ENVIRONMENT), + /** + * Non-player Entity Events + */ + MOB_SPAWN (Category.ENTITY), + DAMAGE (Category.ENTITY), + HEALTH_CHANGE (Category.ENTITY), + ATTACK (Category.ENTITY), // Need to look into this category more + /** + * Vehicle Events + */ + VEHICLE_CREATE (Category.VEHICLE), + VEHICLE_UPDATE (Category.VEHICLE), + VEHICLE_DAMAGE (Category.VEHICLE), + VEHICLE_COLLISION (Category.VEHICLE), + VEHICLE_DESTROYED (Category.VEHICLE), + VEHICLE_ENTERED (Category.VEHICLE), + VEHICLE_POSITIONCHANGE (Category.VEHICLE), + /** + * Inventory Events + */ + OPEN_INVENTORY (Category.INVENTORY), + /** + * Sign Events (Item events??) + */ + SIGN_SHOW (Category.SIGN), + SIGN_CHANGE (Category.SIGN), + /** + * Custom Event Placeholder? + */ + CUSTOM_EVENT (Category.CUSTOM); + + private Category category; + + private Type(Category category) { + this.category = category; + } + + public Category getCategory() { + return category; + } + } + + public static Event eventFactory(Server server, Event.Type type, Object[] data) throws EventException { + switch (type.getCategory()) { + case PLAYER: + if (data.length < 1 || !(data[0] instanceof Player)) { + throw new EventException("Data is not a Player!"); + } + return new PlayerEvent(server, type, (Player) data[0]); +// TODO: IMPLEMENT ME + case BLOCK: + return null; + case ITEM: + return null; + case ENVIRONMENT: + return null; + case ENTITY: + return null; + case VEHICLE: + return null; + case INVENTORY: + return null; + case SIGN: + return null; + case CUSTOM: + return null; + default: + return null; + } + } } diff --git a/src/org/bukkit/event/EventException.java b/src/org/bukkit/event/EventException.java new file mode 100644 index 00000000..2e1e86a2 --- /dev/null +++ b/src/org/bukkit/event/EventException.java @@ -0,0 +1,47 @@ +package org.bukkit.event;
+
+public class EventException extends Exception {
+ private final Throwable cause;
+
+ /**
+ * Constructs a new EventException based on the given Exception
+ *
+ * @param throwable Exception that triggered this Exception
+ */
+ public EventException(Throwable throwable) {
+ cause = throwable;
+ }
+
+ /**
+ * Constructs a new EventException
+ */
+ public EventException() {
+ cause = null;
+ }
+
+ /**
+ * Constructs a new EventException with the given message
+ */
+ public EventException(Throwable cause, String message) {
+ super(message);
+ this.cause = cause;
+ }
+
+ /**
+ * Constructs a new EventException with the given message
+ */
+ public EventException(String message) {
+ super(message);
+ cause = null;
+ }
+
+ /**
+ * If applicable, returns the Exception that triggered this Exception
+ *
+ * @return Inner exception, or null if one does not exist
+ */
+ @Override
+ public Throwable getCause() {
+ return cause;
+ }
+}
diff --git a/src/org/bukkit/event/player/PlayerEvent.java b/src/org/bukkit/event/player/PlayerEvent.java index bce15f6a..034ccb2c 100644 --- a/src/org/bukkit/event/player/PlayerEvent.java +++ b/src/org/bukkit/event/player/PlayerEvent.java @@ -11,8 +11,8 @@ import org.bukkit.event.Event; public class PlayerEvent extends Event { private final Player player; - public PlayerEvent(final Server server, final Player who) { - super(server); + public PlayerEvent(final Server server, Event.Type type, final Player who) { + super(server, type); player = who; } @@ -23,18 +23,4 @@ public class PlayerEvent extends Event { public final Player getPlayer() { return player; } - - /** - * Represents the different types of events - */ - public enum EventType { - /** - * A player joins a server - */ - Join, - /** - * A player leaves a server - */ - Quit - } } diff --git a/src/org/bukkit/plugin/PluginLoader.java b/src/org/bukkit/plugin/PluginLoader.java index 05c96296..7d75f577 100644 --- a/src/org/bukkit/plugin/PluginLoader.java +++ b/src/org/bukkit/plugin/PluginLoader.java @@ -3,7 +3,8 @@ package org.bukkit.plugin; import java.io.File; import java.util.regex.Pattern; -import org.bukkit.event.player.PlayerEvent; + +import org.bukkit.event.Event; /** * Represents a plugin loader, which handles direct access to specific types @@ -32,5 +33,5 @@ public interface PluginLoader { * @param type Type of player related event to call * @param event Event details */ - public void callEvent(RegisteredListener registration, PlayerEvent.EventType type, PlayerEvent event); + public void callEvent(RegisteredListener registration, Event event); } diff --git a/src/org/bukkit/plugin/PluginManager.java b/src/org/bukkit/plugin/PluginManager.java index fd1019dc..b36ecc0d 100644 --- a/src/org/bukkit/plugin/PluginManager.java +++ b/src/org/bukkit/plugin/PluginManager.java @@ -2,9 +2,10 @@ package org.bukkit.plugin; import java.io.File; + +import org.bukkit.event.Event; import org.bukkit.event.Event.Priority; -import org.bukkit.event.player.PlayerEvent; -import org.bukkit.event.player.PlayerListener; +import org.bukkit.event.Listener; /** * Handles all plugin management from the Server @@ -72,15 +73,15 @@ public interface PluginManager { * @param type Type of player related event to call * @param event Event details */ - public void callEvent(PlayerEvent.EventType type, PlayerEvent event); + public void callEvent(Event event); /** * Registers the given player event to the specified listener * * @param type EventType to register - * @param listener PlayerListener to register + * @param listener Listener to register * @param priority Priority of this event * @param plugin Plugin to register */ - public void registerEvent(PlayerEvent.EventType type, PlayerListener listener, Priority priority, Plugin plugin); + public void registerEvent(Event.Type type, Listener listener, Priority priority, Plugin plugin); } diff --git a/src/org/bukkit/plugin/SimplePluginManager.java b/src/org/bukkit/plugin/SimplePluginManager.java index 201e8ed0..bc15be8c 100644 --- a/src/org/bukkit/plugin/SimplePluginManager.java +++ b/src/org/bukkit/plugin/SimplePluginManager.java @@ -14,9 +14,10 @@ import java.util.logging.Logger; import java.util.regex.Matcher; import org.bukkit.Server; import java.util.regex.Pattern; + +import org.bukkit.event.Event; import org.bukkit.event.Event.Priority; -import org.bukkit.event.player.PlayerEvent; -import org.bukkit.event.player.PlayerListener; +import org.bukkit.event.Listener; /** * Handles all plugin management from the Server @@ -26,7 +27,7 @@ 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<PlayerEvent.EventType, List<RegisteredListener>> playerListeners = new EnumMap<PlayerEvent.EventType, List<RegisteredListener>>(PlayerEvent.EventType.class); + private final Map<Event.Type, List<RegisteredListener>> listeners = new EnumMap<Event.Type, List<RegisteredListener>>(Event.Type.class); public SimplePluginManager(Server instance) { server = instance; @@ -166,16 +167,16 @@ public final class SimplePluginManager implements PluginManager { * @param type Type of player related event to call * @param event Event details */ - public void callEvent(PlayerEvent.EventType type, PlayerEvent event) { - List<RegisteredListener> listeners = playerListeners.get(type); + public void callEvent(Event event) { + List<RegisteredListener> eventListeners = listeners.get(event.getType()); if (listeners != null) { - for (RegisteredListener registration : listeners) { + for (RegisteredListener registration : eventListeners) { Plugin plugin = registration.getPlugin(); PluginLoader loader = plugin.getPluginLoader(); if (plugin.isEnabled()) { - loader.callEvent(registration, type, event); + loader.callEvent(registration, event); } } } @@ -189,12 +190,12 @@ public final class SimplePluginManager implements PluginManager { * @param priority Priority of this event * @param plugin Plugin to register */ - public void registerEvent(PlayerEvent.EventType type, PlayerListener listener, Priority priority, Plugin plugin) { - List<RegisteredListener> listeners = playerListeners.get(type); + public void registerEvent(Event.Type type, Listener listener, Priority priority, Plugin plugin) { + List<RegisteredListener> eventListeners = listeners.get(type); int position = 0; if (listeners != null) { - for (RegisteredListener registration : listeners) { + for (RegisteredListener registration : eventListeners) { if (registration.getPriority().compareTo(priority) < 0) { break; } @@ -202,10 +203,10 @@ public final class SimplePluginManager implements PluginManager { position++; } } else { - listeners = new ArrayList<RegisteredListener>(); - playerListeners.put(type, listeners); + eventListeners = new ArrayList<RegisteredListener>(); + listeners.put(type, eventListeners); } - listeners.add(position, new RegisteredListener(listener, priority, plugin)); + eventListeners.add(position, new RegisteredListener(listener, priority, plugin)); } } diff --git a/src/org/bukkit/plugin/java/JavaPluginLoader.java b/src/org/bukkit/plugin/java/JavaPluginLoader.java index a297e1b9..3f17112f 100644 --- a/src/org/bukkit/plugin/java/JavaPluginLoader.java +++ b/src/org/bukkit/plugin/java/JavaPluginLoader.java @@ -13,6 +13,7 @@ import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.regex.Pattern; import org.bukkit.Server; +import org.bukkit.event.Event; import org.bukkit.event.Listener; import org.bukkit.event.player.*; import org.bukkit.plugin.*; @@ -74,17 +75,17 @@ public final class JavaPluginLoader implements PluginLoader { return fileFilters; } - public void callEvent(RegisteredListener registration, PlayerEvent.EventType type, PlayerEvent event) { + public void callEvent(RegisteredListener registration, Event event) { Listener listener = registration.getListener(); if (listener instanceof PlayerListener) { PlayerListener trueListener = (PlayerListener)listener; - switch (type) { - case Join: + switch (event.getType()) { + case JOIN: trueListener.onPlayerJoin((PlayerEvent)event); break; - case Quit: + case QUIT: trueListener.onPlayerQuit((PlayerEvent)event); break; } |