package backpackmod.common.entities;
import backpackmod.common.effects.Effect;
import backpackmod.common.effects.EnactEffect;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.ai.EntityAIAttackOnCollide;
import net.minecraft.entity.ai.EntityAIHurtByTarget;
import net.minecraft.entity.ai.EntityAILookIdle;
import net.minecraft.entity.ai.EntityAIMoveThroughVillage;
import net.minecraft.entity.ai.EntityAINearestAttackableTarget;
import net.minecraft.entity.ai.EntityAISwimming;
import net.minecraft.entity.ai.EntityAIWander;
import net.minecraft.entity.ai.EntityAIWatchClosest;
import net.minecraft.entity.ai.attributes.Attribute;
import net.minecraft.entity.ai.attributes.RangedAttribute;
import net.minecraft.entity.monster.EntityMob;
import net.minecraft.entity.passive.EntityVillager;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.DamageSource;
import net.minecraft.world.World;
public class EntityZombie extends EntityMob {
public String texture = this.getRandomZombieTexture();
protected static final Attribute field_110186_bp = (new RangedAttribute("zombie.spawnReinforcements", 0.0D, 0.0D, 1.0D)).func_111117_a("Spawn Reinforcements Chance");
public EntityZombie(World var1) {
super(var1);
this.setHealth(16.0F);
float var2 = 0.4F;
this.getNavigator().setBreakDoors(true);
super.tasks.addTask(0, new EntityAISwimming(this));
super.tasks.addTask(1, new EntityAIAttackOnCollide(this, EntityPlayerMP.class, (double)var2, false));
super.tasks.addTask(2, new EntityAIAttackOnCollide(this, EntityPlayer.class, (double)var2, false));
super.tasks.addTask(3, new EntityAIAttackOnCollide(this, EntityZombie.class, (double)var2, true));
super.tasks.addTask(4, new EntityAIAttackOnCollide(this, EntityVillager.class, (double)var2, true));
super.tasks.addTask(5, new EntityAIMoveThroughVillage(this, (double)var2, false));
super.tasks.addTask(6, new EntityAIWander(this, 0.30000001192092896D));
super.tasks.addTask(7, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F));
super.tasks.addTask(8, new EntityAILookIdle(this));
super.targetTasks.addTask(10, new EntityAIHurtByTarget(this, false));
super.targetTasks.addTask(11, new EntityAINearestAttackableTarget(this, EntityPlayerMP.class, 0, true));
super.targetTasks.addTask(12, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 0, true));
super.targetTasks.addTask(13, new EntityAINearestAttackableTarget(this, EntityVillager.class, 0, false));
}
private String getRandomZombieTexture() {
return "zombie_" + super.rand.nextInt(17) + ".png";
}
protected boolean canDespawn() {
return false;
}
protected boolean isAIEnabled() {
return true;
}
protected String getLivingSound() {
return "mob.zombie.say";
}
protected String getHurtSound() {
return "mob.zombie.hurt";
}
protected String getDeathSound() {
return "mob.zombie.death";
}
protected void playStepSound(int var1, int var2, int var3, int var4) {
super.worldObj.playSoundAtEntity(this, "mob.zombie.step", 0.15F, 1.0F);
}
protected Entity findPlayerToAttack() {
EntityPlayer var1 = super.worldObj.getClosestVulnerablePlayerToEntity(this, 16.0D);
return var1 != null && this.canEntityBeSeen(var1)?var1:null;
}
public boolean attackEntityFrom(DamageSource var1, float var2) {
if(super.attackEntityFrom(var1, var2)) {
Entity var3 = var1.getEntity();
if(super.riddenByEntity != var3 && super.ridingEntity != var3) {
if(var3 != this) {
super.entityToAttack = var3;
}
return true;
} else {
return true;
}
} else {
return false;
}
}
public boolean attackEntityAsMob(Entity var1) {
int var2 = super.rand.nextInt(5);
if(var2 == 0) {
((EntityLivingBase)var1).addPotionEffect(new EnactEffect(Effect.bleeding.getId(), 2400, 1));
}
return var1.attackEntityFrom(DamageSource.causeMobDamage(this), 2.0F);
}
public void onUpdate() {
super.onUpdate();
if(!super.worldObj.isRemote && super.worldObj.difficultySetting == 0) {
this.setDead();
}
}
protected void attackEntity(Entity var1, float var2) {
if(super.attackTime <= 0 && var2 < 2.0F && var1.boundingBox.maxY > super.boundingBox.minY && var1.boundingBox.minY < super.boundingBox.maxY) {
super.attackTime = 20;
this.attackEntityAsMob(var1);
}
}
public float getBlockPathWeight(int var1, int var2, int var3) {
return 0.5F - super.worldObj.getLightBrightness(var1, var2, var3);
}
public void writeEntityToNBT(NBTTagCompound var1) {
super.writeEntityToNBT(var1);
}
}