77 lines
2.3 KiB
Java
Executable file
77 lines
2.3 KiB
Java
Executable file
package common.ai;
|
|
|
|
import common.entity.animal.EntityWolf;
|
|
import common.entity.npc.EntityNPC;
|
|
import common.init.Items;
|
|
import common.item.ItemStack;
|
|
import common.world.World;
|
|
|
|
public class EntityAIBeg extends EntityAIBase
|
|
{
|
|
private EntityWolf theWolf;
|
|
private EntityNPC thePlayer;
|
|
private World worldObject;
|
|
private float minPlayerDistance;
|
|
private int timeoutCounter;
|
|
|
|
public EntityAIBeg(EntityWolf wolf, float minDistance)
|
|
{
|
|
this.theWolf = wolf;
|
|
this.worldObject = wolf.worldObj;
|
|
this.minPlayerDistance = minDistance;
|
|
this.setMutexBits(2);
|
|
}
|
|
|
|
/**
|
|
* Returns whether the EntityAIBase should begin execution.
|
|
*/
|
|
public boolean shouldExecute()
|
|
{
|
|
this.thePlayer = this.worldObject.getClosestPlayerToEntity(this.theWolf, (double)this.minPlayerDistance);
|
|
return this.thePlayer == null ? false : this.hasPlayerGotBoneInHand(this.thePlayer);
|
|
}
|
|
|
|
/**
|
|
* Returns whether an in-progress EntityAIBase should continue executing
|
|
*/
|
|
public boolean continueExecuting()
|
|
{
|
|
return !this.thePlayer.isEntityAlive() ? false : (this.theWolf.getDistanceSqToEntity(this.thePlayer) > (double)(this.minPlayerDistance * this.minPlayerDistance) ? false : this.timeoutCounter > 0 && this.hasPlayerGotBoneInHand(this.thePlayer));
|
|
}
|
|
|
|
/**
|
|
* Execute a one shot task or start executing a continuous task
|
|
*/
|
|
public void startExecuting()
|
|
{
|
|
this.theWolf.setBegging(true);
|
|
this.timeoutCounter = 40 + this.theWolf.getRNG().zrange(40);
|
|
}
|
|
|
|
/**
|
|
* Resets the task
|
|
*/
|
|
public void resetTask()
|
|
{
|
|
this.theWolf.setBegging(false);
|
|
this.thePlayer = null;
|
|
}
|
|
|
|
/**
|
|
* Updates the task
|
|
*/
|
|
public void updateTask()
|
|
{
|
|
this.theWolf.getLookHelper().setLookPosition(this.thePlayer.posX, this.thePlayer.posY + (double)this.thePlayer.getEyeHeight(), this.thePlayer.posZ, 10.0F, (float)this.theWolf.getVerticalFaceSpeed());
|
|
--this.timeoutCounter;
|
|
}
|
|
|
|
/**
|
|
* Gets if the Player has the Bone in the hand.
|
|
*/
|
|
private boolean hasPlayerGotBoneInHand(EntityNPC player)
|
|
{
|
|
ItemStack itemstack = player.getHeldItem();
|
|
return itemstack == null ? false : (!this.theWolf.isTamed() && itemstack.getItem() == Items.bone ? true : this.theWolf.isBreedingItem(itemstack));
|
|
}
|
|
}
|