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    }