001 package net.minecraft.src; 002 003 public class EntityAICreeperSwell extends EntityAIBase 004 { 005 /** The creeper that is swelling. */ 006 EntityCreeper swellingCreeper; 007 008 /** 009 * The creeper's attack target. This is used for the changing of the creeper's state. 010 */ 011 EntityLiving creeperAttackTarget; 012 013 public EntityAICreeperSwell(EntityCreeper par1EntityCreeper) 014 { 015 this.swellingCreeper = par1EntityCreeper; 016 this.setMutexBits(1); 017 } 018 019 /** 020 * Returns whether the EntityAIBase should begin execution. 021 */ 022 public boolean shouldExecute() 023 { 024 EntityLiving var1 = this.swellingCreeper.getAttackTarget(); 025 return this.swellingCreeper.getCreeperState() > 0 || var1 != null && this.swellingCreeper.getDistanceSqToEntity(var1) < 9.0D; 026 } 027 028 /** 029 * Execute a one shot task or start executing a continuous task 030 */ 031 public void startExecuting() 032 { 033 this.swellingCreeper.getNavigator().clearPathEntity(); 034 this.creeperAttackTarget = this.swellingCreeper.getAttackTarget(); 035 } 036 037 /** 038 * Resets the task 039 */ 040 public void resetTask() 041 { 042 this.creeperAttackTarget = null; 043 } 044 045 /** 046 * Updates the task 047 */ 048 public void updateTask() 049 { 050 if (this.creeperAttackTarget == null) 051 { 052 this.swellingCreeper.setCreeperState(-1); 053 } 054 else if (this.swellingCreeper.getDistanceSqToEntity(this.creeperAttackTarget) > 49.0D) 055 { 056 this.swellingCreeper.setCreeperState(-1); 057 } 058 else if (!this.swellingCreeper.getEntitySenses().canSee(this.creeperAttackTarget)) 059 { 060 this.swellingCreeper.setCreeperState(-1); 061 } 062 else 063 { 064 this.swellingCreeper.setCreeperState(1); 065 } 066 } 067 }