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