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