package net.minecraft.server;
import com.google.common.base.Predicate;
import java.util.Iterator;
import javax.annotation.Nullable;
public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEntity {
private static final DataWatcherObject<Integer> bG = DataWatcher.a(EntityLlama.class, DataWatcherRegistry.b);
private static final DataWatcherObject<Integer> bH = DataWatcher.a(EntityLlama.class, DataWatcherRegistry.b);
private static final DataWatcherObject<Integer> bI = DataWatcher.a(EntityLlama.class, DataWatcherRegistry.b);
private boolean bJ;
@Nullable
private EntityLlama bK;
@Nullable
private EntityLlama bL;
public EntityLlama(World world) {
super(world);
this.setSize(0.9F, 1.87F);
}
public void p(int i) { // PAIL: private-> public, rename
this.datawatcher.set(EntityLlama.bG, Integer.valueOf(Math.max(1, Math.min(5, i))));
}
private void dT() {
int i = this.random.nextFloat() < 0.04F ? 5 : 3;
this.p(1 + this.random.nextInt(i));
}
public int dL() { // PAIL: rename
return ((Integer) this.datawatcher.get(EntityLlama.bG)).intValue();
}
public void b(NBTTagCompound nbttagcompound) {
super.b(nbttagcompound);
nbttagcompound.setInt("Variant", this.getVariant());
nbttagcompound.setInt("Strength", this.dL());
if (!this.inventoryChest.getItem(1).isEmpty()) {
nbttagcompound.set("DecorItem", this.inventoryChest.getItem(1).save(new NBTTagCompound()));
}
}
public void a(NBTTagCompound nbttagcompound) {
this.p(nbttagcompound.getInt("Strength"));
super.a(nbttagcompound);
this.setVariant(nbttagcompound.getInt("Variant"));
if (nbttagcompound.hasKeyOfType("DecorItem", 10)) {
this.inventoryChest.setItem(1, new ItemStack(nbttagcompound.getCompound("DecorItem")));
}
this.dy();
}
protected void r() {
this.goalSelector.a(0, new PathfinderGoalFloat(this));
this.goalSelector.a(1, new PathfinderGoalTame(this, 1.2D));
this.goalSelector.a(2, new PathfinderGoalLlamaFollow(this, 2.0999999046325684D));
this.goalSelector.a(3, new PathfinderGoalArrowAttack(this, 1.25D, 40, 20.0F));
this.goalSelector.a(3, new PathfinderGoalPanic(this, 1.2D));
this.goalSelector.a(4, new PathfinderGoalBreed(this, 1.0D));
this.goalSelector.a(5, new PathfinderGoalFollowParent(this, 1.0D));
this.goalSelector.a(6, new PathfinderGoalRandomStrollLand(this, 0.7D));
this.goalSelector.a(7, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 6.0F));
this.goalSelector.a(8, new PathfinderGoalRandomLookaround(this));
this.targetSelector.a(1, new EntityLlama.c(this));
this.targetSelector.a(2, new EntityLlama.a(this));
}
protected void initAttributes() {
super.initAttributes();
this.getAttributeInstance(GenericAttributes.FOLLOW_RANGE).setValue(40.0D);
}
protected void i() {
super.i();
this.datawatcher.register(EntityLlama.bG, Integer.valueOf(0));
this.datawatcher.register(EntityLlama.bH, Integer.valueOf(-1));
this.datawatcher.register(EntityLlama.bI, Integer.valueOf(0));
}
public int getVariant() {
return MathHelper.clamp(((Integer) this.datawatcher.get(EntityLlama.bI)).intValue(), 0, 3);
}
public void setVariant(int i) {
this.datawatcher.set(EntityLlama.bI, Integer.valueOf(i));
}
protected int di() {
return this.isCarryingChest() ? 2 + 3 * this.dl() : super.di();
}
public void k(Entity entity) {
if (this.w(entity)) {
float f = MathHelper.cos(this.aN * 0.017453292F);
float f1 = MathHelper.sin(this.aN * 0.017453292F);
float f2 = 0.3F;
entity.setPosition(this.locX + (double) (0.3F * f1), this.locY + this.ay() + entity.ax(), this.locZ - (double) (0.3F * f));
}
}
public double ay() {
return (double) this.length * 0.67D;
}
public boolean cR() {
return false;
}
protected boolean b(EntityHuman entityhuman, ItemStack itemstack) {
byte b0 = 0;
byte b1 = 0;
float f = 0.0F;
boolean flag = false;
Item item = itemstack.getItem();
if (item == Items.WHEAT) {
b0 = 10;
b1 = 3;
f = 2.0F;
} else if (item == Item.getItemOf(Blocks.HAY_BLOCK)) {
b0 = 90;
b1 = 6;
f = 10.0F;
if (this.isTamed() && this.getAge() == 0) {
flag = true;
this.c(entityhuman);
}
}
if (this.getHealth() < this.getMaxHealth() && f > 0.0F) {
this.heal(f);
flag = true;
}
if (this.isBaby() && b0 > 0) {
this.world.addParticle(EnumParticle.VILLAGER_HAPPY, this.locX + (double) (this.random.nextFloat() * this.width * 2.0F) - (double) this.width, this.locY + 0.5D + (double) (this.random.nextFloat() * this.length), this.locZ + (double) (this.random.nextFloat() * this.width * 2.0F) - (double) this.width, 0.0D, 0.0D, 0.0D, new int[0]);
if (!this.world.isClientSide) {
this.setAge(b0);
}
flag = true;
}
if (b1 > 0 && (flag || !this.isTamed()) && this.getTemper() < this.getMaxDomestication()) {
flag = true;
if (!this.world.isClientSide) {
this.n(b1);
}
}
if (flag && !this.isSilent()) {
this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, SoundEffects.dD, this.bC(), 1.0F, 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F);
}
return flag;
}
protected boolean isFrozen() {
return this.getHealth() <= 0.0F || this.dt();
}
@Nullable
public GroupDataEntity prepare(DifficultyDamageScaler difficultydamagescaler, @Nullable GroupDataEntity groupdataentity) {
Object object = super.prepare(difficultydamagescaler, groupdataentity);
this.dT();
int i;
if (object instanceof EntityLlama.b) {
i = ((EntityLlama.b) object).a;
} else {
i = this.random.nextInt(4);
object = new EntityLlama.b(i, null);
}
this.setVariant(i);
return (GroupDataEntity) object;
}
protected SoundEffect dj() {
return SoundEffects.dA;
}
protected SoundEffect G() {
return SoundEffects.dz;
}
protected SoundEffect bW() {
return SoundEffects.dE;
}
protected SoundEffect bX() {
return SoundEffects.dC;
}
protected void a(BlockPosition blockposition, Block block) {
this.a(SoundEffects.dG, 0.15F, 1.0F);
}
protected void dk() {
this.a(SoundEffects.dB, 1.0F, (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F);
}
public void dF() {
SoundEffect soundeffect = this.dj();
if (soundeffect != null) {
this.a(soundeffect, this.ci(), this.cj());
}
}
@Nullable
protected MinecraftKey J() {
return LootTables.aw;
}
public int dl() {
return this.dL();
}
public boolean dK() {
return true;
}
public boolean f(ItemStack itemstack) {
return itemstack.getItem() == Item.getItemOf(Blocks.CARPET);
}
public boolean dA() {
return false;
}
public void a(IInventory iinventory) {
EnumColor enumcolor = this.dO();
super.a(iinventory);
EnumColor enumcolor1 = this.dO();
if (this.ticksLived > 20 && enumcolor1 != null && enumcolor1 != enumcolor) {
this.a(SoundEffects.dH, 0.5F, 1.0F);
}
}
protected void dy() {
if (!this.world.isClientSide) {
super.dy();
this.g(this.inventoryChest.getItem(1));
}
}
private void a(@Nullable EnumColor enumcolor) {
this.datawatcher.set(EntityLlama.bH, Integer.valueOf(enumcolor == null ? -1 : enumcolor.getColorIndex()));
}
private void g(ItemStack itemstack) {
if (this.f(itemstack)) {
this.a(EnumColor.fromColorIndex(itemstack.getData()));
} else {
this.a((EnumColor) null);
}
}
@Nullable
public EnumColor dO() {
int i = ((Integer) this.datawatcher.get(EntityLlama.bH)).intValue();
return i == -1 ? null : EnumColor.fromColorIndex(i);
}
public int getMaxDomestication() {
return 30;
}
public boolean mate(EntityAnimal entityanimal) {
return entityanimal != this && entityanimal instanceof EntityLlama && this.dG() && ((EntityLlama) entityanimal).dG();
}
public EntityLlama b(EntityAgeable entityageable) {
EntityLlama entityllama = new EntityLlama(this.world);
this.a(entityageable, (EntityHorseAbstract) entityllama);
EntityLlama entityllama1 = (EntityLlama) entityageable;
int i = this.random.nextInt(Math.max(this.dL(), entityllama1.dL())) + 1;
if (this.random.nextFloat() < 0.03F) {
++i;
}
entityllama.p(i);
entityllama.setVariant(this.random.nextBoolean() ? this.getVariant() : entityllama1.getVariant());
return entityllama;
}
private void e(EntityLiving entityliving) {
EntityLlamaSpit entityllamaspit = new EntityLlamaSpit(this.world, this);
double d0 = entityliving.locX - this.locX;
double d1 = entityliving.getBoundingBox().b + (double) (entityliving.length / 3.0F) - entityllamaspit.locY;
double d2 = entityliving.locZ - this.locZ;
float f = MathHelper.sqrt(d0 * d0 + d2 * d2) * 0.2F;
entityllamaspit.shoot(d0, d1 + (double) f, d2, 1.5F, 10.0F);
this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, SoundEffects.dF, this.bC(), 1.0F, 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F);
this.world.addEntity(entityllamaspit);
this.bJ = true;
}
private void x(boolean flag) {
this.bJ = flag;
}
public void e(float f, float f1) {
int i = MathHelper.f((f * 0.5F - 3.0F) * f1);
if (i > 0) {
if (f >= 6.0F) {
this.damageEntity(DamageSource.FALL, (float) i);
if (this.isVehicle()) {
Iterator iterator = this.by().iterator();
while (iterator.hasNext()) {
Entity entity = (Entity) iterator.next();
entity.damageEntity(DamageSource.FALL, (float) i);
}
}
}
IBlockData iblockdata = this.world.getType(new BlockPosition(this.locX, this.locY - 0.2D - (double) this.lastYaw, this.locZ));
Block block = iblockdata.getBlock();
if (iblockdata.getMaterial() != Material.AIR && !this.isSilent()) {
SoundEffectType soundeffecttype = block.getStepSound();
this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, soundeffecttype.d(), this.bC(), soundeffecttype.a() * 0.5F, soundeffecttype.b() * 0.75F);
}
}
}
public void dP() {
if (this.bK != null) {
this.bK.bL = null;
}
this.bK = null;
}
public void a(EntityLlama entityllama) {
this.bK = entityllama;
this.bK.bL = this;
}
public boolean dQ() {
return this.bL != null;
}
public boolean inCaravan() { return dR(); } public boolean dR() { // Paper - OBFHELPER
return this.bK != null;
}
@Nullable
public EntityLlama dS() {
return this.bK;
}
protected double dg() {
return 2.0D;
}
protected void dD() {
if (!this.dR() && this.isBaby()) {
super.dD();
}
}
public boolean dE() {
return false;
}
public void a(EntityLiving entityliving, float f) {
this.e(entityliving);
}
public EntityAgeable createChild(EntityAgeable entityageable) {
return this.b(entityageable);
}
static class a extends PathfinderGoalNearestAttackableTarget<EntityWolf> {
public a(EntityLlama entityllama) {
super(entityllama, EntityWolf.class, 16, false, true, (Predicate) null);
}
public boolean a() {
if (super.a() && this.d != null && !((EntityWolf) this.d).isTamed()) {
return true;
} else {
this.e.setGoalTarget((EntityLiving) null);
return false;
}
}
protected double i() {
return super.i() * 0.25D;
}
}
static class c extends PathfinderGoalHurtByTarget {
public c(EntityLlama entityllama) {
super(entityllama, false, new Class[0]);
}
public boolean b() {
if (this.e instanceof EntityLlama) {
EntityLlama entityllama = (EntityLlama) this.e;
if (entityllama.bJ) {
entityllama.x(false);
return false;
}
}
return super.b();
}
}
static class b implements GroupDataEntity {
public int a;
private b(int i) {
this.a = i;
}
b(int i, Object object) {
this(i);
}
}
}