Jump to content

NovaViper

Forge Modder
  • Posts

    1061
  • Joined

  • Last visited

Posts posted by NovaViper

  1. How do I compile my mod? I tried build but I can't seem to locate the of the jar file also I get this: (This is in 1.9)

     

    09:34:42 AM: Executing external task 'build'...
    Timeout waiting to connect to the Gradle daemon.
    Daemon uid: 46c00c9f-beb1-4976-bba3-15eb7adb74c6 with diagnostics:
    Daemon pid: 1300
      log file: C:\Users\NovaPC\.gradle\daemon\2.7\daemon-1300.out.log
    ----- Last  20 lines from daemon log file - daemon-1300.out.log -----
    09:36:21.586 [LIFECYCLE] [org.gradle.launcher.daemon.server.Daemon] Daemon server started.
    09:36:21.593 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonStartupCommunication] Completed writing the daemon greeting. Closing streams...
    09:36:21.596 [DEBUG] [org.gradle.launcher.daemon.server.Daemon] requestStopOnIdleTimeout(60000 MILLISECONDS) called on daemon
    09:36:21.596 [DEBUG] [org.gradle.launcher.daemon.server.DaemonStateCoordinator] Idle timeout: waiting for daemon to stop or be idle for 60000ms
    09:36:21.603 [DEBUG] [org.gradle.launcher.daemon.server.DaemonStateCoordinator] Idle timeout: daemon has been idle for requested period. Stopping now.
    09:36:21.605 [DEBUG] [org.gradle.launcher.daemon.server.DaemonStateCoordinator] Marking daemon stopped due to idle timeout. The daemon is running a build: false
    09:36:21.605 [DEBUG] [org.gradle.launcher.daemon.server.Daemon] stop() called on daemon
    09:36:21.606 [iNFO] [org.gradle.launcher.daemon.server.Daemon] Stop requested. Daemon is removing its presence from the registry...
    09:36:21.608 [DEBUG] [org.gradle.launcher.daemon.server.DomainRegistryUpdater] Removing our presence to clients, eg. removing this address from the registry: [d936cc49-b7b1-4e47-8cc4-b3a33855a594 port:54148, addresses:[/127.0.0.1, /0:0:0:0:0:0:0:1]]
    09:36:21.609 [DEBUG] [org.gradle.launcher.daemon.registry.PersistentDaemonRegistry] Removing daemon address: [d936cc49-b7b1-4e47-8cc4-b3a33855a594 port:54148, addresses:[/127.0.0.1, /0:0:0:0:0:0:0:1]]
    09:36:21.748 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire exclusive lock on daemon addresses registry.
    09:36:21.750 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired.
    09:36:21.784 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
    09:36:21.786 [DEBUG] [org.gradle.launcher.daemon.server.DomainRegistryUpdater] Address removed from registry.
    Daemon vm is shutting down... The daemon has exited normally or was terminated in response to a user interrupt.
    09:36:21.869 [DEBUG] [org.gradle.launcher.daemon.registry.PersistentDaemonRegistry] Removing daemon address: [d936cc49-b7b1-4e47-8cc4-b3a33855a594 port:54148, addresses:[/127.0.0.1, /0:0:0:0:0:0:0:1]]
    09:36:21.876 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire exclusive lock on daemon addresses registry.
    09:36:21.877 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] The file lock is held by a different Gradle process. I was unable to read on which port the owner listens for lock access requests.
    09:36:22.079 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired.
    09:36:22.101 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
    ----- End of the daemon log -----
    
    09:36:51 AM: External task execution finished 'build'.
    

  2. Refresh the project from the Gradle window (this is needed after running

    setupDecompWorkspace

    to allow the project to use the new Forge version), then synchronise the project from the Project window (this is needed after running

    genIntelliJRuns

    to bring up the prompt to reopen the IDE and use the new run configurations).

     

    You then need to edit the run configurations to use the classpath of the

    <ProjectName>_main

    module.

     

    Thanks! Got it working again

  3. How would I check out the branch in InteillJ? I got the repository cloned and ready but not sure what to do next.

     

    Right click somewhere in the Project window, then select Git > Repository > Branches in the context menu. Select the branch to checkout from the popup menu that appears.

     

    Thanks for the tip! And atm, I'm trying to reset my IDE because I messed up something with the configurations and seeing if that bug with the horse saddle is fixed

  4. ---UPDATE---

    I just figured it out but I got another thing; I'm trying to download my branches for IntelliJ but I only want the specific branch downloaded. How do I accomplish this?

     

    Clone the repository, then checkout the desired branch using a Git client (e.g. IntelliJ IDEA, GitHub Desktop, command-line Git).

     

    How would I check out the branch in InteillJ? I got the repository cloned and ready but not sure what to do next.

  5. Also... how do I separate my source codes between the branches on Github?

     

    ---UPDATE---

    I just figured it out but I got another thing; I'm trying to download my branches for IntelliJ but I only want the specific branch downloaded. How do I accomplish this?

  6. Hey Choonster, the default saddle subtitle is still getting replaced by mine.

     

    {
      "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": {"sounds": [{"name": "minecraft:entity.horse.saddle", "type": "event"}], "subtitle": "subtitles.tetracraft:action.saddle"
    }
    
    }

  7. 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;
    }
    }

  8. I tried but whenever my entity plays the sound, it still says the default subtitle instead of mine, but when the horse plays it, it uses my subtitle

     

    {
      "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"},
      "entity.horse.saddle": {"category": "neutral", "replace": true, "sounds": [], "subtitle": "subtitles.tetracraft:action.saddle"}
    
    
    }

  9. I know but I've done this and it doesn't change

     

    		if (!this.isChild()) {
    		if (this.isTamed()) {
    			this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(50.0D);
    			this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(6.0D);
    		} else {
    			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);
    	}

  10. It's suppose to and I think it does the same for Vanilla Wolves, their code is like this:

     

            if (this.isTamed())
            {
                this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(20.0D);
            }
            else
            {
                this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(8.0D);
            }

  11. The resource path of your loot table's

    ResourceLocation

    must relative to assets/<domain>/loot_tables.

     

    You register a loot table for

    tetracraft:terrakon

    , but there is no assets/tetracraft/loot_tables/terrakon.json file. The actual path is assets/tetracraft/loot_tables/entities/terrakon.json, so register your loot table as

    tetracraft:entities/terrakon

    .

     

    Thanks! Now the entity is dropping items!

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.