001 package net.minecraft.src;
002
003 public class EntityCow extends EntityAnimal
004 {
005 public EntityCow(World par1World)
006 {
007 super(par1World);
008 this.texture = "/mob/cow.png";
009 this.setSize(0.9F, 1.3F);
010 this.getNavigator().setAvoidsWater(true);
011 this.tasks.addTask(0, new EntityAISwimming(this));
012 this.tasks.addTask(1, new EntityAIPanic(this, 0.38F));
013 this.tasks.addTask(2, new EntityAIMate(this, 0.2F));
014 this.tasks.addTask(3, new EntityAITempt(this, 0.25F, Item.wheat.shiftedIndex, false));
015 this.tasks.addTask(4, new EntityAIFollowParent(this, 0.25F));
016 this.tasks.addTask(5, new EntityAIWander(this, 0.2F));
017 this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F));
018 this.tasks.addTask(7, new EntityAILookIdle(this));
019 }
020
021 /**
022 * Returns true if the newer Entity AI code should be run
023 */
024 public boolean isAIEnabled()
025 {
026 return true;
027 }
028
029 public int getMaxHealth()
030 {
031 return 10;
032 }
033
034 /**
035 * Returns the sound this mob makes while it's alive.
036 */
037 protected String getLivingSound()
038 {
039 return "mob.cow";
040 }
041
042 /**
043 * Returns the sound this mob makes when it is hurt.
044 */
045 protected String getHurtSound()
046 {
047 return "mob.cowhurt";
048 }
049
050 /**
051 * Returns the sound this mob makes on death.
052 */
053 protected String getDeathSound()
054 {
055 return "mob.cowhurt";
056 }
057
058 /**
059 * Returns the volume for the sounds this mob makes.
060 */
061 protected float getSoundVolume()
062 {
063 return 0.4F;
064 }
065
066 /**
067 * Returns the item ID for the item the mob drops on death.
068 */
069 protected int getDropItemId()
070 {
071 return Item.leather.shiftedIndex;
072 }
073
074 /**
075 * Drop 0-2 items of this living's type
076 */
077 protected void dropFewItems(boolean par1, int par2)
078 {
079 int var3 = this.rand.nextInt(3) + this.rand.nextInt(1 + par2);
080 int var4;
081
082 for (var4 = 0; var4 < var3; ++var4)
083 {
084 this.dropItem(Item.leather.shiftedIndex, 1);
085 }
086
087 var3 = this.rand.nextInt(3) + 1 + this.rand.nextInt(1 + par2);
088
089 for (var4 = 0; var4 < var3; ++var4)
090 {
091 if (this.isBurning())
092 {
093 this.dropItem(Item.beefCooked.shiftedIndex, 1);
094 }
095 else
096 {
097 this.dropItem(Item.beefRaw.shiftedIndex, 1);
098 }
099 }
100 }
101
102 /**
103 * Called when a player interacts with a mob. e.g. gets milk from a cow, gets into the saddle on a pig.
104 */
105 public boolean interact(EntityPlayer par1EntityPlayer)
106 {
107 ItemStack var2 = par1EntityPlayer.inventory.getCurrentItem();
108
109 if (var2 != null && var2.itemID == Item.bucketEmpty.shiftedIndex)
110 {
111 if (--var2.stackSize <= 0)
112 {
113 par1EntityPlayer.inventory.setInventorySlotContents(par1EntityPlayer.inventory.currentItem, new ItemStack(Item.bucketMilk));
114 }
115 else if (!par1EntityPlayer.inventory.addItemStackToInventory(new ItemStack(Item.bucketMilk)))
116 {
117 par1EntityPlayer.dropPlayerItem(new ItemStack(Item.bucketMilk.shiftedIndex, 1, 0));
118 }
119
120 return true;
121 }
122 else
123 {
124 return super.interact(par1EntityPlayer);
125 }
126 }
127
128 /**
129 * This function is used when two same-species animals in 'love mode' breed to generate the new baby animal.
130 */
131 public EntityAnimal spawnBabyAnimal(EntityAnimal par1EntityAnimal)
132 {
133 return new EntityCow(this.worldObj);
134 }
135 }