You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			153 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Java
		
	
			
		
		
	
	
			153 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Java
		
	
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;
 | 
						|
    }
 | 
						|
} |