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.wheat.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.chickenplop", 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";
099        }
100    
101        /**
102         * Returns the sound this mob makes when it is hurt.
103         */
104        protected String getHurtSound()
105        {
106            return "mob.chickenhurt";
107        }
108    
109        /**
110         * Returns the sound this mob makes on death.
111         */
112        protected String getDeathSound()
113        {
114            return "mob.chickenhurt";
115        }
116    
117        /**
118         * Returns the item ID for the item the mob drops on death.
119         */
120        protected int getDropItemId()
121        {
122            return Item.feather.shiftedIndex;
123        }
124    
125        /**
126         * Drop 0-2 items of this living's type
127         */
128        protected void dropFewItems(boolean par1, int par2)
129        {
130            int var3 = this.rand.nextInt(3) + this.rand.nextInt(1 + par2);
131    
132            for (int var4 = 0; var4 < var3; ++var4)
133            {
134                this.dropItem(Item.feather.shiftedIndex, 1);
135            }
136    
137            if (this.isBurning())
138            {
139                this.dropItem(Item.chickenCooked.shiftedIndex, 1);
140            }
141            else
142            {
143                this.dropItem(Item.chickenRaw.shiftedIndex, 1);
144            }
145        }
146    
147        /**
148         * This function is used when two same-species animals in 'love mode' breed to generate the new baby animal.
149         */
150        public EntityAnimal spawnBabyAnimal(EntityAnimal par1EntityAnimal)
151        {
152            return new EntityChicken(this.worldObj);
153        }
154    }