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