    001    package net.minecraft.src;
    002
    003    public class EntityChicken extends EntityAnimal
    004    {
    005        public boolean field_70885_d = false;
    006        public float field_70886_e = 0.0F;
    007        public float destPos = 0.0F;
    008        public float field_70884_g;
    009        public float field_70888_h;
    010        public float field_70889_i = 1.0F;
    011
    012        /** The time until the next egg is spawned. */
    013        public int timeUntilNextEgg;
    014
    015        public EntityChicken(World par1World)
    016        {
    017            super(par1World);
    018            this.texture = "/mob/chicken.png";
    019            this.setSize(0.3F, 0.7F);
    020            this.timeUntilNextEgg = this.rand.nextInt(6000) + 6000;
    021            float var2 = 0.25F;
    022            this.tasks.addTask(0, new EntityAISwimming(this));
    023            this.tasks.addTask(1, new EntityAIPanic(this, 0.38F));
    024            this.tasks.addTask(2, new EntityAIMate(this, var2));
    025            this.tasks.addTask(3, new EntityAITempt(this, 0.25F, Item.seeds.shiftedIndex, false));
    026            this.tasks.addTask(4, new EntityAIFollowParent(this, 0.28F));
    027            this.tasks.addTask(5, new EntityAIWander(this, var2));
    028            this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F));
    029            this.tasks.addTask(7, new EntityAILookIdle(this));
    030        }
    031
    032        /**
    033         * Returns true if the newer Entity AI code should be run
    034         */
    035        public boolean isAIEnabled()
    036        {
    037            return true;
    038        }
    039
    040        public int getMaxHealth()
    041        {
    042            return 4;
    043        }
    044
    045        /**
    046         * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons
    047         * use this to react to sunlight and start to burn.
    048         */
    049        public void onLivingUpdate()
    050        {
    051            super.onLivingUpdate();
    052            this.field_70888_h = this.field_70886_e;
    053            this.field_70884_g = this.destPos;
    054            this.destPos = (float)((double)this.destPos + (double)(this.onGround ? -1 : 4) * 0.3D);
    055
    056            if (this.destPos < 0.0F)
    057            {
    058                this.destPos = 0.0F;
    059            }
    060
    061            if (this.destPos > 1.0F)
    062            {
    063                this.destPos = 1.0F;
    064            }
    065
    066            if (!this.onGround && this.field_70889_i < 1.0F)
    067            {
    068                this.field_70889_i = 1.0F;
    069            }
    070
    071            this.field_70889_i = (float)((double)this.field_70889_i * 0.9D);
    072
    073            if (!this.onGround && this.motionY < 0.0D)
    074            {
    075                this.motionY *= 0.6D;
    076            }
    077
    078            this.field_70886_e += this.field_70889_i * 2.0F;
    079
    080            if (!this.isChild() && !this.worldObj.isRemote && --this.timeUntilNextEgg <= 0)
    081            {
    082                this.worldObj.playSoundAtEntity(this, "mob.chicken.plop", 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F);
    083                this.dropItem(Item.egg.shiftedIndex, 1);
    084                this.timeUntilNextEgg = this.rand.nextInt(6000) + 6000;
    085            }
    086        }
    087
    088        /**
    089         * Called when the mob is falling. Calculates and applies fall damage.
    090         */
    091        protected void fall(float par1) {}
    092
    093        /**
    094         * Returns the sound this mob makes while it's alive.
    095         */
    096        protected String getLivingSound()
    097        {
    098            return "mob.chicken.say";
    099        }
    100
    101        /**
    102         * Returns the sound this mob makes when it is hurt.
    103         */
    104        protected String getHurtSound()
    105        {
    106            return "mob.chicken.hurt";
    107        }
    108
    109        /**
    110         * Returns the sound this mob makes on death.
    111         */
    112        protected String getDeathSound()
    113        {
    114            return "mob.chicken.hurt";
    115        }
    116
    117        /**
    118         * Plays step sound at given x, y, z for the entity
    119         */
    120        protected void playStepSound(int par1, int par2, int par3, int par4)
    121        {
    122            this.worldObj.playSoundAtEntity(this, "mob.chicken.step", 0.15F, 1.0F);
    123        }
    124
    125        /**
    126         * Returns the item ID for the item the mob drops on death.
    127         */
    128        protected int getDropItemId()
    129        {
    130            return Item.feather.shiftedIndex;
    131        }
    132
    133        /**
    134         * Drop 0-2 items of this living's type
    135         */
    136        protected void dropFewItems(boolean par1, int par2)
    137        {
    138            int var3 = this.rand.nextInt(3) + this.rand.nextInt(1 + par2);
    139
    140            for (int var4 = 0; var4 < var3; ++var4)
    141            {
    142                this.dropItem(Item.feather.shiftedIndex, 1);
    143            }
    144
    145            if (this.isBurning())
    146            {
    147                this.dropItem(Item.chickenCooked.shiftedIndex, 1);
    148            }
    149            else
    150            {
    151                this.dropItem(Item.chickenRaw.shiftedIndex, 1);
    152            }
    153        }
    154
    155        /**
    156         * This function is used when two same-species animals in 'love mode' breed to generate the new baby animal.
    157         */
    158        public EntityAnimal spawnBabyAnimal(EntityAnimal par1EntityAnimal)
    159        {
    160            return new EntityChicken(this.worldObj);
    161        }
    162
    163        /**
    164         * Checks if the parameter is an item which this animal can be fed to breed it (wheat, carrots or seeds depending on
    165         * the animal type)
    166         */
    167        public boolean isBreedingItem(ItemStack par1ItemStack)
    168        {
    169            return par1ItemStack != null && par1ItemStack.getItem() instanceof ItemSeeds;
    170        }
    171    }