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