Jump to content

Recommended Posts

Posted

I am trying to make an entity's arms rotate like an Iron Golem's do but I can't get it to work. I based the code that causes the rotation off of the code for an Iron Golem but the arms don't move. All of the rest of my animations work for the entity.

 

EntityTroll.java

package com.ctwagon.testmod.entity.mobs;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityAgeable;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.EntityAIAttackOnCollide;
import net.minecraft.entity.ai.EntityAIHurtByTarget;
import net.minecraft.entity.ai.EntityAILookIdle;
import net.minecraft.entity.ai.EntityAIMate;
import net.minecraft.entity.ai.EntityAINearestAttackableTarget;
import net.minecraft.entity.ai.EntityAISwimming;
import net.minecraft.entity.ai.EntityAIWander;
import net.minecraft.entity.passive.EntityAnimal;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.DamageSource;
import net.minecraft.world.World;

public class EntityTroll extends EntityAnimal {

public int attackTimer;

public EntityTroll(World par1World) {
	super(par1World);
	this.setSize(2.0F, 3.5F);
        this.getNavigator().setAvoidsWater(true);
        this.tasks.addTask(0, new EntityAISwimming(this));
        this.tasks.addTask(1, new EntityAIAttackOnCollide(this, 0.8D, true));
	this.tasks.addTask(2, new EntityAIWander(this, 0.8D));
	this.tasks.addTask(3, new EntityAILookIdle(this));
        this.tasks.addTask(4, new EntityAIMate(this, 0.8D));
        this.targetTasks.addTask(0, new EntityAIHurtByTarget(this, true));
        this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 1, true, true));
}

/**
     * Returns true if the newer Entity AI code should be run
     */
public boolean isAIEnabled() {
	return true;
}

protected void applyEntityAttributes() {
	super.applyEntityAttributes();
	this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(100.0D);
	this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.3D);
}

/**
     * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons
     * use this to react to sunlight and start to burn.
     */
    public void onLivingUpdate()
    {
        super.onLivingUpdate();

        if (this.attackTimer > 0)
        {
            -- this.attackTimer;
        }
    }

public boolean attackEntityAsMob(Entity par1Entity)
    {
        this.attackTimer = 10;
        boolean flag = par1Entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float)(10.0));

        if (!flag)
        {
            par1Entity.motionY += 0.4000000059604645D;
        }

        return flag;
    }

@SideOnly(Side.CLIENT)
public int getAttackTimer() {
	return this.attackTimer;
}

public EntityTroll createChild(EntityAgeable par1EntityAgeable) {
	return new EntityTroll(this.worldObj);
}

}

 

ModelTroll.java

package com.ctwagon.testmod.model;

import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.util.MathHelper;

import com.ctwagon.testmod.entity.mobs.EntityTroll;

public class ModelTroll extends ModelBase
{
  //fields
    ModelRenderer Body;
    ModelRenderer Leg_1;
    ModelRenderer Leg_2;
    ModelRenderer Arm_1;
    ModelRenderer Arm_2;
    ModelRenderer Head_1;
    ModelRenderer Head_2;
  
  public ModelTroll()
  {
    textureWidth = 128;
    textureHeight = 64;
    
      Body = new ModelRenderer(this, 0, 24);
      Body.addBox(-10F, -13F, -5F, 20, 26, 10);
      Body.setRotationPoint(0F, -9F, 0F);
      Body.setTextureSize(128, 64);
      Body.mirror = true;
      setRotation(Body, 0F, 0F, 0F);
      Leg_1 = new ModelRenderer(this, 80, 0);
      Leg_1.addBox(-3F, 0F, -3F, 6, 20, 6);
      Leg_1.setRotationPoint(5F, 4F, 0F);
      Leg_1.setTextureSize(128, 64);
      Leg_1.mirror = true;
      setRotation(Leg_1, 0F, 0F, 0F);
      Leg_2 = new ModelRenderer(this, 80, 0);
      Leg_2.addBox(-3F, 0F, -3F, 6, 20, 6);
      Leg_2.setRotationPoint(-5F, 4F, 0F);
      Leg_2.setTextureSize(128, 64);
      Leg_2.mirror = true;
      setRotation(Leg_2, 0F, 0F, 0F);
      Arm_1 = new ModelRenderer(this, 60, 0);
      Arm_1.addBox(0F, -2F, -2.5F, 5, 20, 5);
      Arm_1.setRotationPoint(10F, -19F, 0F);
      Arm_1.setTextureSize(128, 64);
      Arm_1.mirror = true;
      setRotation(Arm_1, 0F, 0F, 0F);
      Arm_2 = new ModelRenderer(this, 60, 0);
      Arm_2.addBox(-5F, -2F, -2.5F, 5, 20, 5);
      Arm_2.setRotationPoint(-10F, -19F, 0F);
      Arm_2.setTextureSize(128, 64);
      Arm_2.mirror = true;
      setRotation(Arm_2, 0F, 0F, 0F);
      Head_1 = new ModelRenderer(this, 0, 14);
      Head_1.addBox(-3.5F, -3F, -4F, 7, 3, 7);
      Head_1.setRotationPoint(0F, -22F, 0F);
      Head_1.setTextureSize(128, 64);
      Head_1.mirror = true;
      setRotation(Head_1, 0F, 0F, 0F);
      Head_2 = new ModelRenderer(this, 0, 0);
      Head_2.addBox(-4F, -10F, -5F, 8, 7, 7);
      Head_2.setRotationPoint(0F, -22F, 0F);
      Head_2.setTextureSize(128, 64);
      Head_2.mirror = true;
      setRotation(Head_2, 0F, 0F, 0F);
  }
  
  public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5)
  {
    super.render(entity, f, f1, f2, f3, f4, f5);
    setRotationAngles(f, f1, f2, f3, f4, f5, entity);
    Body.render(f5);
    Leg_1.render(f5);
    Leg_2.render(f5);
    Arm_1.render(f5);
    Arm_2.render(f5);
    Head_1.render(f5);
    Head_2.render(f5);
  }
  
  private void setRotation(ModelRenderer model, float x, float y, float z)
  {
    model.rotateAngleX = x;
    model.rotateAngleY = y;
    model.rotateAngleZ = z;
  }
  
  public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity)
  {
    super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
    this.Head_1.rotateAngleY = f3 / (180F / (float)Math.PI);
    this.Head_1.rotateAngleX = f4 / (180F / (float)Math.PI);
    this.Head_2.rotateAngleY = f3 / (180F / (float)Math.PI);
    this.Head_2.rotateAngleX = f4 / (180F / (float)Math.PI);
    this.Leg_1.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1;
    this.Leg_2.rotateAngleX = MathHelper.cos(f * 0.6662F + (float)Math.PI) * 1.4F * f1;
  }
  
  /**
   * Used for easily adding entity-dependent animations. The second and third float params here are the same second
   * and third as in the setRotationAngles method.
   */
  public void setLivingAnimations(EntityLivingBase par1EntityLivingBase, float par2, float par3, float par4)
  {
      EntityTroll entitytroll = (EntityTroll)par1EntityLivingBase;
      int i = entitytroll.getAttackTimer();

      if (i > 0)
      {
          this.Arm_1.rotateAngleX = -2.0F + 1.5F * this.moveArms((float)i - par4, 10.0F);;
          this.Arm_2.rotateAngleX = -2.0F + 1.5F * this.moveArms((float)i - par4, 10.0F);;
      }
      else
      {
    	  this.Arm_1.rotateAngleX = (-0.2F + 1.5F * this.moveArms(par2, 13.0F)) * par3;
    	  this.Arm_2.rotateAngleX = (-0.2F - 1.5F * this.moveArms(par2, 13.0F)) * par3;
      }
  }
  
  private float moveArms(float par1, float par2)
  {
      return (Math.abs(par1 % par2 - par2 * 0.5F) - par2 * 0.25F) / (par2 * 0.25F);
  }

}

 

RenderTroll.java

package com.ctwagon.testmod.render;

import net.minecraft.client.model.ModelBase;
import net.minecraft.client.renderer.entity.RenderLiving;
import net.minecraft.entity.Entity;
import net.minecraft.util.ResourceLocation;

import com.ctwagon.testmod.Testmod;
import com.ctwagon.testmod.entity.mobs.EntityTroll;

public class RenderTroll extends RenderLiving {
private static final ResourceLocation mobTextures = new ResourceLocation(Testmod.MODID + ":textures/entity/Troll.png");
    private static final String __OBFID = "CL_00000984";

    public RenderTroll(ModelBase par1ModelBase, float par2)
    {
        super(par1ModelBase, par2);
    }

    /**
     * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture.
     */
    protected ResourceLocation getEntityTexture(EntityTroll par1EntityTroll)
    {
        return mobTextures;
    }

    /**
     * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture.
     */
    protected ResourceLocation getEntityTexture(Entity par1Entity)
    {
        return this.getEntityTexture((EntityTroll)par1Entity);
    }

}

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

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