package net.minecraft.entity.passive;
import java.util.UUID;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.IEntityOwnable;
import net.minecraft.entity.ai.EntityAISit;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.scoreboard.Team;
import net.minecraft.server.management.PreYggdrasilConverter;
import net.minecraft.util.DamageSource;
import net.minecraft.util.EnumParticleTypes;
import net.minecraft.world.World;
public abstract class EntityTameable extends EntityAnimal implements IEntityOwnable
{
protected EntityAISit aiSit = new EntityAISit(this);
private static final String __OBFID = "CL_00001561";
public EntityTameable(World worldIn)
{
super(worldIn);
this.func_175544_ck();
}
protected void entityInit()
{
super.entityInit();
this.dataWatcher.addObject(16, Byte.valueOf((byte)0));
this.dataWatcher.addObject(17, "");
}
/**
* (abstract) Protected helper method to write subclass entity data to NBT.
*/
public void writeEntityToNBT(NBTTagCompound tagCompound)
{
super.writeEntityToNBT(tagCompound);
if (this.func_152113_b() == null)
{
tagCompound.setString("OwnerUUID", "");
}
else
{
tagCompound.setString("OwnerUUID", this.func_152113_b());
}
tagCompound.setBoolean("Sitting", this.isSitting());
}
/**
* (abstract) Protected helper method to read subclass entity data from NBT.
*/
public void readEntityFromNBT(NBTTagCompound tagCompund)
{
super.readEntityFromNBT(tagCompund);
String var2 = "";
if (tagCompund.hasKey("OwnerUUID", 8))
{
var2 = tagCompund.getString("OwnerUUID");
}
else
{
String var3 = tagCompund.getString("Owner");
var2 = PreYggdrasilConverter.func_152719_a(var3);
}
if (var2.length() > 0)
{
this.func_152115_b(var2);
this.setTamed(true);
}
this.aiSit.setSitting(tagCompund.getBoolean("Sitting"));
this.setSitting(tagCompund.getBoolean("Sitting"));
}
/**
* Play the taming effect, will either be hearts or smoke depending on status
*/
protected void playTameEffect(boolean p_70908_1_)
{
EnumParticleTypes var2 = EnumParticleTypes.HEART;
if (!p_70908_1_)
{
var2 = EnumParticleTypes.SMOKE_NORMAL;
}
for (int var3 = 0; var3 < 7; ++var3)
{
double var4 = this.rand.nextGaussian() * 0.02D;
double var6 = this.rand.nextGaussian() * 0.02D;
double var8 = this.rand.nextGaussian() * 0.02D;
this.worldObj.spawnParticle(var2, this.posX + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, this.posY + 0.5D + (double)(this.rand.nextFloat() * this.height), this.posZ + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, var4, var6, var8, new int[0]);
}
}
public boolean isTamed()
{
return (this.dataWatcher.getWatchableObjectByte(16) & 4) != 0;
}
public void setTamed(boolean p_70903_1_)
{
byte var2 = this.dataWatcher.getWatchableObjectByte(16);
if (p_70903_1_)
{
this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 | 4)));
}
else
{
this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 & -5)));
}
this.func_175544_ck();
}
protected void func_175544_ck() {}
public boolean isSitting()
{
return (this.dataWatcher.getWatchableObjectByte(16) & 1) != 0;
}
public void setSitting(boolean p_70904_1_)
{
byte var2 = this.dataWatcher.getWatchableObjectByte(16);
if (p_70904_1_)
{
this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 | 1)));
}
else
{
this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 & -2)));
}
}
public String func_152113_b()
{
return this.dataWatcher.getWatchableObjectString(17);
}
public void func_152115_b(String p_152115_1_)
{
this.dataWatcher.updateObject(17, p_152115_1_);
}
public EntityLivingBase func_180492_cm()
{
try
{
UUID var1 = UUID.fromString(this.func_152113_b());
return var1 == null ? null : this.worldObj.getPlayerEntityByUUID(var1);
}
catch (IllegalArgumentException var2)
{
return null;
}
}
public boolean func_152114_e(EntityLivingBase p_152114_1_)
{
return p_152114_1_ == this.func_180492_cm();
}
/**
* Returns the AITask responsible of the sit logic
*/
public EntityAISit getAISit()
{
return this.aiSit;
}
public boolean func_142018_a(EntityLivingBase p_142018_1_, EntityLivingBase p_142018_2_)
{
return true;
}
public Team getTeam()
{
if (this.isTamed())
{
EntityLivingBase var1 = this.func_180492_cm();
if (var1 != null)
{
return var1.getTeam();
}
}
return super.getTeam();
}
public boolean isOnSameTeam(EntityLivingBase p_142014_1_)
{
if (this.isTamed())
{
EntityLivingBase var2 = this.func_180492_cm();
if (p_142014_1_ == var2)
{
return true;
}
if (var2 != null)
{
return var2.isOnSameTeam(p_142014_1_);
}
}
return super.isOnSameTeam(p_142014_1_);
}
/**
* Called when the mob's health reaches 0.
*/
public void onDeath(DamageSource cause)
{
if (!this.worldObj.isRemote && this.worldObj.getGameRules().getGameRuleBooleanValue("showDeathMessages") && this.hasCustomName() && this.func_180492_cm() instanceof EntityPlayerMP)
{
((EntityPlayerMP)this.func_180492_cm()).addChatMessage(this.getCombatTracker().func_151521_b());
}
super.onDeath(cause);
}
public Entity getOwner()
{
return this.func_180492_cm();
}
}