95 lines
3.7 KiB
Diff
95 lines
3.7 KiB
Diff
--- ../src-base/minecraft/net/minecraft/entity/monster/EntitySlime.java
|
|
+++ ../src-work/minecraft/net/minecraft/entity/monster/EntitySlime.java
|
|
@@ -14,12 +14,21 @@
|
|
import net.minecraft.world.biome.BiomeGenBase;
|
|
import net.minecraft.world.chunk.Chunk;
|
|
|
|
+// CraftBukkit start
|
|
+import org.bukkit.craftbukkit.entity.CraftEntity;
|
|
+import org.bukkit.craftbukkit.event.CraftEventFactory;
|
|
+import org.bukkit.event.entity.EntityTargetEvent;
|
|
+import org.bukkit.event.entity.SlimeSplitEvent;
|
|
+import net.minecraft.entity.Entity;
|
|
+// CraftBukkit end
|
|
+
|
|
public class EntitySlime extends EntityLiving implements IMob
|
|
{
|
|
public float squishAmount;
|
|
public float squishFactor;
|
|
public float prevSquishFactor;
|
|
private int slimeJumpDelay;
|
|
+ private Entity lastTarget; // CraftBukkit
|
|
private static final String __OBFID = "CL_00001698";
|
|
|
|
public EntitySlime(World p_i1742_1_)
|
|
@@ -37,7 +46,7 @@
|
|
this.dataWatcher.addObject(16, new Byte((byte)1));
|
|
}
|
|
|
|
- protected void setSlimeSize(int p_70799_1_)
|
|
+ public void setSlimeSize(int p_70799_1_) // CraftBukkit - protected -> public
|
|
{
|
|
this.dataWatcher.updateObject(16, new Byte((byte)p_70799_1_));
|
|
this.setSize(0.6F * (float)p_70799_1_, 0.6F * (float)p_70799_1_);
|
|
@@ -131,8 +140,27 @@
|
|
protected void updateEntityActionState()
|
|
{
|
|
this.despawnEntity();
|
|
- EntityPlayer entityplayer = this.worldObj.getClosestVulnerablePlayerToEntity(this, 16.0D);
|
|
+ // CraftBukkit start
|
|
+ Entity entityplayer = this.worldObj.getClosestVulnerablePlayerToEntity(this, 16.0D); // EntityPlayer -> Entity
|
|
+ EntityTargetEvent event = null;
|
|
|
|
+ if (entityplayer != null && !entityplayer.equals(lastTarget))
|
|
+ {
|
|
+ event = CraftEventFactory.callEntityTargetEvent(this, entityplayer, EntityTargetEvent.TargetReason.CLOSEST_PLAYER);
|
|
+ }
|
|
+ else if (lastTarget != null && entityplayer == null)
|
|
+ {
|
|
+ event = CraftEventFactory.callEntityTargetEvent(this, entityplayer, EntityTargetEvent.TargetReason.FORGOT_TARGET);
|
|
+ }
|
|
+
|
|
+ if (event != null && !event.isCancelled())
|
|
+ {
|
|
+ entityplayer = event.getTarget() == null ? null : ((CraftEntity) event.getTarget()).getHandle();
|
|
+ }
|
|
+
|
|
+ this.lastTarget = entityplayer;
|
|
+ // CraftBukkit end
|
|
+
|
|
if (entityplayer != null)
|
|
{
|
|
this.faceEntity(entityplayer, 10.0F, 20.0F);
|
|
@@ -190,7 +218,22 @@
|
|
if (!this.worldObj.isRemote && i > 1 && this.getHealth() <= 0.0F)
|
|
{
|
|
int j = 2 + this.rand.nextInt(3);
|
|
+ // CraftBukkit start
|
|
+ SlimeSplitEvent event = new SlimeSplitEvent((org.bukkit.entity.Slime) this.getBukkitEntity(), j);
|
|
+ this.worldObj.getServer().getPluginManager().callEvent(event);
|
|
|
|
+ if (!event.isCancelled() && event.getCount() > 0)
|
|
+ {
|
|
+ j = event.getCount();
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ super.setDead();
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ // CraftBukkit end
|
|
+
|
|
for (int k = 0; k < j; ++k)
|
|
{
|
|
float f = ((float)(k % 2) - 0.5F) * (float)i / 4.0F;
|
|
@@ -198,7 +241,7 @@
|
|
EntitySlime entityslime = this.createInstance();
|
|
entityslime.setSlimeSize(i / 2);
|
|
entityslime.setLocationAndAngles(this.posX + (double)f, this.posY + 0.5D, this.posZ + (double)f1, this.rand.nextFloat() * 360.0F, 0.0F);
|
|
- this.worldObj.spawnEntityInWorld(entityslime);
|
|
+ this.worldObj.addEntity(entityslime, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.SLIME_SPLIT); // CraftBukkit - SpawnReason
|
|
}
|
|
}
|
|
|