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 }