79 lines
2.6 KiB
Diff
79 lines
2.6 KiB
Diff
|
--- ../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
|
||
|
}
|
||
|
}
|
||
|
|