From b3642a04e16e7c59f9e8a5a01233f678120dc160 Mon Sep 17 00:00:00 2001 From: Bukkit/Spigot Date: Fri, 20 Jan 2012 08:16:45 +0100 Subject: [PATCH] [Bleeding] Added PotionSplashEvent for splash potions. Closes BUKKIT-307 By: Zeerix --- .../src/main/java/org/bukkit/event/Event.java | 6 ++ .../event/entity/PotionSplashEvent.java | 89 +++++++++++++++++++ .../event/entity/ProjectileHitEvent.java | 4 + 3 files changed, 99 insertions(+) create mode 100644 paper-api/src/main/java/org/bukkit/event/entity/PotionSplashEvent.java diff --git a/paper-api/src/main/java/org/bukkit/event/Event.java b/paper-api/src/main/java/org/bukkit/event/Event.java index af614c410e..8a5035d8dc 100644 --- a/paper-api/src/main/java/org/bukkit/event/Event.java +++ b/paper-api/src/main/java/org/bukkit/event/Event.java @@ -795,6 +795,12 @@ public abstract class Event implements Serializable { * @see org.bukkit.event.entity.ProjectileHitEvent */ PROJECTILE_HIT(Category.ENTITY, ProjectileHitEvent.class), + /** + * Called when a splash potion hits an area + * + * @see org.bukkit.event.entity.PotionSplashEvent + */ + POTION_SPLASH(Category.ENTITY, PotionSplashEvent.class), /** * Called when a Slime splits into smaller Slimes upon death * diff --git a/paper-api/src/main/java/org/bukkit/event/entity/PotionSplashEvent.java b/paper-api/src/main/java/org/bukkit/event/entity/PotionSplashEvent.java new file mode 100644 index 0000000000..9461181ed4 --- /dev/null +++ b/paper-api/src/main/java/org/bukkit/event/entity/PotionSplashEvent.java @@ -0,0 +1,89 @@ +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.LivingEntity; +import org.bukkit.entity.ThrownPotion; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; + +/** + * Called when a splash potion hits an area + */ +@SuppressWarnings("serial") +public class PotionSplashEvent extends ProjectileHitEvent implements Cancellable { + private static final HandlerList handlers = new HandlerList(); + private boolean cancelled; + private Map affectedEntities; + + public PotionSplashEvent(ThrownPotion potion, Map affectedEntities) { + super(Type.POTION_SPLASH, potion); + + this.affectedEntities = affectedEntities; + } + + /** + * Gets the potion which caused this event + * + * @return The thrown potion entity + */ + public ThrownPotion getPotion() { + return (ThrownPotion) getEntity(); + } + + /** + * Retrieves a list of all effected entities + * + * @return A fresh copy of the affected entity list + */ + public Collection getAffectedEntities() { + return new ArrayList(affectedEntities.keySet()); + } + + /** + * Gets the intensity of the potion's effects for given entity; + * This depends on the distance to the impact center + * + * @param entity Which entity to get intensity for + * @return intensity relative to maximum effect; 0.0: not affected; 1.0: fully hit by potion effects + */ + public double getIntensity(LivingEntity entity) { + Double intensity = affectedEntities.get(entity); + return intensity != null ? intensity : 0.0; + } + + /** + * Overwrites the intensity for a given entity + * + * @param entity For which entity to define a new intensity + * @param intensity relative to maximum effect + */ + public void setIntensity(LivingEntity entity, double intensity) { + Validate.notNull(entity, "You must specify a valid entity."); + if (intensity <= 0.0) { + affectedEntities.remove(entity); + } else { + affectedEntities.put(entity, Math.min(intensity, 1.0)); + } + } + + public boolean isCancelled() { + return cancelled; + } + + public void setCancelled(boolean cancel) { + cancelled = cancel; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } +} diff --git a/paper-api/src/main/java/org/bukkit/event/entity/ProjectileHitEvent.java b/paper-api/src/main/java/org/bukkit/event/entity/ProjectileHitEvent.java index c019e5864f..37a9988519 100644 --- a/paper-api/src/main/java/org/bukkit/event/entity/ProjectileHitEvent.java +++ b/paper-api/src/main/java/org/bukkit/event/entity/ProjectileHitEvent.java @@ -14,6 +14,10 @@ public class ProjectileHitEvent extends EntityEvent { super(Type.PROJECTILE_HIT, projectile); } + public ProjectileHitEvent(Type type, Projectile projectile) { + super(type, projectile); + } + @Override public HandlerList getHandlers() { return handlers;