/*******************************************************************************
* AbyssalCraft
* Copyright (c) 2012 - 2017 Shinoow.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-3.0.txt
*
* Contributors:
* Shinoow - implementation
******************************************************************************/
package com.shinoow.abyssalcraft.common.entity.anti;
import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityAgeable;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.EntityAIFollowParent;
import net.minecraft.entity.ai.EntityAILookIdle;
import net.minecraft.entity.ai.EntityAIMate;
import net.minecraft.entity.ai.EntityAIPanic;
import net.minecraft.entity.ai.EntityAISwimming;
import net.minecraft.entity.ai.EntityAITempt;
import net.minecraft.entity.ai.EntityAIWander;
import net.minecraft.entity.ai.EntityAIWatchClosest;
import net.minecraft.entity.passive.EntityAnimal;
import net.minecraft.entity.passive.EntityChicken;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.init.SoundEvents;
import net.minecraft.item.Item;
import net.minecraft.item.ItemSeeds;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.SoundEvent;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import com.shinoow.abyssalcraft.api.entity.IAntiEntity;
import com.shinoow.abyssalcraft.api.item.ACItems;
import com.shinoow.abyssalcraft.lib.ACLoot;
public class EntityAntiChicken extends EntityAnimal implements IAntiEntity {
public float field_70886_e;
public float destPos;
public float field_70884_g;
public float field_70888_h;
public float field_70889_i = 1.0F;
/** The time until the next egg is spawned. */
public int timeUntilNextEgg;
public EntityAntiChicken(World par1World)
{
super(par1World);
setSize(0.3F, 0.7F);
timeUntilNextEgg = rand.nextInt(6000) + 6000;
tasks.addTask(0, new EntityAISwimming(this));
tasks.addTask(1, new EntityAIPanic(this, 1.4D));
tasks.addTask(2, new EntityAIMate(this, 1.0D));
tasks.addTask(3, new EntityAITempt(this, 1.0D, Items.WHEAT_SEEDS, false));
tasks.addTask(4, new EntityAIFollowParent(this, 1.1D));
tasks.addTask(5, new EntityAIWander(this, 1.0D));
tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F));
tasks.addTask(7, new EntityAILookIdle(this));
}
@Override
protected void applyEntityAttributes()
{
super.applyEntityAttributes();
getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(8.0D);
getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.25D);
}
@Override
public void onLivingUpdate()
{
super.onLivingUpdate();
field_70888_h = field_70886_e;
field_70884_g = destPos;
destPos = (float)(destPos + (onGround ? -1 : 4) * 0.3D);
if (destPos < 0.0F)
destPos = 0.0F;
if (destPos > 1.0F)
destPos = 1.0F;
if (!onGround && field_70889_i < 1.0F)
field_70889_i = 1.0F;
field_70889_i = (float)(field_70889_i * 0.9D);
if (!onGround && motionY < 0.0D)
motionY *= 0.6D;
field_70886_e += field_70889_i * 2.0F;
if (!isChild() && !world.isRemote && --timeUntilNextEgg <= 0)
{
playSound(SoundEvents.ENTITY_CHICKEN_EGG, 1.0F, (rand.nextFloat() - rand.nextFloat()) * 0.2F + 1.0F);
dropItem(Items.EGG, 1);
timeUntilNextEgg = rand.nextInt(6000) + 6000;
}
}
@Override
public void fall(float par1, float par2) {}
@Override
protected SoundEvent getAmbientSound()
{
return SoundEvents.ENTITY_CHICKEN_AMBIENT;
}
@Override
protected SoundEvent getHurtSound()
{
return SoundEvents.ENTITY_CHICKEN_HURT;
}
@Override
protected SoundEvent getDeathSound()
{
return SoundEvents.ENTITY_CHICKEN_DEATH;
}
@Override
protected void playStepSound(BlockPos pos, Block p_145780_4_)
{
playSound(SoundEvents.ENTITY_CHICKEN_STEP, 0.15F, 1.0F);
}
@Override
protected Item getDropItem()
{
return Items.FEATHER;
}
@Override
protected void dropFewItems(boolean par1, int par2)
{
int j = rand.nextInt(3) + rand.nextInt(1 + par2);
for (int k = 0; k < j; ++k)
dropItem(Items.FEATHER, 1);
if (isBurning())
dropItem(ACItems.anti_chicken, 1);
else
dropItem(ACItems.anti_chicken, 1);
}
@Override
protected ResourceLocation getLootTable(){
return ACLoot.ENTITY_ANTI_CHICKEN;
}
@Override
protected void collideWithEntity(Entity par1Entity)
{
if(!world.isRemote && par1Entity instanceof EntityChicken){
boolean flag = world.getGameRules().getBoolean("mobGriefing");
world.createExplosion(this, posX, posY, posZ, 5, flag);
setDead();
}
else par1Entity.applyEntityCollision(this);
}
@Override
public EntityAntiChicken createChild(EntityAgeable par1EntityAgeable)
{
return new EntityAntiChicken(world);
}
@Override
public boolean isBreedingItem(ItemStack par1ItemStack)
{
return !par1ItemStack.isEmpty() && par1ItemStack.getItem() instanceof ItemSeeds;
}
}