001 package org.bukkit.event.entity;
002
003 import org.bukkit.entity.Entity;
004 import org.bukkit.event.Cancellable;
005 import org.bukkit.event.HandlerList;
006
007 /**
008 * Called when a creature targets or untargets another entity
009 */
010 public class EntityTargetEvent extends EntityEvent implements Cancellable {
011 private static final HandlerList handlers = new HandlerList();
012 private boolean cancel = false;
013 private Entity target;
014 private final TargetReason reason;
015
016 public EntityTargetEvent(final Entity entity, final Entity target, final TargetReason reason) {
017 super(entity);
018 this.target = target;
019 this.reason = reason;
020 }
021
022 public boolean isCancelled() {
023 return cancel;
024 }
025
026 public void setCancelled(boolean cancel) {
027 this.cancel = cancel;
028 }
029
030 /**
031 * Returns the reason for the targeting
032 *
033 * @return The reason
034 */
035 public TargetReason getReason() {
036 return reason;
037 }
038
039 /**
040 * Get the entity that this is targeting.
041 * <p>
042 * This will be null in the case that the event is called when the mob
043 * forgets its target.
044 *
045 * @return The entity
046 */
047 public Entity getTarget() {
048 return target;
049 }
050
051 /**
052 * Set the entity that you want the mob to target instead.
053 * <p>
054 * It is possible to be null, null will cause the entity to be
055 * target-less.
056 * <p>
057 * This is different from cancelling the event. Cancelling the event will
058 * cause the entity to keep an original target, while setting to be null
059 * will cause the entity to be reset.
060 *
061 * @param target The entity to target
062 */
063 public void setTarget(Entity target) {
064 this.target = target;
065 }
066
067 @Override
068 public HandlerList getHandlers() {
069 return handlers;
070 }
071
072 public static HandlerList getHandlerList() {
073 return handlers;
074 }
075
076 /**
077 * An enum to specify the reason for the targeting
078 */
079 public enum TargetReason {
080
081 /**
082 * When the entity's target has died, and so it no longer targets it
083 */
084 TARGET_DIED,
085 /**
086 * When the entity doesn't have a target, so it attacks the nearest
087 * player
088 */
089 CLOSEST_PLAYER,
090 /**
091 * When the target attacks the entity, so entity targets it
092 */
093 TARGET_ATTACKED_ENTITY,
094 /**
095 * When the target attacks a fellow pig zombie, so the whole group
096 * will target him with this reason.
097 */
098 PIG_ZOMBIE_TARGET,
099 /**
100 * When the target is forgotten for whatever reason.
101 * <p>
102 * Currently only occurs in with spiders when there is a high
103 * brightness.
104 */
105 FORGOT_TARGET,
106 /**
107 * When the target attacks the owner of the entity, so the entity
108 * targets it.
109 */
110 TARGET_ATTACKED_OWNER,
111 /**
112 * When the owner of the entity attacks the target attacks, so the
113 * entity targets it.
114 */
115 OWNER_ATTACKED_TARGET,
116 /**
117 * When the entity has no target, so the entity randomly chooses one.
118 */
119 RANDOM_TARGET,
120 /**
121 * When an entity selects a target while defending a village.
122 */
123 DEFEND_VILLAGE,
124 /**
125 * When the target attacks a nearby entity of the same type, so the entity targets it
126 */
127 TARGET_ATTACKED_NEARBY_ENTITY,
128 /**
129 * When a zombie targeting an entity summons reinforcements, so the reinforcements target the same entity
130 */
131 REINFORCEMENT_TARGET,
132 /**
133 * When an entity targets another entity after colliding with it.
134 */
135 COLLISION,
136 /**
137 * For custom calls to the event.
138 */
139 CUSTOM
140 }
141 }