package net.minecraft.entity.passive; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; 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.nbt.NBTTagCompound; import net.minecraft.scoreboard.Team; import net.minecraft.server.management.PreYggdrasilConverter; 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 p_i1604_1_) { super(p_i1604_1_); } 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 s = ""; if (tagCompund.hasKey("OwnerUUID", 8)) { s = tagCompund.getString("OwnerUUID"); } else { String s1 = tagCompund.getString("Owner"); s = PreYggdrasilConverter.func_152719_a(s1); } if (s.length() > 0) { this.func_152115_b(s); 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_) { String s = "heart"; if (!p_70908_1_) { s = "smoke"; } for (int i = 0; i < 7; ++i) { double d0 = this.rand.nextGaussian() * 0.02D; double d1 = this.rand.nextGaussian() * 0.02D; double d2 = this.rand.nextGaussian() * 0.02D; this.worldObj.spawnParticle(s, 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, d0, d1, d2); } } @SideOnly(Side.CLIENT) public void handleHealthUpdate(byte p_70103_1_) { if (p_70103_1_ == 7) { this.playTameEffect(true); } else if (p_70103_1_ == 6) { this.playTameEffect(false); } else { super.handleHealthUpdate(p_70103_1_); } } public boolean isTamed() { return (this.dataWatcher.getWatchableObjectByte(16) & 4) != 0; } public void setTamed(boolean p_70903_1_) { byte b0 = this.dataWatcher.getWatchableObjectByte(16); if (p_70903_1_) { this.dataWatcher.updateObject(16, Byte.valueOf((byte)(b0 | 4))); } else { this.dataWatcher.updateObject(16, Byte.valueOf((byte)(b0 & -5))); } } public boolean isSitting() { return (this.dataWatcher.getWatchableObjectByte(16) & 1) != 0; } public void setSitting(boolean p_70904_1_) { byte b0 = this.dataWatcher.getWatchableObjectByte(16); if (p_70904_1_) { this.dataWatcher.updateObject(16, Byte.valueOf((byte)(b0 | 1))); } else { this.dataWatcher.updateObject(16, Byte.valueOf((byte)(b0 & -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 getOwner() { try { UUID uuid = UUID.fromString(this.func_152113_b()); return uuid == null ? null : this.worldObj.getPlayerEntityByUUID(uuid); } catch (IllegalArgumentException illegalargumentexception) { return null; } } public boolean func_152114_e(EntityLivingBase p_152114_1_) { return p_152114_1_ == this.getOwner(); } /** * 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 entitylivingbase = this.getOwner(); if (entitylivingbase != null) { return entitylivingbase.getTeam(); } } return super.getTeam(); } public boolean isOnSameTeam(EntityLivingBase p_142014_1_) { if (this.isTamed()) { EntityLivingBase entitylivingbase1 = this.getOwner(); if (p_142014_1_ == entitylivingbase1) { return true; } if (entitylivingbase1 != null) { return entitylivingbase1.isOnSameTeam(p_142014_1_); } } return super.isOnSameTeam(p_142014_1_); } }