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 wheat item. 165 */ 166 public boolean isWheat(ItemStack par1ItemStack) 167 { 168 return par1ItemStack != null && par1ItemStack.getItem() instanceof ItemSeeds; 169 } 170 }