001 package net.minecraft.src;
002
003 public class EntityAICreeperSwell extends EntityAIBase
004 {
005 /** The creeper that is swelling. */
006 EntityCreeper swellingCreeper;
007
008 /**
009 * The creeper's attack target. This is used for the changing of the creeper's state.
010 */
011 EntityLiving creeperAttackTarget;
012
013 public EntityAICreeperSwell(EntityCreeper par1EntityCreeper)
014 {
015 this.swellingCreeper = par1EntityCreeper;
016 this.setMutexBits(1);
017 }
018
019 /**
020 * Returns whether the EntityAIBase should begin execution.
021 */
022 public boolean shouldExecute()
023 {
024 EntityLiving var1 = this.swellingCreeper.getAttackTarget();
025 return this.swellingCreeper.getCreeperState() > 0 || var1 != null && this.swellingCreeper.getDistanceSqToEntity(var1) < 9.0D;
026 }
027
028 /**
029 * Execute a one shot task or start executing a continuous task
030 */
031 public void startExecuting()
032 {
033 this.swellingCreeper.getNavigator().clearPathEntity();
034 this.creeperAttackTarget = this.swellingCreeper.getAttackTarget();
035 }
036
037 /**
038 * Resets the task
039 */
040 public void resetTask()
041 {
042 this.creeperAttackTarget = null;
043 }
044
045 /**
046 * Updates the task
047 */
048 public void updateTask()
049 {
050 if (this.creeperAttackTarget == null)
051 {
052 this.swellingCreeper.setCreeperState(-1);
053 }
054 else if (this.swellingCreeper.getDistanceSqToEntity(this.creeperAttackTarget) > 49.0D)
055 {
056 this.swellingCreeper.setCreeperState(-1);
057 }
058 else if (!this.swellingCreeper.getEntitySenses().canSee(this.creeperAttackTarget))
059 {
060 this.swellingCreeper.setCreeperState(-1);
061 }
062 else
063 {
064 this.swellingCreeper.setCreeperState(1);
065 }
066 }
067 }