    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    }