    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.say";
    040        }
    041
    042        /**
    043         * Returns the sound this mob makes when it is hurt.
    044         */
    045        protected String getHurtSound()
    046        {
    047            return "mob.cow.hurt";
    048        }
    049
    050        /**
    051         * Returns the sound this mob makes on death.
    052         */
    053        protected String getDeathSound()
    054        {
    055            return "mob.cow.hurt";
    056        }
    057
    058        /**
    059         * Plays step sound at given x, y, z for the entity
    060         */
    061        protected void playStepSound(int par1, int par2, int par3, int par4)
    062        {
    063            this.func_85030_a("mob.cow.step", 0.15F, 1.0F);
    064        }
    065
    066        /**
    067         * Returns the volume for the sounds this mob makes.
    068         */
    069        protected float getSoundVolume()
    070        {
    071            return 0.4F;
    072        }
    073
    074        /**
    075         * Returns the item ID for the item the mob drops on death.
    076         */
    077        protected int getDropItemId()
    078        {
    079            return Item.leather.shiftedIndex;
    080        }
    081
    082        /**
    083         * Drop 0-2 items of this living's type
    084         */
    085        protected void dropFewItems(boolean par1, int par2)
    086        {
    087            int var3 = this.rand.nextInt(3) + this.rand.nextInt(1 + par2);
    088            int var4;
    089
    090            for (var4 = 0; var4 < var3; ++var4)
    091            {
    092                this.dropItem(Item.leather.shiftedIndex, 1);
    093            }
    094
    095            var3 = this.rand.nextInt(3) + 1 + this.rand.nextInt(1 + par2);
    096
    097            for (var4 = 0; var4 < var3; ++var4)
    098            {
    099                if (this.isBurning())
    100                {
    101                    this.dropItem(Item.beefCooked.shiftedIndex, 1);
    102                }
    103                else
    104                {
    105                    this.dropItem(Item.beefRaw.shiftedIndex, 1);
    106                }
    107            }
    108        }
    109
    110        /**
    111         * Called when a player interacts with a mob. e.g. gets milk from a cow, gets into the saddle on a pig.
    112         */
    113        public boolean interact(EntityPlayer par1EntityPlayer)
    114        {
    115            ItemStack var2 = par1EntityPlayer.inventory.getCurrentItem();
    116
    117            if (var2 != null && var2.itemID == Item.bucketEmpty.shiftedIndex)
    118            {
    119                if (--var2.stackSize <= 0)
    120                {
    121                    par1EntityPlayer.inventory.setInventorySlotContents(par1EntityPlayer.inventory.currentItem, new ItemStack(Item.bucketMilk));
    122                }
    123                else if (!par1EntityPlayer.inventory.addItemStackToInventory(new ItemStack(Item.bucketMilk)))
    124                {
    125                    par1EntityPlayer.dropPlayerItem(new ItemStack(Item.bucketMilk.shiftedIndex, 1, 0));
    126                }
    127
    128                return true;
    129            }
    130            else
    131            {
    132                return super.interact(par1EntityPlayer);
    133            }
    134        }
    135
    136        /**
    137         * This function is used when two same-species animals in 'love mode' breed to generate the new baby animal.
    138         */
    139        public EntityCow spawnBabyAnimal(EntityAgeable par1EntityAgeable)
    140        {
    141            return new EntityCow(this.worldObj);
    142        }
    143
    144        public EntityAgeable func_90011_a(EntityAgeable par1EntityAgeable)
    145        {
    146            return this.spawnBabyAnimal(par1EntityAgeable);
    147        }
    148    }