package net.minecraft.entity.ai;
import net.minecraft.entity.EntityCreature;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
public class EntityAITempt extends EntityAIBase
{
/** The entity using this AI that is tempted by the player. */
private EntityCreature temptedEntity;
private double field_75282_b;
/** X position of player tempting this mob */
private double targetX;
/** Y position of player tempting this mob */
private double targetY;
/** Z position of player tempting this mob */
private double targetZ;
private double field_75278_f;
private double field_75279_g;
/** The player that is tempting the entity that is using this AI. */
private EntityPlayer temptingPlayer;
/**
* A counter that is decremented each time the shouldExecute method is called. The shouldExecute method will always
* return false if delayTemptCounter is greater than 0.
*/
private int delayTemptCounter;
/** True if this EntityAITempt task is running */
private boolean isRunning;
private Item field_151484_k;
/** Whether the entity using this AI will be scared by the tempter's sudden movement. */
private boolean scaredByPlayerMovement;
private boolean field_75286_m;
private static final String __OBFID = "CL_00001616";
public EntityAITempt(EntityCreature p_i45316_1_, double p_i45316_2_, Item p_i45316_4_, boolean p_i45316_5_)
{
this.temptedEntity = p_i45316_1_;
this.field_75282_b = p_i45316_2_;
this.field_151484_k = p_i45316_4_;
this.scaredByPlayerMovement = p_i45316_5_;
this.setMutexBits(3);
}
/**
* Returns whether the EntityAIBase should begin execution.
*/
public boolean shouldExecute()
{
if (this.delayTemptCounter > 0)
{
--this.delayTemptCounter;
return false;
}
else
{
this.temptingPlayer = this.temptedEntity.worldObj.getClosestPlayerToEntity(this.temptedEntity, 10.0D);
if (this.temptingPlayer == null)
{
return false;
}
else
{
ItemStack itemstack = this.temptingPlayer.getCurrentEquippedItem();
return itemstack == null ? false : itemstack.getItem() == this.field_151484_k;
}
}
}
/**
* Returns whether an in-progress EntityAIBase should continue executing
*/
public boolean continueExecuting()
{
if (this.scaredByPlayerMovement)
{
if (this.temptedEntity.getDistanceSqToEntity(this.temptingPlayer) < 36.0D)
{
if (this.temptingPlayer.getDistanceSq(this.targetX, this.targetY, this.targetZ) > 0.010000000000000002D)
{
return false;
}
if (Math.abs((double)this.temptingPlayer.rotationPitch - this.field_75278_f) > 5.0D || Math.abs((double)this.temptingPlayer.rotationYaw - this.field_75279_g) > 5.0D)
{
return false;
}
}
else
{
this.targetX = this.temptingPlayer.posX;
this.targetY = this.temptingPlayer.posY;
this.targetZ = this.temptingPlayer.posZ;
}
this.field_75278_f = (double)this.temptingPlayer.rotationPitch;
this.field_75279_g = (double)this.temptingPlayer.rotationYaw;
}
return this.shouldExecute();
}
/**
* Execute a one shot task or start executing a continuous task
*/
public void startExecuting()
{
this.targetX = this.temptingPlayer.posX;
this.targetY = this.temptingPlayer.posY;
this.targetZ = this.temptingPlayer.posZ;
this.isRunning = true;
this.field_75286_m = this.temptedEntity.getNavigator().getAvoidsWater();
this.temptedEntity.getNavigator().setAvoidsWater(false);
}
/**
* Resets the task
*/
public void resetTask()
{
this.temptingPlayer = null;
this.temptedEntity.getNavigator().clearPathEntity();
this.delayTemptCounter = 100;
this.isRunning = false;
this.temptedEntity.getNavigator().setAvoidsWater(this.field_75286_m);
}
/**
* Updates the task
*/
public void updateTask()
{
this.temptedEntity.getLookHelper().setLookPositionWithEntity(this.temptingPlayer, 30.0F, (float)this.temptedEntity.getVerticalFaceSpeed());
if (this.temptedEntity.getDistanceSqToEntity(this.temptingPlayer) < 6.25D)
{
this.temptedEntity.getNavigator().clearPathEntity();
}
else
{
this.temptedEntity.getNavigator().tryMoveToEntityLiving(this.temptingPlayer, this.field_75282_b);
}
}
/**
* @see #isRunning
*/
public boolean isRunning()
{
return this.isRunning;
}
}