-
-
Save RingOfStorms/bcfc4e00555fcedfc0e6 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package net.minecraft.src; | |
public class EntityAIArrowAttack extends EntityAIBase | |
{ | |
/** The entity the AI instance has been applied to */ | |
private final EntityLiving entityHost; | |
/** | |
* The entity (as a RangedAttackMob) the AI instance has been applied to. | |
*/ | |
private final IRangedAttackMob rangedAttackEntityHost; | |
private EntityLivingBase attackTarget; | |
/** | |
* A decrementing tick that spawns a ranged attack once this value reaches 0. It is then set back to the | |
* maxRangedAttackTime. | |
*/ | |
private int rangedAttackTime; | |
private double entityMoveSpeed; | |
private int field_75318_f; | |
private int field_96561_g; | |
/** | |
* The maximum time the AI has to wait before peforming another ranged attack. | |
*/ | |
private int maxRangedAttackTime; | |
private float field_96562_i; | |
private float field_82642_h; | |
public EntityAIArrowAttack(IRangedAttackMob par1IRangedAttackMob, double par2, int par4, float par5) | |
{ | |
this(par1IRangedAttackMob, par2, par4, par4, par5); | |
} | |
public EntityAIArrowAttack(IRangedAttackMob par1IRangedAttackMob, double par2, int par4, int par5, float par6) | |
{ | |
this.rangedAttackTime = -1; | |
if (!(par1IRangedAttackMob instanceof EntityLivingBase)) | |
{ | |
throw new IllegalArgumentException("ArrowAttackGoal requires Mob implements RangedAttackMob"); | |
} | |
else | |
{ | |
this.rangedAttackEntityHost = par1IRangedAttackMob; | |
this.entityHost = (EntityLiving)par1IRangedAttackMob; | |
this.entityMoveSpeed = par2; | |
this.field_96561_g = par4; | |
this.maxRangedAttackTime = par5; | |
this.field_96562_i = par6; | |
this.field_82642_h = par6 * par6; | |
this.setMutexBits(3); | |
} | |
} | |
/** | |
* Returns whether the EntityAIBase should begin execution. | |
*/ | |
public boolean shouldExecute() | |
{ | |
EntityLivingBase var1 = this.entityHost.getAttackTarget(); | |
if (var1 == null) | |
{ | |
return false; | |
} | |
else | |
{ | |
this.attackTarget = var1; | |
return true; | |
} | |
} | |
/** | |
* Returns whether an in-progress EntityAIBase should continue executing | |
*/ | |
public boolean continueExecuting() | |
{ | |
return this.shouldExecute() || !this.entityHost.getNavigator().noPath(); | |
} | |
/** | |
* Resets the task | |
*/ | |
public void resetTask() | |
{ | |
this.attackTarget = null; | |
this.field_75318_f = 0; | |
this.rangedAttackTime = -1; | |
} | |
/** | |
* Updates the task | |
*/ | |
public void updateTask() | |
{ | |
double var1 = this.entityHost.getDistanceSq(this.attackTarget.posX, this.attackTarget.boundingBox.minY, this.attackTarget.posZ); | |
boolean var3 = this.entityHost.getEntitySenses().canSee(this.attackTarget); | |
if (var3) | |
{ | |
++this.field_75318_f; | |
} | |
else | |
{ | |
this.field_75318_f = 0; | |
} | |
if (var1 <= (double)this.field_82642_h && this.field_75318_f >= 20) | |
{ | |
this.entityHost.getNavigator().clearPathEntity(); | |
} | |
else | |
{ | |
this.entityHost.getNavigator().tryMoveToEntityLiving(this.attackTarget, this.entityMoveSpeed); | |
} | |
this.entityHost.getLookHelper().setLookPositionWithEntity(this.attackTarget, 30.0F, 30.0F); | |
float var4; | |
if (--this.rangedAttackTime == 0) | |
{ | |
if (var1 > (double)this.field_82642_h || !var3) | |
{ | |
return; | |
} | |
var4 = MathHelper.sqrt_double(var1) / this.field_96562_i; | |
float var5 = var4; | |
if (var4 < 0.1F) | |
{ | |
var5 = 0.1F; | |
} | |
if (var5 > 1.0F) | |
{ | |
var5 = 1.0F; | |
} | |
this.rangedAttackEntityHost.attackEntityWithRangedAttack(this.attackTarget, var5); | |
this.rangedAttackTime = MathHelper.floor_float(var4 * (float)(this.maxRangedAttackTime - this.field_96561_g) + (float)this.field_96561_g); | |
} | |
else if (this.rangedAttackTime < 0) | |
{ | |
var4 = MathHelper.sqrt_double(var1) / this.field_96562_i; | |
this.rangedAttackTime = MathHelper.floor_float(var4 * (float)(this.maxRangedAttackTime - this.field_96561_g) + (float)this.field_96561_g); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment