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    }