001 package net.minecraft.src; 002 003 public class EntityAIOcelotAttack extends EntityAIBase 004 { 005 World theWorld; 006 EntityLiving theEntity; 007 EntityLiving theVictim; 008 int attackCountdown = 0; 009 010 public EntityAIOcelotAttack(EntityLiving par1EntityLiving) 011 { 012 this.theEntity = par1EntityLiving; 013 this.theWorld = par1EntityLiving.worldObj; 014 this.setMutexBits(3); 015 } 016 017 /** 018 * Returns whether the EntityAIBase should begin execution. 019 */ 020 public boolean shouldExecute() 021 { 022 EntityLiving var1 = this.theEntity.getAttackTarget(); 023 024 if (var1 == null) 025 { 026 return false; 027 } 028 else 029 { 030 this.theVictim = var1; 031 return true; 032 } 033 } 034 035 /** 036 * Returns whether an in-progress EntityAIBase should continue executing 037 */ 038 public boolean continueExecuting() 039 { 040 return !this.theVictim.isEntityAlive() ? false : (this.theEntity.getDistanceSqToEntity(this.theVictim) > 225.0D ? false : !this.theEntity.getNavigator().noPath() || this.shouldExecute()); 041 } 042 043 /** 044 * Resets the task 045 */ 046 public void resetTask() 047 { 048 this.theVictim = null; 049 this.theEntity.getNavigator().clearPathEntity(); 050 } 051 052 /** 053 * Updates the task 054 */ 055 public void updateTask() 056 { 057 this.theEntity.getLookHelper().setLookPositionWithEntity(this.theVictim, 30.0F, 30.0F); 058 double var1 = (double)(this.theEntity.width * 2.0F * this.theEntity.width * 2.0F); 059 double var3 = this.theEntity.getDistanceSq(this.theVictim.posX, this.theVictim.boundingBox.minY, this.theVictim.posZ); 060 float var5 = 0.23F; 061 062 if (var3 > var1 && var3 < 16.0D) 063 { 064 var5 = 0.4F; 065 } 066 else if (var3 < 225.0D) 067 { 068 var5 = 0.18F; 069 } 070 071 this.theEntity.getNavigator().tryMoveToEntityLiving(this.theVictim, var5); 072 this.attackCountdown = Math.max(this.attackCountdown - 1, 0); 073 074 if (var3 <= var1) 075 { 076 if (this.attackCountdown <= 0) 077 { 078 this.attackCountdown = 20; 079 this.theEntity.attackEntityAsMob(this.theVictim); 080 } 081 } 082 } 083 }