From 55bc828c2cf5a1fb4a9464c23a3b2ec7df1af686 Mon Sep 17 00:00:00 2001 From: Stephen Date: Tue, 7 Jun 2011 14:12:08 -0400 Subject: [PATCH] Added various 1.6 portal events. --- src/main/java/org/bukkit/event/Event.java | 18 ++++++++ .../bukkit/event/entity/EntityListener.java | 2 + .../event/entity/EntityPortalEnterEvent.java | 26 +++++++++++ .../bukkit/event/player/PlayerListener.java | 7 +++ .../event/player/PlayerPortalEvent.java | 22 ++++++++++ .../event/player/PlayerTeleportEvent.java | 4 ++ .../bukkit/event/world/PortalCreateEvent.java | 43 +++++++++++++++++++ .../org/bukkit/event/world/WorldListener.java | 7 +++ .../bukkit/plugin/java/JavaPluginLoader.java | 21 +++++++++ 9 files changed, 150 insertions(+) create mode 100644 src/main/java/org/bukkit/event/entity/EntityPortalEnterEvent.java create mode 100644 src/main/java/org/bukkit/event/player/PlayerPortalEvent.java create mode 100644 src/main/java/org/bukkit/event/world/PortalCreateEvent.java diff --git a/src/main/java/org/bukkit/event/Event.java b/src/main/java/org/bukkit/event/Event.java index 6b517143..0bf2ab4c 100644 --- a/src/main/java/org/bukkit/event/Event.java +++ b/src/main/java/org/bukkit/event/Event.java @@ -229,6 +229,12 @@ public abstract class Event implements Serializable { * @see org.bukkit.event.player.PlayerMoveEvent */ PLAYER_TELEPORT (Category.PLAYER), + /** + * Called when a player completes the portaling process by standing in a portal + * + * @see org.bukkit.event.player.PlayerPortalEvent + */ + PLAYER_PORTAL (Category.PLAYER), /** * Called when a player changes their held item * @@ -483,6 +489,12 @@ public abstract class Event implements Serializable { * Called when a World is unloaded */ WORLD_UNLOAD (Category.WORLD), + /** + * Called when world attempts to create a matching end to a portal + * + * @see org.bukkit.event.world.PortalCreateEvent + */ + PORTAL_CREATE (Category.WORLD), /** * ENTITY EVENTS @@ -500,6 +512,12 @@ public abstract class Event implements Serializable { * @see org.bukkit.event.painting.PaintingRemoveEvent */ PAINTING_BREAK (Category.ENTITY), + /** + * Called when an entity touches a portal block + * + * @see org.bukkit.event.entity.EntityPortalEnterEvent + */ + ENTITY_PORTAL_ENTER (Category.ENTITY), /** * LIVING_ENTITY EVENTS diff --git a/src/main/java/org/bukkit/event/entity/EntityListener.java b/src/main/java/org/bukkit/event/entity/EntityListener.java index fc3e441c..c820c2f9 100644 --- a/src/main/java/org/bukkit/event/entity/EntityListener.java +++ b/src/main/java/org/bukkit/event/entity/EntityListener.java @@ -26,6 +26,8 @@ public class EntityListener implements Listener { public void onEntityInteract(EntityInteractEvent event) {} + public void onEntityPortalEnter(EntityPortalEnterEvent event) {} + public void onPaintingPlace(PaintingPlaceEvent event) {} public void onPaintingBreak(PaintingBreakEvent event) {} diff --git a/src/main/java/org/bukkit/event/entity/EntityPortalEnterEvent.java b/src/main/java/org/bukkit/event/entity/EntityPortalEnterEvent.java new file mode 100644 index 00000000..74caf0f7 --- /dev/null +++ b/src/main/java/org/bukkit/event/entity/EntityPortalEnterEvent.java @@ -0,0 +1,26 @@ +package org.bukkit.event.entity; + +import org.bukkit.entity.Entity; +import org.bukkit.Location; +import org.bukkit.event.Cancellable; + +/** + * Stores data for entities standing inside a portal block + */ +public class EntityPortalEnterEvent extends EntityEvent { + + private Location location; + + public EntityPortalEnterEvent(Entity entity, Location location) { + super(Type.ENTITY_PORTAL_ENTER, entity); + this.location = location; + } + + /* + * Gets the portal block the entity is touching + * @return The portal block the entity is touching + */ + public Location getLocation() { + return location; + } +} \ No newline at end of file diff --git a/src/main/java/org/bukkit/event/player/PlayerListener.java b/src/main/java/org/bukkit/event/player/PlayerListener.java index c518cd97..ad44cdf2 100644 --- a/src/main/java/org/bukkit/event/player/PlayerListener.java +++ b/src/main/java/org/bukkit/event/player/PlayerListener.java @@ -183,6 +183,13 @@ public class PlayerListener implements Listener { */ public void onPlayerBedLeave(PlayerBedLeaveEvent event) {} + /** + * Called when a player is teleporting in a portal (after the animation) + * + * @param event Relevant event details + */ + public void onPlayerPortal(PlayerPortalEvent event) {} + // TODO: Remove after RB @Deprecated public void onPlayerQuit(PlayerEvent event) {} @Deprecated public void onPlayerCommandPreprocess(PlayerChatEvent event) {} diff --git a/src/main/java/org/bukkit/event/player/PlayerPortalEvent.java b/src/main/java/org/bukkit/event/player/PlayerPortalEvent.java new file mode 100644 index 00000000..9943cebe --- /dev/null +++ b/src/main/java/org/bukkit/event/player/PlayerPortalEvent.java @@ -0,0 +1,22 @@ +package org.bukkit.event.player; + +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.block.Block; + +/** + * Called when a player completes the portaling process by standing in a portal + */ +public class PlayerPortalEvent extends PlayerTeleportEvent { + private boolean useTravelAgent = true; + public PlayerPortalEvent(Player player, Location from, Location to) { + super(Type.PLAYER_PORTAL, player, from, to); + } + + public void useTravelAgent(boolean useTravelAgent){ + this.useTravelAgent = useTravelAgent; + } + public boolean useTravelAgent(){ + return useTravelAgent; + } +} diff --git a/src/main/java/org/bukkit/event/player/PlayerTeleportEvent.java b/src/main/java/org/bukkit/event/player/PlayerTeleportEvent.java index a5765c4a..dabcaf88 100644 --- a/src/main/java/org/bukkit/event/player/PlayerTeleportEvent.java +++ b/src/main/java/org/bukkit/event/player/PlayerTeleportEvent.java @@ -2,6 +2,7 @@ package org.bukkit.event.player; import org.bukkit.Location; import org.bukkit.entity.Player; +import org.bukkit.event.Event; /** * Holds information for player teleport events @@ -10,4 +11,7 @@ public class PlayerTeleportEvent extends PlayerMoveEvent { public PlayerTeleportEvent(Player player, Location from, Location to) { super(Type.PLAYER_TELEPORT, player, from, to); } + public PlayerTeleportEvent(final Event.Type type, Player player, Location from, Location to) { + super(type, player, from, to); + } } diff --git a/src/main/java/org/bukkit/event/world/PortalCreateEvent.java b/src/main/java/org/bukkit/event/world/PortalCreateEvent.java new file mode 100644 index 00000000..9f75f4c2 --- /dev/null +++ b/src/main/java/org/bukkit/event/world/PortalCreateEvent.java @@ -0,0 +1,43 @@ +package org.bukkit.event.world; + +import org.bukkit.block.Block; +import org.bukkit.World; +import org.bukkit.event.Cancellable; +import java.util.ArrayList; + +/** + * Called when the world attempts to create a matching end to a portal + */ +public class PortalCreateEvent extends WorldEvent implements Cancellable { + private boolean cancel = false; + private ArrayList blocks = new ArrayList(); + + public PortalCreateEvent(final ArrayList blocks, final World world) { + super(Type.PORTAL_CREATE, world); + this.blocks = blocks; + } + + public ArrayList getBlocks(){ + return this.blocks; + } + + /** + * Gets the cancellation state of this event. A canceled event will not + * be executed in the server, but will still pass to other plugins + * + * @return true if this event is canceled + */ + public boolean isCancelled() { + return cancel; + } + + /** + * Sets the cancellation state of this event. A canceled event will not + * be executed in the server, but will still pass to other plugins + * + * @param cancel true if you wish to cancel this event + */ + public void setCancelled(boolean cancel) { + this.cancel = cancel; + } +} \ No newline at end of file diff --git a/src/main/java/org/bukkit/event/world/WorldListener.java b/src/main/java/org/bukkit/event/world/WorldListener.java index 47cfabf4..ec50218a 100644 --- a/src/main/java/org/bukkit/event/world/WorldListener.java +++ b/src/main/java/org/bukkit/event/world/WorldListener.java @@ -29,6 +29,13 @@ public class WorldListener implements Listener { */ public void onSpawnChange(SpawnChangeEvent event) {} + /** + * Called when the world generates a portal end point + * + * @param event Relevant event details + */ + public void onPortalCreate(PortalCreateEvent event) {} + /** * Called when a world is saved * diff --git a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java index 8194311a..02322222 100644 --- a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java +++ b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java @@ -293,6 +293,13 @@ public final class JavaPluginLoader implements PluginLoader { } }; + case PLAYER_PORTAL: + return new EventExecutor() { + public void execute(Listener listener, Event event) { + ((PlayerListener) listener).onPlayerPortal((PlayerPortalEvent) event); + } + }; + case PLAYER_INTERACT: return new EventExecutor() { public void execute(Listener listener, Event event) { @@ -562,6 +569,13 @@ public final class JavaPluginLoader implements PluginLoader { } }; + case PORTAL_CREATE: + return new EventExecutor() { + public void execute(Listener listener, Event event) { + ((WorldListener) listener).onPortalCreate((PortalCreateEvent) event); + } + }; + // Painting Events case PAINTING_PLACE: return new EventExecutor() { @@ -627,6 +641,13 @@ public final class JavaPluginLoader implements PluginLoader { } }; + case ENTITY_PORTAL_ENTER: + return new EventExecutor() { + public void execute(Listener listener, Event event) { + ((EntityListener) listener).onEntityPortalEnter((EntityPortalEnterEvent) event); + } + }; + case CREATURE_SPAWN: return new EventExecutor() { public void execute(Listener listener, Event event) {