--- ../src-base/minecraft/net/minecraft/entity/monster/EntityCreeper.java +++ ../src-work/minecraft/net/minecraft/entity/monster/EntityCreeper.java @@ -23,6 +23,11 @@ import net.minecraft.util.DamageSource; import net.minecraft.world.World; +// CraftBukkit start +import org.bukkit.craftbukkit.event.CraftEventFactory; +import org.bukkit.event.entity.ExplosionPrimeEvent; +// CraftBukkit end + public class EntityCreeper extends EntityMob { private int lastActiveTime; @@ -207,9 +212,35 @@ public void onStruckByLightning(EntityLightningBolt p_70077_1_) { super.onStruckByLightning(p_70077_1_); - this.dataWatcher.updateObject(17, Byte.valueOf((byte)1)); + + // Cauldron start + if (p_70077_1_ != null) + { + // CraftBukkit start + if (CraftEventFactory.callCreeperPowerEvent(this, p_70077_1_, org.bukkit.event.entity.CreeperPowerEvent.PowerCause.LIGHTNING).isCancelled()) + { + return; + } + } + // Cauldron end + + this.setPowered(true); } + public void setPowered(boolean powered) + { + if (!powered) + { + this.dataWatcher.updateObject(17, Byte.valueOf((byte) 0)); + } + else + { + this.dataWatcher.updateObject(17, Byte.valueOf((byte) 1)); + } + + // CraftBukkit end + } + protected boolean interact(EntityPlayer p_70085_1_) { ItemStack itemstack = p_70085_1_.inventory.getCurrentItem(); @@ -235,17 +266,22 @@ if (!this.worldObj.isRemote) { boolean flag = this.worldObj.getGameRules().getGameRuleBooleanValue("mobGriefing"); + // CraftBukkit start + float radius = this.getPowered() ? 6.0F : 3.0F; + ExplosionPrimeEvent event = new ExplosionPrimeEvent(this.getBukkitEntity(), radius, false); + this.worldObj.getServer().getPluginManager().callEvent(event); - if (this.getPowered()) + if (!event.isCancelled()) { - this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, (float)(this.explosionRadius * 2), flag); + this.worldObj.newExplosion(this, this.posX, this.posY, this.posZ, event.getRadius(), event.getFire(), flag); + this.setDead(); } else { - this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, (float)this.explosionRadius, flag); + this.timeSinceIgnited = 0; } - this.setDead(); + // CraftBukkit end } }