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