    001    package net.minecraft.src;
    002
    003    public class EntityAIBeg extends EntityAIBase
    004    {
    005        private EntityWolf theWolf;
    006        private EntityPlayer thePlayer;
    007        private World worldObject;
    008        private float minPlayerDistance;
    009        private int field_75384_e;
    010
    011        public EntityAIBeg(EntityWolf par1EntityWolf, float par2)
    012        {
    013            this.theWolf = par1EntityWolf;
    014            this.worldObject = par1EntityWolf.worldObj;
    015            this.minPlayerDistance = par2;
    016            this.setMutexBits(2);
    017        }
    018
    019        /**
    020         * Returns whether the EntityAIBase should begin execution.
    021         */
    022        public boolean shouldExecute()
    023        {
    024            this.thePlayer = this.worldObject.getClosestPlayerToEntity(this.theWolf, (double)this.minPlayerDistance);
    025            return this.thePlayer == null ? false : this.hasPlayerGotBoneInHand(this.thePlayer);
    026        }
    027
    028        /**
    029         * Returns whether an in-progress EntityAIBase should continue executing
    030         */
    031        public boolean continueExecuting()
    032        {
    033            return !this.thePlayer.isEntityAlive() ? false : (this.theWolf.getDistanceSqToEntity(this.thePlayer) > (double)(this.minPlayerDistance * this.minPlayerDistance) ? false : this.field_75384_e > 0 && this.hasPlayerGotBoneInHand(this.thePlayer));
    034        }
    035
    036        /**
    037         * Execute a one shot task or start executing a continuous task
    038         */
    039        public void startExecuting()
    040        {
    041            this.theWolf.func_70918_i(true);
    042            this.field_75384_e = 40 + this.theWolf.getRNG().nextInt(40);
    043        }
    044
    045        /**
    046         * Resets the task
    047         */
    048        public void resetTask()
    049        {
    050            this.theWolf.func_70918_i(false);
    051            this.thePlayer = null;
    052        }
    053
    054        /**
    055         * Updates the task
    056         */
    057        public void updateTask()
    058        {
    059            this.theWolf.getLookHelper().setLookPosition(this.thePlayer.posX, this.thePlayer.posY + (double)this.thePlayer.getEyeHeight(), this.thePlayer.posZ, 10.0F, (float)this.theWolf.getVerticalFaceSpeed());
    060            --this.field_75384_e;
    061        }
    062
    063        /**
    064         * Gets if the Player has the Bone in the hand.
    065         */
    066        private boolean hasPlayerGotBoneInHand(EntityPlayer par1EntityPlayer)
    067        {
    068            ItemStack var2 = par1EntityPlayer.inventory.getCurrentItem();
    069            return var2 == null ? false : (!this.theWolf.isTamed() && var2.itemID == Item.bone.shiftedIndex ? true : this.theWolf.isBreedingItem(var2));
    070        }
    071    }