001 package net.minecraft.entity.ai; 002 003 import net.minecraft.entity.EntityLiving; 004 005 public class EntityAILookIdle extends EntityAIBase 006 { 007 /** The entity that is looking idle. */ 008 private EntityLiving idleEntity; 009 010 /** X offset to look at */ 011 private double lookX; 012 013 /** Z offset to look at */ 014 private double lookZ; 015 016 /** 017 * A decrementing tick that stops the entity from being idle once it reaches 0. 018 */ 019 private int idleTime = 0; 020 021 public EntityAILookIdle(EntityLiving par1EntityLiving) 022 { 023 this.idleEntity = par1EntityLiving; 024 this.setMutexBits(3); 025 } 026 027 /** 028 * Returns whether the EntityAIBase should begin execution. 029 */ 030 public boolean shouldExecute() 031 { 032 return this.idleEntity.getRNG().nextFloat() < 0.02F; 033 } 034 035 /** 036 * Returns whether an in-progress EntityAIBase should continue executing 037 */ 038 public boolean continueExecuting() 039 { 040 return this.idleTime >= 0; 041 } 042 043 /** 044 * Execute a one shot task or start executing a continuous task 045 */ 046 public void startExecuting() 047 { 048 double var1 = (Math.PI * 2D) * this.idleEntity.getRNG().nextDouble(); 049 this.lookX = Math.cos(var1); 050 this.lookZ = Math.sin(var1); 051 this.idleTime = 20 + this.idleEntity.getRNG().nextInt(20); 052 } 053 054 /** 055 * Updates the task 056 */ 057 public void updateTask() 058 { 059 --this.idleTime; 060 this.idleEntity.getLookHelper().setLookPosition(this.idleEntity.posX + this.lookX, this.idleEntity.posY + (double)this.idleEntity.getEyeHeight(), this.idleEntity.posZ + this.lookZ, 10.0F, (float)this.idleEntity.getVerticalFaceSpeed()); 061 } 062 }