    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    }