summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorT00thpick1 <t00thpick1dirko@gmail.com>2013-07-30 15:40:12 -0400
committerWesley Wolfe <weswolf@aol.com>2013-08-03 15:05:34 -0500
commit0971807a343040c202fad4265718270ecde684e7 (patch)
tree4a1521fbfeaf01a6ba28ebebc8b812dd3a4b66d4 /src
parent2f58bf8e3f07374501c7b2afed87611f4f41b3bb (diff)
downloadbukkit-0971807a343040c202fad4265718270ecde684e7.tar
bukkit-0971807a343040c202fad4265718270ecde684e7.tar.gz
bukkit-0971807a343040c202fad4265718270ecde684e7.tar.lz
bukkit-0971807a343040c202fad4265718270ecde684e7.tar.xz
bukkit-0971807a343040c202fad4265718270ecde684e7.zip
Add leash API. Adds BUKKIT-4459 and BUKKIT-4583
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/bukkit/entity/EntityType.java4
-rw-r--r--src/main/java/org/bukkit/entity/LeashHitch.java7
-rw-r--r--src/main/java/org/bukkit/entity/LivingEntity.java27
-rw-r--r--src/main/java/org/bukkit/event/entity/EntityUnleashEvent.java52
-rw-r--r--src/main/java/org/bukkit/event/entity/PlayerLeashEntityEvent.java68
-rw-r--r--src/main/java/org/bukkit/event/player/PlayerUnleashEntityEvent.java36
6 files changed, 194 insertions, 0 deletions
diff --git a/src/main/java/org/bukkit/entity/EntityType.java b/src/main/java/org/bukkit/entity/EntityType.java
index 2403949f..80a872b6 100644
--- a/src/main/java/org/bukkit/entity/EntityType.java
+++ b/src/main/java/org/bukkit/entity/EntityType.java
@@ -27,6 +27,10 @@ public enum EntityType {
*/
EXPERIENCE_ORB("XPOrb", ExperienceOrb.class, 2),
/**
+ * A leash attached to a fencepost.
+ */
+ LEASH_HITCH("LeashKnot", LeashHitch.class, 8),
+ /**
* A painting on a wall.
*/
PAINTING("Painting", Painting.class, 9),
diff --git a/src/main/java/org/bukkit/entity/LeashHitch.java b/src/main/java/org/bukkit/entity/LeashHitch.java
new file mode 100644
index 00000000..9ac04c18
--- /dev/null
+++ b/src/main/java/org/bukkit/entity/LeashHitch.java
@@ -0,0 +1,7 @@
+package org.bukkit.entity;
+
+/**
+ * Represents a Leash Hitch on a fence
+ */
+public interface LeashHitch extends Hanging {
+}
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
index 287e30d1..bb1f42f8 100644
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
@@ -369,4 +369,31 @@ public interface LivingEntity extends Entity, Damageable {
* @return if the custom name is displayed
*/
public boolean isCustomNameVisible();
+
+ /**
+ * Returns whether the entity is currently leashed.
+ *
+ * @return whether the entity is leashed
+ */
+ public boolean isLeashed();
+
+ /**
+ * Gets the entity that is currently leading this entity.
+ *
+ * @return the entity holding the leash
+ * @throws IllegalStateException if not currently leashed
+ */
+ public Entity getLeashHolder() throws IllegalStateException;
+
+ /**
+ * Sets the leash on this entity to be held by the supplied entity.
+ * <p>
+ * This method has no effect on EnderDragons, Withers, Players, or Bats.
+ * Non-living entities excluding leashes will not persist as leash
+ * holders.
+ *
+ * @param holder the entity to leash this entity to
+ * @return whether the operation was successful
+ */
+ public boolean setLeashHolder(Entity holder);
}
diff --git a/src/main/java/org/bukkit/event/entity/EntityUnleashEvent.java b/src/main/java/org/bukkit/event/entity/EntityUnleashEvent.java
new file mode 100644
index 00000000..da7e46c3
--- /dev/null
+++ b/src/main/java/org/bukkit/event/entity/EntityUnleashEvent.java
@@ -0,0 +1,52 @@
+package org.bukkit.event.entity;
+
+import org.bukkit.entity.Entity;
+import org.bukkit.event.HandlerList;
+
+/**
+ * Called immediately prior to an entity being unleashed.
+ */
+public class EntityUnleashEvent extends EntityEvent {
+ private static final HandlerList handlers = new HandlerList();
+ private final UnleashReason reason;
+
+ public EntityUnleashEvent(Entity entity, UnleashReason reason) {
+ super(entity);
+ this.reason = reason;
+ }
+
+ /**
+ * Returns the reason for the unleashing.
+ *
+ * @return The reason
+ */
+ public UnleashReason getReason() {
+ return reason;
+ }
+
+ @Override
+ public HandlerList getHandlers() {
+ return handlers;
+ }
+
+ public static HandlerList getHandlerList() {
+ return handlers;
+ }
+
+ public enum UnleashReason {
+ /**
+ * When the entity's leashholder has died or logged out, and so is
+ * unleashed
+ */
+ HOLDER_GONE,
+ /**
+ * When the entity's leashholder attempts to unleash it
+ */
+ PLAYER_UNLEASH,
+ /**
+ * When the entity's leashholder is more than 10 blocks away
+ */
+ DISTANCE,
+ UNKNOWN;
+ }
+}
diff --git a/src/main/java/org/bukkit/event/entity/PlayerLeashEntityEvent.java b/src/main/java/org/bukkit/event/entity/PlayerLeashEntityEvent.java
new file mode 100644
index 00000000..74d458a8
--- /dev/null
+++ b/src/main/java/org/bukkit/event/entity/PlayerLeashEntityEvent.java
@@ -0,0 +1,68 @@
+package org.bukkit.event.entity;
+
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.Player;
+import org.bukkit.event.Cancellable;
+import org.bukkit.event.Event;
+import org.bukkit.event.HandlerList;
+
+/**
+ * Called immediately prior to a creature being leashed by a player.
+ */
+public class PlayerLeashEntityEvent extends Event implements Cancellable {
+ private static final HandlerList handlers = new HandlerList();
+ private final Entity leashHolder;
+ private final Entity entity;
+ private boolean cancelled = false;
+ private final Player player;
+
+ public PlayerLeashEntityEvent(Entity what, Entity leashHolder, Player leasher) {
+ this.leashHolder = leashHolder;
+ this.entity = what;
+ this.player = leasher;
+ }
+
+ /**
+ * Returns the entity that is holding the leash.
+ *
+ * @return The leash holder
+ */
+ public Entity getLeashHolder() {
+ return leashHolder;
+ }
+
+ /**
+ * Returns the entity being leashed.
+ *
+ * @return The entity
+ */
+ public Entity getEntity() {
+ return entity;
+ }
+
+ /**
+ * Returns the player involved in this event
+ *
+ * @return Player who is involved in this event
+ */
+ public final Player getPlayer() {
+ return player;
+ }
+
+ @Override
+ public HandlerList getHandlers() {
+ return handlers;
+ }
+
+ public static HandlerList getHandlerList() {
+ return handlers;
+ }
+
+ public boolean isCancelled() {
+ return this.cancelled;
+ }
+
+ public void setCancelled(boolean cancel) {
+ this.cancelled = cancel;
+ }
+}
diff --git a/src/main/java/org/bukkit/event/player/PlayerUnleashEntityEvent.java b/src/main/java/org/bukkit/event/player/PlayerUnleashEntityEvent.java
new file mode 100644
index 00000000..f6aebefb
--- /dev/null
+++ b/src/main/java/org/bukkit/event/player/PlayerUnleashEntityEvent.java
@@ -0,0 +1,36 @@
+package org.bukkit.event.player;
+
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.Player;
+import org.bukkit.event.Cancellable;
+import org.bukkit.event.entity.EntityUnleashEvent;
+
+/**
+ * Called prior to an entity being unleashed due to a player's action.
+ */
+public class PlayerUnleashEntityEvent extends EntityUnleashEvent implements Cancellable {
+ private final Player player;
+ private boolean cancelled = false;
+
+ public PlayerUnleashEntityEvent(Entity entity, Player player) {
+ super(entity, UnleashReason.PLAYER_UNLEASH);
+ this.player = player;
+ }
+
+ /**
+ * Returns the player who is unleashing the entity.
+ *
+ * @return The player
+ */
+ public Player getPlayer() {
+ return player;
+ }
+
+ public boolean isCancelled() {
+ return cancelled;
+ }
+
+ public void setCancelled(boolean cancel) {
+ this.cancelled = cancel;
+ }
+}