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.itemID ? true : this.theWolf.isBreedingItem(var2));
076 }
077 }