From 40364131cbaa14de08fa7f8afba8aae5c92ece5e Mon Sep 17 00:00:00 2001 From: Bukkit/Spigot <noreply+git-bukkit@papermc.io> 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. By: Andrew Ardill <andrew.ardill@gmail.com> --- .../main/java/org/bukkit/entity/Entity.java | 2 +- .../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 paper-api/src/main/java/org/bukkit/entity/Fireball.java create mode 100644 paper-api/src/main/java/org/bukkit/entity/Fish.java create mode 100644 paper-api/src/main/java/org/bukkit/event/entity/EntityDamageByProjectileEvent.java diff --git a/paper-api/src/main/java/org/bukkit/entity/Entity.java b/paper-api/src/main/java/org/bukkit/entity/Entity.java index 42e0cf49b8..aeb8425619 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Entity.java +++ b/paper-api/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/paper-api/src/main/java/org/bukkit/entity/Fireball.java b/paper-api/src/main/java/org/bukkit/entity/Fireball.java new file mode 100644 index 0000000000..424de3013f --- /dev/null +++ b/paper-api/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/paper-api/src/main/java/org/bukkit/entity/Fish.java b/paper-api/src/main/java/org/bukkit/entity/Fish.java new file mode 100644 index 0000000000..44fcede759 --- /dev/null +++ b/paper-api/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/paper-api/src/main/java/org/bukkit/event/Event.java b/paper-api/src/main/java/org/bukkit/event/Event.java index 0e32359b9b..a7399da703 100644 --- a/paper-api/src/main/java/org/bukkit/event/Event.java +++ b/paper-api/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/paper-api/src/main/java/org/bukkit/event/entity/EntityDamageByProjectileEvent.java b/paper-api/src/main/java/org/bukkit/event/entity/EntityDamageByProjectileEvent.java new file mode 100644 index 0000000000..96529bd691 --- /dev/null +++ b/paper-api/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/paper-api/src/main/java/org/bukkit/event/entity/EntityListener.java b/paper-api/src/main/java/org/bukkit/event/entity/EntityListener.java index da21f0d85e..03bc5ba09a 100644 --- a/paper-api/src/main/java/org/bukkit/event/entity/EntityListener.java +++ b/paper-api/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/paper-api/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java b/paper-api/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java index 9288f00018..5ed12363b1 100644 --- a/paper-api/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java +++ b/paper-api/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;