    001    package net.minecraft.entity.ai;
    002
    003    import net.minecraft.entity.EntityLiving;
    004    import net.minecraft.entity.passive.EntityTameable;
    005
    006    public class EntityAISit extends EntityAIBase
    007    {
    008        private EntityTameable theEntity;
    009
    010        /** If the EntityTameable is sitting. */
    011        private boolean isSitting = false;
    012
    013        public EntityAISit(EntityTameable par1EntityTameable)
    014        {
    015            this.theEntity = par1EntityTameable;
    016            this.setMutexBits(5);
    017        }
    018
    019        /**
    020         * Returns whether the EntityAIBase should begin execution.
    021         */
    022        public boolean shouldExecute()
    023        {
    024            if (!this.theEntity.isTamed())
    025            {
    026                return false;
    027            }
    028            else if (this.theEntity.isInWater())
    029            {
    030                return false;
    031            }
    032            else if (!this.theEntity.onGround)
    033            {
    034                return false;
    035            }
    036            else
    037            {
    038                EntityLiving var1 = this.theEntity.getOwner();
    039                return var1 == null ? true : (this.theEntity.getDistanceSqToEntity(var1) < 144.0D && var1.getAITarget() != null ? false : this.isSitting);
    040            }
    041        }
    042
    043        /**
    044         * Execute a one shot task or start executing a continuous task
    045         */
    046        public void startExecuting()
    047        {
    048            this.theEntity.getNavigator().clearPathEntity();
    049            this.theEntity.setSitting(true);
    050        }
    051
    052        /**
    053         * Resets the task
    054         */
    055        public void resetTask()
    056        {
    057            this.theEntity.setSitting(false);
    058        }
    059
    060        /**
    061         * Sets the sitting flag.
    062         */
    063        public void setSitting(boolean par1)
    064        {
    065            this.isSitting = par1;
    066        }
    067    }