summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndrew Ardill <andrew.ardill@gmail.com>2011-11-29 21:26:55 +1100
committerAndrew Ardill <andrew.ardill@gmail.com>2011-11-29 21:26:55 +1100
commita1ad0c0103fd565e28b6d759100cdbc14e0974e5 (patch)
tree9e729444949604d4c5361ac6bb3884ad243a6337 /src
parent2759809ecba4e5f2d8c8ae51f5781a0c1a96b0c1 (diff)
downloadcraftbukkit-a1ad0c0103fd565e28b6d759100cdbc14e0974e5.tar
craftbukkit-a1ad0c0103fd565e28b6d759100cdbc14e0974e5.tar.gz
craftbukkit-a1ad0c0103fd565e28b6d759100cdbc14e0974e5.tar.lz
craftbukkit-a1ad0c0103fd565e28b6d759100cdbc14e0974e5.tar.xz
craftbukkit-a1ad0c0103fd565e28b6d759100cdbc14e0974e5.zip
Add events for EntitySmallFireball
Diffstat (limited to 'src')
-rw-r--r--src/main/java/net/minecraft/server/EntitySmallFireball.java45
1 files changed, 43 insertions, 2 deletions
diff --git a/src/main/java/net/minecraft/server/EntitySmallFireball.java b/src/main/java/net/minecraft/server/EntitySmallFireball.java
index b3673b8f..853f32b7 100644
--- a/src/main/java/net/minecraft/server/EntitySmallFireball.java
+++ b/src/main/java/net/minecraft/server/EntitySmallFireball.java
@@ -1,5 +1,14 @@
package net.minecraft.server;
+// CraftBukkit start
+import org.bukkit.entity.Projectile;
+import org.bukkit.event.entity.EntityCombustByEntityEvent;
+import org.bukkit.event.entity.EntityDamageByEntityEvent;
+import org.bukkit.event.entity.EntityDamageEvent;
+import org.bukkit.event.entity.ProjectileHitEvent;
+import org.bukkit.plugin.PluginManager;
+// CraftBukkit end
+
public class EntitySmallFireball extends EntityFireball {
public EntitySmallFireball(World world) {
@@ -14,9 +23,41 @@ public class EntitySmallFireball extends EntityFireball {
protected void a(MovingObjectPosition movingobjectposition) {
if (!this.world.isStatic) {
+ // CraftBukkit start - projectile hit event
+ ProjectileHitEvent phe = new ProjectileHitEvent((Projectile) this.getBukkitEntity());
+ final PluginManager pluginManager = this.world.getServer().getPluginManager();
+ pluginManager.callEvent(phe);
+ // CraftBukkit end
if (movingobjectposition.entity != null) {
- if (!movingobjectposition.entity.ax() && movingobjectposition.entity.damageEntity(DamageSource.fireball(this, this.shooter), 5)) {
- movingobjectposition.entity.j(5);
+ // CraftBukkit start - entity damage by entity event + combust event
+ if (!movingobjectposition.entity.ax()) { // check if not fireproof
+ boolean stick;
+ org.bukkit.entity.Entity damagee = movingobjectposition.entity.getBukkitEntity();
+ Projectile projectile = (Projectile) this.getBukkitEntity();
+ if (movingobjectposition.entity instanceof EntityLiving) {
+
+ EntityDamageByEntityEvent event = new EntityDamageByEntityEvent(projectile, damagee, EntityDamageEvent.DamageCause.PROJECTILE, 5);
+ pluginManager.callEvent(event);
+
+ if (event.isCancelled()) {
+ stick = !projectile.doesBounce();
+ } else {
+ // this function returns if the fireball should stick in or not, i.e. !bounce
+ stick = movingobjectposition.entity.damageEntity(DamageSource.fireball(this, this.shooter), event.getDamage());
+ }
+ } else {
+ stick = movingobjectposition.entity.damageEntity(DamageSource.fireball(this, this.shooter), 5);
+ }
+ if (stick) {
+ // if the fireball 'sticks', ignite the target
+ EntityCombustByEntityEvent combustEvent = new EntityCombustByEntityEvent(projectile, damagee, 5);
+ pluginManager.callEvent(combustEvent);
+
+ if (!combustEvent.isCancelled()) {
+ movingobjectposition.entity.j(combustEvent.getDuration());
+ }
+ }
+ // CraftBukkit end
}
} else {
int i = movingobjectposition.b;