I added that and it now works for me! But I notice that it's still modifying the horse's subtitiles and noteable the pig's also.
My Sounds Json
{
"entity.terrakon.bark": {"category": "neutral", "sounds": ["tetracraft:entity/terrakon/bark1", "tetracraft:entity/terrakon/bark2", "tetracraft:entity/terrakon/bark3"], "subtitle": "subtitles.tetracraft:entity.terrakon.bark"},
"entity.terrakon.growl": {"category": "neutral", "sounds": ["tetracraft:entity/terrakon/growl1", "tetracraft:entity/terrakon/growl2", "tetracraft:entity/terrakon/growl3"], "subtitle": "subtitles.tetracraft:entity.terrakon.growl"},
"entity.terrakon.hurt": {"category": "neutral", "sounds": ["tetracraft:entity/terrakon/hurt1", "tetracraft:entity/terrakon/hurt2", "tetracraft:entity/terrakon/hurt3"], "subtitle": "subtitles.tetracraft:entity.terrakon.hurt"},
"entity.terrakon.pant": {"category": "neutral", "sounds": ["tetracraft:entity/terrakon/panting"], "subtitle": "subtitles.tetracraft:entity.terrakon.pant"},
"entity.terrakon.whine": {"category": "neutral", "sounds": ["tetracraft:entity/terrakon/whine"], "subtitle": "subtitles.tetracraft:entity.terrakon.whine"},
"entity.terrakon.death": {"category": "neutral", "sounds": ["tetracraft:entity/terrakon/death"], "subtitle": "subtitles.tetracraft:entity.terrakon.death"},
"action.land": {"category": "neutral", "sounds": ["tetracraft:action/land"], "subtitle": "subtitles.tetracraft:action.land"},
"action.saddle": {"category": "neutral", "type": "event","sounds": [{"name": "minecraft:entity/horse/saddle"}], "subtitle": "subtitles.tetracraft:action.saddle"}
}
I do get this warning too
[09:07:09] [server thread/WARN]: Terrakon (vehicle of NovaViper) moved too quickly! -7.445434141801343,0.0,7.055397094804505
[09:07:09] [server thread/WARN]: Terrakon (vehicle of NovaViper) moved too quickly! -7.417365426333163,0.0,7.8848732676423765
[09:07:09] [server thread/WARN]: Terrakon (vehicle of NovaViper) moved too quickly! -7.362166224918269,0.0,8.718640870110619
[09:07:09] [server thread/WARN]: Terrakon (vehicle of NovaViper) moved too quickly! -7.292450041396819,0.0,9.554704731012237
[09:07:09] [server thread/WARN]: Terrakon (vehicle of NovaViper) moved too quickly! -7.214966110187561,0.0,10.391997274018934
[09:07:09] [server thread/WARN]: Terrakon (vehicle of NovaViper) moved too quickly! -7.133325812062765,0.0,11.229947260322945
[09:07:09] [server thread/WARN]: Terrakon (vehicle of NovaViper) moved too quickly! -7.04946152487048,0.0,12.068249031427342
RideableEntity
package novaviper.tetracraft.common.entity;
import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.IJumpingMount;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.attributes.IAttribute;
import net.minecraft.entity.ai.attributes.RangedAttribute;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.init.MobEffects;
import net.minecraft.init.SoundEvents;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.datasync.DataParameter;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.network.datasync.EntityDataManager;
import net.minecraft.util.DamageSource;
import net.minecraft.util.SoundEvent;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
/**
* Created by NovaViper on 4/23/2016.
* Class Purpose: Definition Class for the mod's RIDEABLE Tameable Entities
*/
public abstract class EntityModRideableTameable extends EntityModTameable implements IJumpingMount {
private static final IAttribute JUMP_STRENGTH = (new RangedAttribute((IAttribute)null, "horse.jumpStrength", 0.7D, 0.0D, 2.0D)).setDescription("Jump Strength").setShouldWatch(true);
private static final DataParameter<Boolean> SADDLED = EntityDataManager.<Boolean>createKey(EntityModTameable.class, DataSerializers.BOOLEAN);
private boolean field_110294_bI;
public float jumpPower;
protected boolean entityJumping;
/** Used to determine the sound that the horse should make when it steps */
protected int gallopTime;
public EntityModRideableTameable(World worldIn) {
super(worldIn);
}
@Override
protected void applyEntityAttributes() {
super.applyEntityAttributes();
this.getAttributeMap().registerAttribute(JUMP_STRENGTH);
}
protected void entityInit()
{
super.entityInit();
this.dataManager.register(SADDLED, Boolean.valueOf(false)); // Saddle
}
/**
* (abstract) Protected helper method to write subclass entity data to NBT.
*/
public void writeEntityToNBT(NBTTagCompound tagCompound)
{
super.writeEntityToNBT(tagCompound);
tagCompound.setBoolean("Saddle", this.isSaddled());
}
/**
* (abstract) Protected helper method to read subclass entity data from NBT.
*/
public void readEntityFromNBT(NBTTagCompound tagCompound)
{
super.readEntityFromNBT(tagCompound);
this.setSaddled(tagCompound.getBoolean("Saddle"));
}
public boolean isSaddled() {
return ((Boolean)this.dataManager.get(SADDLED)).booleanValue();
}
public void setSaddled(boolean saddled) {
if (saddled)
{
this.dataManager.set(SADDLED, Boolean.valueOf(true));
}
else
{
this.dataManager.set(SADDLED, Boolean.valueOf(false));
}
}
protected void playStepSound(BlockPos pos, Block blockIn)
{
SoundType soundtype = blockIn.getSoundType();
if (this.worldObj.getBlockState(pos.up()).getBlock() == Blocks.SNOW_LAYER)
{
soundtype = Blocks.SNOW_LAYER.getSoundType();
}
if (!blockIn.getDefaultState().getMaterial().isLiquid())
{
if (this.isBeingRidden())
{
++this.gallopTime;
if (this.gallopTime > 5 && this.gallopTime % 3 == 0)
{
this.playSound(getGallopSound(), soundtype.getVolume() * 0.15F, soundtype.getPitch());
}
else if (this.gallopTime <= 5)
{
this.playSound(getStepSound(), soundtype.getVolume() * 0.15F, soundtype.getPitch());
}
}
}
}
protected abstract SoundEvent getStepSound();
protected abstract SoundEvent getGallopSound();
/**
* Drop the equipment for this entity.
*/
@Override
protected void dropEquipment(boolean wasRecentlyHit, int lootingModifier)
{
super.dropEquipment(wasRecentlyHit, lootingModifier);
if (this.isSaddled())
{
this.dropItem(Items.SADDLE, 1);
}
}
public void makePlayerRide(EntityPlayer player){
player.rotationYaw = this.rotationYaw;
player.rotationPitch = this.rotationPitch;
this.setSitting(false);
if (isServer()){
player.startRiding(this);
}
}
/**
* Returns true if this entity should push and be pushed by other entities when colliding.
*/
public boolean canBePushed()
{
return !this.isBeingRidden();
}
public boolean isJumping()
{
return this.entityJumping;
}
public void setJumping(boolean jumping)
{
this.entityJumping = jumping;
}
public double getJumpStrength()
{
return this.getEntityAttribute(JUMP_STRENGTH).getAttributeValue();
}
@SideOnly(Side.CLIENT)
public void setJumpPower(int jumpPowerIn)
{
if (this.isSaddled())
{
if (jumpPowerIn < 0)
{
jumpPowerIn = 0;
}
else
{
this.field_110294_bI = true;
}
if (jumpPowerIn >= 90)
{
this.jumpPower = 1.0F;
}
else
{
this.jumpPower = 0.4F + 0.4F * (float)jumpPowerIn / 90.0F;
}
}
}
public boolean canJump()
{
return this.isSaddled();
}
public void func_184775_b(int p_184775_1_)
{
this.field_110294_bI = true;
}
@Override
public void func_184777_r_() {}
/**
* Dead and sleeping entities cannot move
*/
protected boolean isMovementBlocked()
{
return this.isBeingRidden() && this.isSaddled() ? true : super.isMovementBlocked();
}
/**
* Moves the entity based on the specified heading.
*/
public void moveEntityWithHeading(float strafe, float forward)
{
if (this.isBeingRidden() && this.canBeSteered() && this.isSaddled())
{
EntityLivingBase entitylivingbase = (EntityLivingBase)this.getControllingPassenger();
this.prevRotationYaw = this.rotationYaw = entitylivingbase.rotationYaw;
this.rotationPitch = entitylivingbase.rotationPitch * 0.5F;
this.setRotation(this.rotationYaw, this.rotationPitch);
this.rotationYawHead = this.renderYawOffset = this.rotationYaw;
strafe = entitylivingbase.moveStrafing * 0.5F;
forward = entitylivingbase.moveForward;
if (forward <= 0.0F)
{
forward *= 0.25F;
this.gallopTime = 0;
}
if (this.jumpPower > 0.0F && !this.isJumping() && this.onGround)
{
this.motionY = this.getJumpStrength() * (double)this.jumpPower;
if (this.isPotionActive(MobEffects.JUMP_BOOST))
{
this.motionY += (double)((float)(this.getActivePotionEffect(MobEffects.JUMP_BOOST).getAmplifier() + 1) * 0.1F);
}
this.setJumping(true);
this.isAirBorne = true;
if (forward > 0.0F)
{
float f = MathHelper.sin(this.rotationYaw * 0.017453292F);
float f1 = MathHelper.cos(this.rotationYaw * 0.017453292F);
this.motionX += (double)(-0.4F * f * this.jumpPower);
this.motionZ += (double)(0.4F * f1 * this.jumpPower);
this.playSound(SoundEvents.ENTITY_HORSE_JUMP, 0.4F, 1.0F);
}
this.jumpPower = 0.0F;
net.minecraftforge.common.ForgeHooks.onLivingJump(this);
}
this.stepHeight = 1.0F;
this.jumpMovementFactor = this.getAIMoveSpeed() * 0.1F;
if (this.canPassengerSteer())
{
this.setAIMoveSpeed((float)this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).getAttributeValue());
super.moveEntityWithHeading(strafe, forward);
}
else if (entitylivingbase instanceof EntityPlayer)
{
this.motionX = 0.0D;
this.motionY = 0.0D;
this.motionZ = 0.0D;
}
if (this.onGround)
{
this.jumpPower = 0.0F;
this.setJumping(false);
}
this.prevLimbSwingAmount = this.limbSwingAmount;
double d1 = this.posX - this.prevPosX;
double d0 = this.posZ - this.prevPosZ;
float f2 = MathHelper.sqrt_double(d1 * d1 + d0 * d0) * 4.0F;
if (f2 > 1.0F)
{
f2 = 1.0F;
}
this.limbSwingAmount += (f2 - this.limbSwingAmount) * 0.4F;
this.limbSwing += this.limbSwingAmount;
}
else
{
this.stepHeight = 0.5F;
this.jumpMovementFactor = 0.02F;
super.moveEntityWithHeading(strafe, forward);
}
}
/**
* returns true if all the conditions for steering the entity are met. For pigs, this is true if it is being ridden
* by a player and the player is holding a carrot-on-a-stick
*/
public boolean canBeSteered()
{
Entity entity = this.getControllingPassenger();
return entity instanceof EntityLivingBase;
}
/**
* For vehicles, the first passenger is generally considered the controller and "drives" the vehicle. For example,
* Pigs, Horses, and Boats are generally "steered" by the controlling passenger.
*/
public Entity getControllingPassenger()
{
return this.getPassengers().isEmpty() ? null : (Entity)this.getPassengers().get(0);
}
public void fall(float distance, float damageMultiplier)
{
if (distance > 1.0F)
{
this.playSound(SoundEvents.ENTITY_HORSE_LAND, 0.4F, 1.0F);
}
int i = MathHelper.ceiling_float_int((distance * 0.5F - 3.0F) * damageMultiplier);
if (i > 0)
{
this.attackEntityFrom(DamageSource.fall, (float)i);
if (this.isBeingRidden())
{
for (Entity entity : this.getRecursivePassengers())
{
entity.attackEntityFrom(DamageSource.fall, (float)i);
}
}
IBlockState iblockstate = this.worldObj.getBlockState(new BlockPos(this.posX, this.posY - 0.2D - (double)this.prevRotationYaw, this.posZ));
Block block = iblockstate.getBlock();
if (iblockstate.getMaterial() != Material.AIR && !this.isSilent())
{
SoundType soundtype = block.getSoundType();
this.worldObj.playSound((EntityPlayer)null, this.posX, this.posY, this.posZ, soundtype.getStepSound(), this.getSoundCategory(), soundtype.getVolume() * 0.5F, soundtype.getPitch() * 0.75F);
}
}
}
}
Terrakon
package novaviper.tetracraft.common.entity;
import com.google.common.base.Predicate;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityAgeable;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.*;
import net.minecraft.entity.passive.EntityAnimal;
import net.minecraft.entity.passive.EntityCow;
import net.minecraft.entity.passive.EntityRabbit;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.init.Items;
import net.minecraft.init.SoundEvents;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.EnumDyeColor;
import net.minecraft.item.Item;
import net.minecraft.item.ItemFood;
import net.minecraft.item.ItemStack;
import net.minecraft.util.*;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.world.World;
import novaviper.tetracraft.common.helper.ChatHelper;
import novaviper.tetracraft.common.init.ModItems;
import novaviper.tetracraft.common.init.ModLootTables;
import novaviper.tetracraft.common.util.ItemUtils;
import novaviper.tetracraft.lib.Constants;
import novaviper.tetracraft.lib.ModSoundEvents;
import java.util.UUID;
/**
* Created by NovaViper on 3/1/2016.
* Class Purpose: Main Entity class for the Terrakon
*/
public class EntityTerrakon extends EntityModRideableTameable {
public EntityTerrakon(World worldIn) {
super(worldIn);
this.setSize(1, 1.5f);
this.tasks.addTask(1, new EntityAISwimming(this));
this.tasks.addTask(2, this.aiSit = new EntityAISit(this));
this.tasks.addTask(3, new EntityAILeapAtTarget(this, 0.4F));
this.tasks.addTask(4, new EntityAIAttackMelee(this, 1.0D, true));
this.tasks.addTask(5, new EntityAIFollowOwner(this, 1.0D, 10.0F, 2.0F));
this.tasks.addTask(6, new EntityAIMate(this, 1.0D));
this.tasks.addTask(7, new EntityAIWander(this, 1.0D));
this.tasks.addTask(9, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F));
this.tasks.addTask(9, new EntityAILookIdle(this));
this.targetTasks.addTask(1, new EntityAIOwnerHurtByTarget(this));
this.targetTasks.addTask(2, new EntityAIOwnerHurtTarget(this));
this.targetTasks.addTask(3, new EntityAIHurtByTarget(this, true, new Class[0]));
this.targetTasks.addTask(4, new EntityAITargetNonTamed(this, EntityAnimal.class, false, new Predicate<Entity>() {
public boolean apply(Entity entity) {
return entity instanceof EntityCow || entity instanceof EntityRabbit;
}
}));
this.setTamed(false);
}
protected void applyEntityAttributes() {
super.applyEntityAttributes();
this.updateEntityAttributes();
}
@Override
public void updateEntityAttributes() {
this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.40000001192092896D);
if(this.isTamed()){
if(!this.isChild()){
this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(50.0D);
this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(6.0D);
}else{
this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(10.0D);
this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(1.0D);
}
}else{
if(!this.isChild()) {
this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(40.0D);
this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(6.0D);
}else{
this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(10.0D);
this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(1.0D);
}
}
}
@Override
protected SoundEvent getStepSound() {
return SoundEvents.ENTITY_WOLF_STEP;
}
@Override
protected SoundEvent getGallopSound() {
return SoundEvents.ENTITY_HORSE_GALLOP;
}
@Override
protected SoundEvent getHurtSound() {
return ModSoundEvents.terrakonHurt;
}
@Override
protected SoundEvent getDeathSound() {
return ModSoundEvents.terrakonDeath;
}
@Override
protected SoundEvent getAmbientSound() {
// if(!this.inFinalStage()){
return isAngry() ? ModSoundEvents.terrakonGrowl : rand.nextInt(3) == 0
? isTamed() && getHealth() <= Constants.lowHP ? ModSoundEvents.terrakonWhine
: ModSoundEvents.terrakonPanting : ModSoundEvents.terrakonBark;
/* }else{ return Sound.; } */
}
/**
* Get number of ticks, at least during which the living entity will be
* silent.
*/
@Override
public int getTalkInterval() {
if (getHealth() <= Constants.lowHP && !this.isChild()) {
return 20;
} else {
return super.getTalkInterval();
}
}
/**
* Returns the volume for the sounds this mob makes.
*/
@Override
public float getSoundVolume() {
return 2F;
}
/**
* Gets the pitch of living sounds in living entities.
*/
@Override
public float getPitch() {
if (!isChild()) {
return super.getSoundPitch();
} else {
return super.getSoundPitch() * 1;
}
}
/**
* Called when the entity is attacked.
*/
public boolean attackEntityFrom(DamageSource source, float amount) {
if (this.isEntityInvulnerable(source)) {
return false;
} else {
Entity entity = source.getEntity();
this.aiSit.setSitting(false);
if (entity != null && !(entity instanceof EntityPlayer) && !(entity instanceof EntityArrow)) {
amount = (amount + 1.0F) / 2.0F;
}
return super.attackEntityFrom(source, amount);
}
}
public boolean attackEntityAsMob(Entity entityIn) {
boolean flag = entityIn.attackEntityFrom(DamageSource.causeMobDamage(this), (float) ((int) this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).getAttributeValue()));
if (flag) {
this.applyEnchantments(this, entityIn);
this.updateEntityAttributes();
}
return flag;
}
public void setTamed(boolean tamed) {
super.setTamed(tamed);
this.updateEntityAttributes();
}
/**
* Called when a player interacts with a mob. e.g. gets milk from a cow, gets into the saddle on a pig.
*/
@Override
public boolean processInteract(EntityPlayer player, EnumHand hand, ItemStack stack) {
if (stack != null && stack.getItem() == Items.SPAWN_EGG)
{
return super.processInteract(player, hand, stack);
}
if (this.isTamed()) {
if (stack != null) {
if (stack.getItem() instanceof ItemFood) {
ItemFood itemfood = null;
if (getHealthRelative() < 1) {
itemfood = (ItemFood) ItemUtils.consumeEquipped(player, EntityEquipmentSlot.MAINHAND, this.populateEatableFoods());
if (itemfood != null) {
float volume = getSoundVolume() * 1.0f;
float pitch = getPitch();
BlockPos pos = this.getPosition();
worldObj.playSound(player, pos.getX(), pos.getY(), pos.getZ(), SoundEvents.ENTITY_GENERIC_EAT, SoundCategory.NEUTRAL, volume, pitch);
this.heal(itemfood.getHealAmount(stack));
}
return true;
}
} else if (stack.getItem() == Items.SHEARS && this.canInteract(player)) {
if (isServer()) {
unTame();
this.setSaddled(false);
}
return true;
}
else if (ItemUtils.consumeEquipped(player, EntityEquipmentSlot.MAINHAND, Items.SADDLE) && !this.isSaddled() && isServer()) {
if(this.canInteract(player)) {
if (!this.isChild()) {
this.setSaddled(true);
this.playSound(ModSoundEvents.Saddle, 0.5F, 1.0F);
} else {
TextComponentTranslation text = ChatHelper.getChatComponentTranslation("interaction.tetracraft.entity.cannotBeRidden");
this.tooYoungForInteract((EntityModTameable) this, player, text);
return true;
}
}else{
this.doNotOwnMessage((EntityModTameable)this, player);
}
}else if(stack.getItem() == Items.STICK && this.isSaddled() && !player.onGround){
if(this.canInteract(player)) {
this.makePlayerRide(player);
}else{
this.doNotOwnMessage((EntityModTameable)this, player);
}
return true;
}
/*else if (stack.getItem() == Items.stick && canInteract(player))
{
if (isServer()) {
player.openGui(TetraCraft.instance, CommonProxy.PetPack, this.worldObj, this.getEntityId(), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ));
this.worldObj.playSoundEffect(this.posX, this.posY + 0.5D, this.posZ, "random.chestopen", 0.5F, this.worldObj.rand.nextFloat() * 0.1F + 0.9F);
return true;
}
}*/
else if (ItemUtils.consumeEquipped(player, EntityEquipmentSlot.MAINHAND, Items.DYE) && this.canInteract(player)) {
EnumDyeColor enumdyecolor = EnumDyeColor.byDyeDamage(stack.getMetadata());
if (enumdyecolor != this.getCollarColor()) {
this.setCollarColor(enumdyecolor);
return true;
}
}
}
if (canInteract(player) && isServer() && !this.isBreedingItem(stack)) {
this.aiSit.setSitting(!this.isSitting());
this.isJumping = false;
this.navigator.clearPathEntity();
this.setAttackTarget((EntityLivingBase)null);
}
} else if (ItemUtils.consumeEquipped(player, EntityEquipmentSlot.MAINHAND, Items.BONE) && !this.isAngry()) {
if (isServer()) {
tamedFor(player, this.rand.nextInt(3) == 0);
}
return true;
}
return super.processInteract(player, hand, stack);
}
/**
* Checks if the parameter is an item which this animal can be fed to breed it (wheat, carrots or seeds depending on
* the animal type)
*/
public boolean isBreedingItem(ItemStack stack) {
return stack == null ? false : stack.getItem() == ModItems.breedingBone;
}
@Override
public Item[] populateEatableFoods() {
super.populateEatableFoods();
Item[] food = {Items.BEEF, Items.CHICKEN, Items.PORKCHOP, Items.MUTTON, Items.RABBIT, Items.FISH,
Items.COOKED_BEEF, Items.COOKED_CHICKEN, Items.COOKED_PORKCHOP, Items.COOKED_MUTTON, Items.COOKED_RABBIT, Items.COOKED_FISH};
return food;
}
@Override
protected ResourceLocation getLootTable()
{
return ModLootTables.LootTableTerrakon;
}
/**
* Returns true if the mob is currently able to mate with the specified mob.
*/
@Override
public boolean canMateWith(EntityAnimal otherAnimal) {
if (otherAnimal == this) {
return false;
} else if (!this.isTamed()) {
return false;
} else if (!(otherAnimal instanceof EntityTerrakon)) {
return false;
} else {
EntityTerrakon entityTerrakon = (EntityTerrakon) otherAnimal;
return !entityTerrakon.isTamed() ? false : (entityTerrakon.isSitting() ? false
: this.getGender() == entityTerrakon.getGender() ? false
: this.isInLove() && entityTerrakon.isInLove());
}
}
@Override
public EntityTerrakon createChild(EntityAgeable ageable) {
EntityTerrakon entityTerrakon = new EntityTerrakon(this.worldObj);
UUID uuid = this.getOwnerId();
if (uuid != null) {
entityTerrakon.setOwnerId(uuid);
entityTerrakon.setTamed(true);
}
return entityTerrakon;
}
}