73 lines
2.5 KiB
Java
Executable file
73 lines
2.5 KiB
Java
Executable file
package game.ai;
|
|
|
|
import game.entity.types.EntityLiving;
|
|
import game.world.BoundingBox;
|
|
|
|
public class EntityAIHurtByTarget extends EntityAITarget
|
|
{
|
|
private boolean entityCallsForHelp;
|
|
|
|
/** Store the previous revengeTimer value */
|
|
private int revengeTimerOld;
|
|
private final Class[] targetClasses;
|
|
|
|
public EntityAIHurtByTarget(EntityLiving creatureIn, boolean entityCallsForHelpIn, Class... targetClassesIn)
|
|
{
|
|
super(creatureIn, false);
|
|
this.entityCallsForHelp = entityCallsForHelpIn;
|
|
this.targetClasses = targetClassesIn;
|
|
this.setMutexBits(1);
|
|
}
|
|
|
|
/**
|
|
* Returns whether the EntityAIBase should begin execution.
|
|
*/
|
|
public boolean shouldExecute()
|
|
{
|
|
int i = this.taskOwner.getAttackedTime();
|
|
return i != this.revengeTimerOld && this.isSuitableTarget(this.taskOwner.getAttackedBy());
|
|
}
|
|
|
|
/**
|
|
* Execute a one shot task or start executing a continuous task
|
|
*/
|
|
public void startExecuting()
|
|
{
|
|
this.taskOwner.setAttackTarget(this.taskOwner.getAttackedBy());
|
|
this.revengeTimerOld = this.taskOwner.getAttackedTime();
|
|
|
|
if (this.entityCallsForHelp)
|
|
{
|
|
double d0 = this.getTargetDistance();
|
|
|
|
for (EntityLiving entitycreature : this.taskOwner.worldObj.getEntitiesWithinAABB(this.taskOwner.getClass(), (new BoundingBox(this.taskOwner.posX, this.taskOwner.posY, this.taskOwner.posZ, this.taskOwner.posX + 1.0D, this.taskOwner.posY + 1.0D, this.taskOwner.posZ + 1.0D)).expand(d0, 10.0D, d0)))
|
|
{
|
|
if (this.taskOwner != entitycreature && /* !(entitycreature.isPlayer()) && */ entitycreature.getAttackTarget() == null) // && !entitycreature.isOnSameTeam(this.taskOwner.getAITarget()))
|
|
{
|
|
boolean flag = false;
|
|
|
|
for (Class oclass : this.targetClasses)
|
|
{
|
|
if (entitycreature.getClass() == oclass)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!flag)
|
|
{
|
|
this.setEntityAttackTarget(entitycreature, this.taskOwner.getAttackedBy());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
super.startExecuting();
|
|
}
|
|
|
|
protected void setEntityAttackTarget(EntityLiving creatureIn, EntityLiving entityLivingBaseIn)
|
|
{
|
|
creatureIn.setAttackTarget(entityLivingBaseIn);
|
|
}
|
|
}
|