--- a/net/minecraft/world/entity/projectile/EntityFireball.java +++ b/net/minecraft/world/entity/projectile/EntityFireball.java @@ -15,11 +15,15 @@ import net.minecraft.world.phys.MovingObjectPosition; import net.minecraft.world.phys.Vec3D; +import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit + public abstract class EntityFireball extends IProjectile { public double dirX; public double dirY; public double dirZ; + public float bukkitYield = 1; // CraftBukkit + public boolean isIncendiary = true; // CraftBukkit protected EntityFireball(EntityTypes entitytypes, World world) { super(entitytypes, world); @@ -29,6 +33,12 @@ this(entitytypes, world); this.setPositionRotation(d0, d1, d2, this.yaw, this.pitch); this.af(); + // CraftBukkit start - Added setDirection method + this.setDirection(d3, d4, d5); + } + + public void setDirection(double d3, double d4, double d5) { + // CraftBukkit end double d6 = (double) MathHelper.sqrt(d3 * d3 + d4 * d4 + d5 * d5); if (d6 != 0.0D) { @@ -64,6 +74,12 @@ if (movingobjectposition.getType() != MovingObjectPosition.EnumMovingObjectType.MISS) { this.a(movingobjectposition); + + // CraftBukkit start - Fire ProjectileHitEvent + if (this.dead) { + CraftEventFactory.callProjectileHitEvent(this, movingobjectposition); + } + // CraftBukkit end } this.checkBlockCollisions(); @@ -148,6 +164,11 @@ Entity entity = damagesource.getEntity(); if (entity != null) { + // CraftBukkit start + if (CraftEventFactory.handleNonLivingEntityDamageEvent(this, damagesource, f)) { + return false; + } + // CraftBukkit end Vec3D vec3d = entity.getLookDirection(); this.setMot(vec3d);