From 0b10b8e543444426153f48d4ec348ac15f4cf1f3 Mon Sep 17 00:00:00 2001 From: t00thpick1 Date: Sat, 12 Mar 2016 12:08:25 -0500 Subject: SPIGOT-1904: AreaEffectCloud events and additional API --- .../java/org/bukkit/entity/AreaEffectCloud.java | 15 ++++++ .../event/entity/AreaEffectCloudApplyEvent.java | 55 ++++++++++++++++++++ .../event/entity/LingeringPotionSplashEvent.java | 58 ++++++++++++++++++++++ 3 files changed, 128 insertions(+) create mode 100644 src/main/java/org/bukkit/event/entity/AreaEffectCloudApplyEvent.java create mode 100644 src/main/java/org/bukkit/event/entity/LingeringPotionSplashEvent.java diff --git a/src/main/java/org/bukkit/entity/AreaEffectCloud.java b/src/main/java/org/bukkit/entity/AreaEffectCloud.java index c9d04db7..f88be2ff 100644 --- a/src/main/java/org/bukkit/entity/AreaEffectCloud.java +++ b/src/main/java/org/bukkit/entity/AreaEffectCloud.java @@ -6,6 +6,7 @@ import org.bukkit.Particle; import org.bukkit.potion.PotionData; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; +import org.bukkit.projectiles.ProjectileSource; /** * Represents an area effect cloud which will imbue a potion effect onto @@ -207,4 +208,18 @@ public interface AreaEffectCloud extends Entity { * @param color cloud color */ void setColor(Color color); + + /** + * Retrieve the original source of this cloud. + * + * @return the {@link ProjectileSource} that threw the LingeringPotion + */ + public ProjectileSource getSource(); + + /** + * Set the original source of this cloud. + * + * @param source the {@link ProjectileSource} that threw the LingeringPotion + */ + public void setSource(ProjectileSource source); } diff --git a/src/main/java/org/bukkit/event/entity/AreaEffectCloudApplyEvent.java b/src/main/java/org/bukkit/event/entity/AreaEffectCloudApplyEvent.java new file mode 100644 index 00000000..bf2e7513 --- /dev/null +++ b/src/main/java/org/bukkit/event/entity/AreaEffectCloudApplyEvent.java @@ -0,0 +1,55 @@ +package org.bukkit.event.entity; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang.Validate; +import org.bukkit.entity.AreaEffectCloud; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.ThrownPotion; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; + +/** + * Called when a lingering potion applies it's effects. Happens + * once every 5 ticks + */ +public class AreaEffectCloudApplyEvent extends EntityEvent { + private static final HandlerList handlers = new HandlerList(); + private final List affectedEntities; + + public AreaEffectCloudApplyEvent(final AreaEffectCloud entity, final List affectedEntities) { + super(entity); + this.affectedEntities = affectedEntities; + } + + @Override + public AreaEffectCloud getEntity() { + return (AreaEffectCloud) getEntity(); + } + + /** + * Retrieves a mutable list of the effected entities + *

+ * It is important to note that not every entity in this list + * is guaranteed to be effected. The cloud may die during the + * application of its effects due to the depletion of {@link AreaEffectCloud#getDurationOnUse()} + * or {@link AreaEffectCloud#getRadiusOnUse()} + * + * @return the affected entity list + */ + public List getAffectedEntities() { + return affectedEntities; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } +} diff --git a/src/main/java/org/bukkit/event/entity/LingeringPotionSplashEvent.java b/src/main/java/org/bukkit/event/entity/LingeringPotionSplashEvent.java new file mode 100644 index 00000000..09861a5b --- /dev/null +++ b/src/main/java/org/bukkit/event/entity/LingeringPotionSplashEvent.java @@ -0,0 +1,58 @@ +package org.bukkit.event.entity; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Map; + +import org.apache.commons.lang.Validate; +import org.bukkit.entity.AreaEffectCloud; +import org.bukkit.entity.LingeringPotion; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.ThrownPotion; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; + +/** + * Called when a splash potion hits an area + */ +public class LingeringPotionSplashEvent extends ProjectileHitEvent implements Cancellable { + private static final HandlerList handlers = new HandlerList(); + private boolean cancelled; + private final AreaEffectCloud entity; + + public LingeringPotionSplashEvent(final ThrownPotion potion, final AreaEffectCloud entity) { + super(potion); + this.entity = entity; + } + + @Override + public LingeringPotion getEntity() { + return (LingeringPotion) super.getEntity(); + } + + /** + * Gets the AreaEffectCloud spawned + * + * @return The spawned AreaEffectCloud + */ + public AreaEffectCloud getAreaEffectCloud() { + return entity; + } + + public boolean isCancelled() { + return cancelled; + } + + public void setCancelled(boolean cancel) { + cancelled = cancel; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } +} -- cgit v1.2.3