From db5d43c2a90b0be805b9f4e1da5d28623c1b11b5 Mon Sep 17 00:00:00 2001 From: Andrew Ardill Date: Thu, 13 Jan 2011 00:15:31 +1100 Subject: [PATCH] Implementation of the EntityDamage*Events. A new event EntityDamageByProjectileEvent was created. EntityDamageByProjectileEvent adds the ability to get the projectile entity (such as an egg) and also set if the projectile 'bounces'. New interfaces were created to facilitate all kinds of projectile entities. Changes were made to facilitate the new event, and enable other events, for plugins and event listeners. --- src/main/java/org/bukkit/entity/Entity.java | 2 +- src/main/java/org/bukkit/entity/Fireball.java | 9 +++++ src/main/java/org/bukkit/entity/Fish.java | 9 +++++ src/main/java/org/bukkit/event/Event.java | 7 ++++ .../entity/EntityDamageByProjectileEvent.java | 35 +++++++++++++++++++ .../bukkit/event/entity/EntityListener.java | 6 ++++ .../bukkit/plugin/java/JavaPluginLoader.java | 8 +++++ 7 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/bukkit/entity/Fireball.java create mode 100644 src/main/java/org/bukkit/entity/Fish.java create mode 100644 src/main/java/org/bukkit/event/entity/EntityDamageByProjectileEvent.java diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java index 42e0cf49..aeb84256 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java @@ -9,7 +9,7 @@ import org.bukkit.World; */ public interface Entity { /** - * Gets the entitys current position + * Gets the entity's current position * * @return Location containing the position of this entity */ diff --git a/src/main/java/org/bukkit/entity/Fireball.java b/src/main/java/org/bukkit/entity/Fireball.java new file mode 100644 index 00000000..424de301 --- /dev/null +++ b/src/main/java/org/bukkit/entity/Fireball.java @@ -0,0 +1,9 @@ +package org.bukkit.entity; + +/** + * Represents a Fireball. + * + * @author Cogito + */ +public interface Fireball extends Entity { +} diff --git a/src/main/java/org/bukkit/entity/Fish.java b/src/main/java/org/bukkit/entity/Fish.java new file mode 100644 index 00000000..44fcede7 --- /dev/null +++ b/src/main/java/org/bukkit/entity/Fish.java @@ -0,0 +1,9 @@ +package org.bukkit.entity; + +/** + * Represents a Fish. + * + * @author Cogito + */ +public interface Fish extends Entity { +} diff --git a/src/main/java/org/bukkit/event/Event.java b/src/main/java/org/bukkit/event/Event.java index 0e32359b..a7399da7 100644 --- a/src/main/java/org/bukkit/event/Event.java +++ b/src/main/java/org/bukkit/event/Event.java @@ -417,6 +417,13 @@ public abstract class Event { * @see org.bukkit.event.entity.EntityDamageByEntityEvent */ ENTITY_DAMAGEDBY_ENTITY (Category.LIVING_ENTITY), + + /** + * Called when a LivingEntity is damaged by a projectile Entity + * + * @see org.bukkit.event.entity.EntityDamageByProjectileEvent + */ + ENTITY_DAMAGEDBY_PROJECTILE (Category.LIVING_ENTITY), /** * Called when a LivingEntity is damaged with no source. diff --git a/src/main/java/org/bukkit/event/entity/EntityDamageByProjectileEvent.java b/src/main/java/org/bukkit/event/entity/EntityDamageByProjectileEvent.java new file mode 100644 index 00000000..96529bd6 --- /dev/null +++ b/src/main/java/org/bukkit/event/entity/EntityDamageByProjectileEvent.java @@ -0,0 +1,35 @@ +package org.bukkit.event.entity; + +import java.util.Random; + +import org.bukkit.entity.Entity; + +public class EntityDamageByProjectileEvent extends EntityDamageByEntityEvent { + + private Entity projectile; + private boolean bounce; + + public EntityDamageByProjectileEvent(Entity damager, Entity damagee, Entity projectile, DamageCause cause, int damage) { + super(damager, damagee, cause, damage); + this.projectile = projectile; + Random random = new Random(); + this.bounce = random.nextBoolean(); + } + + /** + * The projectile used to cause the event + * @return the projectile + */ + public Entity getProjectile() { + return projectile; + } + + public void setBounce(boolean bounce){ + this.bounce = bounce; + } + + public boolean getBounce(){ + return bounce; + } + +} diff --git a/src/main/java/org/bukkit/event/entity/EntityListener.java b/src/main/java/org/bukkit/event/entity/EntityListener.java index da21f0d8..03bc5ba0 100644 --- a/src/main/java/org/bukkit/event/entity/EntityListener.java +++ b/src/main/java/org/bukkit/event/entity/EntityListener.java @@ -15,6 +15,12 @@ public class EntityListener implements Listener { public void onEntityDamageByEntity(EntityDamageByEntityEvent event) { } + public void onEntityDamageByProjectile(EntityDamageByProjectileEvent event) { + } + public void onEntityCombust(EntityCombustEvent event) { } + + public void onEntityDamage(EntityDamageEvent event) { + } } diff --git a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java index 9288f000..5ed12363 100644 --- a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java +++ b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java @@ -21,6 +21,8 @@ import org.bukkit.event.block.*; import org.bukkit.event.entity.EntityCombustEvent; import org.bukkit.event.entity.EntityDamageByBlockEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageByProjectileEvent; +import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityListener; import org.bukkit.event.player.*; import org.bukkit.event.server.PluginEvent; @@ -216,6 +218,12 @@ public final class JavaPluginLoader implements PluginLoader { case ENTITY_DAMAGEDBY_ENTITY: trueListener.onEntityDamageByEntity((EntityDamageByEntityEvent)event); break; + case ENTITY_DAMAGEDBY_PROJECTILE: + trueListener.onEntityDamageByProjectile((EntityDamageByProjectileEvent)event); + break; + case ENTITY_DAMAGED: + trueListener.onEntityDamage((EntityDamageEvent)event); + break; case ENTITY_DEATH: // TODO: ENTITY_DEATH hook break;