Posted October 25, 201411 yr 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.