From 3a968aa90aece7253cc1b8ca8f698de703aeca22 Mon Sep 17 00:00:00 2001 From: Bukkit/Spigot Date: Tue, 28 Dec 2010 16:59:25 +0000 Subject: [PATCH] Added onPlayerMove and onPlayerTeleport By: Dinnerbone --- paper-api/src/org/bukkit/Location.java | 66 +++++++++++++- .../bukkit/event/player/PlayerListener.java | 16 ++++ .../bukkit/event/player/PlayerMoveEvent.java | 85 +++++++++++++++++++ .../bukkit/plugin/java/JavaPluginLoader.java | 6 ++ 4 files changed, 169 insertions(+), 4 deletions(-) create mode 100644 paper-api/src/org/bukkit/event/player/PlayerMoveEvent.java diff --git a/paper-api/src/org/bukkit/Location.java b/paper-api/src/org/bukkit/Location.java index 4da77ad18a..95a57cdab9 100644 --- a/paper-api/src/org/bukkit/Location.java +++ b/paper-api/src/org/bukkit/Location.java @@ -9,12 +9,20 @@ public class Location { private double x; private double y; private double z; + private float pitch; + private float yaw; public Location(final World world, final double x, final double y, final double z) { + this(world, x, y, z, 0, 0); + } + + public Location(final World world, final double x, final double y, final double z, final float pitch, final float yaw) { this.world = world; this.x = x; this.y = y; this.z = z; + this.pitch = pitch; + this.yaw = yaw; } /** @@ -89,6 +97,42 @@ public class Location { return z; } + /** + * Sets the yaw of this location + * + * @param yaw New yaw + */ + public void setYaw(float yaw) { + this.yaw = yaw; + } + + /** + * Gets the yaw of this location + * + * @return Yaw + */ + public float getYaw() { + return yaw; + } + + /** + * Sets the pitch of this location + * + * @param pitch New pitch + */ + public void setPitch(float pitch) { + this.pitch = pitch; + } + + /** + * Gets the pitch of this location + * + * @return Pitch + */ + public float getPitch() { + return pitch; + } + @Override public boolean equals(Object obj) { if (obj == null) { @@ -110,15 +154,29 @@ public class Location { if (Double.doubleToLongBits(this.z) != Double.doubleToLongBits(other.z)) { return false; } + if (Float.floatToIntBits(this.pitch) != Float.floatToIntBits(other.pitch)) { + return false; + } + if (Float.floatToIntBits(this.yaw) != Float.floatToIntBits(other.yaw)) { + return false; + } return true; } @Override public int hashCode() { - int hash = 7; - hash = 23 * hash + (int) (Double.doubleToLongBits(this.x) ^ (Double.doubleToLongBits(this.x) >>> 32)); - hash = 23 * hash + (int) (Double.doubleToLongBits(this.y) ^ (Double.doubleToLongBits(this.y) >>> 32)); - hash = 23 * hash + (int) (Double.doubleToLongBits(this.z) ^ (Double.doubleToLongBits(this.z) >>> 32)); + int hash = 3; + hash = 19 * hash + (this.world != null ? this.world.hashCode() : 0); + hash = 19 * hash + (int) (Double.doubleToLongBits(this.x) ^ (Double.doubleToLongBits(this.x) >>> 32)); + hash = 19 * hash + (int) (Double.doubleToLongBits(this.y) ^ (Double.doubleToLongBits(this.y) >>> 32)); + hash = 19 * hash + (int) (Double.doubleToLongBits(this.z) ^ (Double.doubleToLongBits(this.z) >>> 32)); + hash = 19 * hash + Float.floatToIntBits(this.pitch); + hash = 19 * hash + Float.floatToIntBits(this.yaw); return hash; } + + @Override + public String toString() { + return "Location{" + "world=" + world + "x=" + x + "y=" + y + "z=" + z + "pitch=" + pitch + "yaw=" + yaw + '}'; + } } diff --git a/paper-api/src/org/bukkit/event/player/PlayerListener.java b/paper-api/src/org/bukkit/event/player/PlayerListener.java index dc3d01ecb6..fe545c38f3 100644 --- a/paper-api/src/org/bukkit/event/player/PlayerListener.java +++ b/paper-api/src/org/bukkit/event/player/PlayerListener.java @@ -41,4 +41,20 @@ public class PlayerListener implements Listener { */ public void onPlayerCommand(PlayerChatEvent event) { } + + /** + * Called when a player attempts to move location in a world + * + * @param event Relevant event details + */ + public void onPlayerMove(PlayerMoveEvent event) { + } + + /** + * Called when a player attempts to teleport to a new location in a world + * + * @param event Relevant event details + */ + public void onPlayerTeleport(PlayerMoveEvent event) { + } } diff --git a/paper-api/src/org/bukkit/event/player/PlayerMoveEvent.java b/paper-api/src/org/bukkit/event/player/PlayerMoveEvent.java new file mode 100644 index 0000000000..bb08255d34 --- /dev/null +++ b/paper-api/src/org/bukkit/event/player/PlayerMoveEvent.java @@ -0,0 +1,85 @@ + +package org.bukkit.event.player; + +import org.bukkit.Location; +import org.bukkit.Player; +import org.bukkit.event.Event; + +/** + * Holds information for player movement and teleportation events + */ +public class PlayerMoveEvent extends PlayerEvent { + private boolean cancel = false; + private Location from; + private Location to; + + public PlayerMoveEvent(final Event.Type type, final Player player, final Location from, final Location to) { + super(type, player); + this.from = from; + this.to = to; + } + + /** + * Gets the cancellation state of this event. A cancelled event will not + * be executed in the server, but will still pass to other plugins + * + * If a move or teleport event is cancelled, the player will be moved or + * teleported back to the Location as defined by getFrom(). This will not + * fire an event + * + * @return true if this event is cancelled + */ + public boolean isCancelled() { + return cancel; + } + + /** + * Sets the cancellation state of this event. A cancelled event will not + * be executed in the server, but will still pass to other plugins + * + * If a move or teleport event is cancelled, the player will be moved or + * teleported back to the Location as defined by getFrom(). This will not + * fire an event + * + * @param cancel true if you wish to cancel this event + */ + public void setCancelled(boolean cancel) { + this.cancel = cancel; + } + + /** + * Gets the location this player moved from + * + * @return Location the player moved from + */ + public Location getFrom() { + return from; + } + + /** + * Sets the location to mark as where the player moved from + * + * @param from New location to mark as the players previous location + */ + public void setFrom(Location from) { + this.from = from; + } + + /** + * Gets the location this player moved to + * + * @return Location the player moved to + */ + public Location getTo() { + return to; + } + + /** + * Sets the location that this player will move to + * + * @param to New Location this player will move to + */ + public void setTo(Location to) { + this.to = to; + } +} diff --git a/paper-api/src/org/bukkit/plugin/java/JavaPluginLoader.java b/paper-api/src/org/bukkit/plugin/java/JavaPluginLoader.java index d687096c97..9c6a680096 100644 --- a/paper-api/src/org/bukkit/plugin/java/JavaPluginLoader.java +++ b/paper-api/src/org/bukkit/plugin/java/JavaPluginLoader.java @@ -93,6 +93,12 @@ public final class JavaPluginLoader implements PluginLoader { case PLAYER_CHAT: trueListener.onPlayerChat((PlayerChatEvent)event); break; + case PLAYER_MOVE: + trueListener.onPlayerMove((PlayerMoveEvent)event); + break; + case PLAYER_TELEPORT: + trueListener.onPlayerTeleport((PlayerMoveEvent)event); + break; } } }