Bonjour a tous !
Je vais vous apprendre a faire une animation simple pour un mob.
Ce n’est pas un tutoriel pour faire un mob , donc si vous ne comprenez pas les codes , demandez de l’aide !
1) Prérequis
Les proxies
Les classe de votre mob
Pour faire court , je vous donnerai les miens , a savoir notre cher Liquid Ocelot :
Et la texture :
Liquid.java :
// Date: 20/07/2013 18:39:15
// Template version 1.1
// Java generated by Techne
// Keep in mind that you still need to fill in some blanks
// - ZeuX
package mods.nono.MGSmod.client;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.entity.Entity;
import net.minecraft.util.MathHelper;
public class Liquid extends ModelBase
{
//fields
ModelRenderer head;
ModelRenderer body;
ModelRenderer rightarm;
ModelRenderer leftarm;
ModelRenderer rightleg;
ModelRenderer leftleg;
ModelRenderer HairA;
ModelRenderer HairD;
ModelRenderer HairG;
public Liquid()
{
textureWidth = 128;
textureHeight = 128;
head = new ModelRenderer(this, 0, 0);
head.addBox(-4F, -8F, -4F, 8, 8, 8);
head.setRotationPoint(0F, 0F, 0F);
head.setTextureSize(128, 128);
head.mirror = true;
setRotation(head, 0F, 0F, 0F);
body = new ModelRenderer(this, 16, 16);
body.addBox(-4F, 0F, -2F, 8, 12, 4);
body.setRotationPoint(0F, 0F, 0F);
body.setTextureSize(128, 128);
body.mirror = true;
setRotation(body, 0F, 0F, 0F);
rightarm = new ModelRenderer(this, 40, 16);
rightarm.addBox(-3F, -2F, -2F, 4, 12, 4);
rightarm.setRotationPoint(-5F, 2F, 0F);
rightarm.setTextureSize(128, 128);
rightarm.mirror = true;
setRotation(rightarm, 0F, 0F, 0F);
leftarm = new ModelRenderer(this, 40, 16);
leftarm.addBox(-1F, -2F, -2F, 4, 12, 4);
leftarm.setRotationPoint(5F, 2F, 0F);
leftarm.setTextureSize(128, 128);
leftarm.mirror = true;
setRotation(leftarm, 0F, 0F, 0F);
rightleg = new ModelRenderer(this, 0, 16);
rightleg.addBox(-2F, 0F, -2F, 4, 12, 4);
rightleg.setRotationPoint(-2F, 12F, 0F);
rightleg.setTextureSize(128, 128);
rightleg.mirror = true;
setRotation(rightleg, 0F, 0F, 0F);
leftleg = new ModelRenderer(this, 0, 16);
leftleg.addBox(-2F, 0F, -2F, 4, 12, 4);
leftleg.setRotationPoint(2F, 12F, 0F);
leftleg.setTextureSize(128, 128);
leftleg.mirror = true;
setRotation(leftleg, 0F, 0F, 0F);
HairA = new ModelRenderer(this, 0, 38);
HairA.addBox(-4F, 0F, 0F, 8, 8, 1);
HairA.setRotationPoint(0F, -3F, 3F);
HairA.setTextureSize(128, 128);
HairA.mirror = true;
setRotation(HairA, 0.2094395F, 0F, 0F);
HairD = new ModelRenderer(this, 0, 65);
HairD.addBox(0F, 0F, 0F, 1, 7, 1);
HairD.setRotationPoint(3F, -1F, -3F);
HairD.setTextureSize(128, 128);
HairD.mirror = true;
setRotation(HairD, 0F, 0F, 0F);
HairG = new ModelRenderer(this, 0, 65);
HairG.addBox(0F, 0F, 0F, 1, 7, 1);
HairG.setRotationPoint(-4F, -1F, -3F);
HairG.setTextureSize(128, 128);
HairG.mirror = true;
setRotation(HairG, 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);
head.render(f5);
body.render(f5);
rightarm.render(f5);
leftarm.render(f5);
rightleg.render(f5);
leftleg.render(f5);
HairA.render(f5);
HairD.render(f5);
HairG.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);
}
}
LiquidRender.java
package mods.nono.MGSmod.client;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.client.renderer.entity.RenderLiving;
import net.minecraft.entity.Entity;
public class LiquidRender extends RenderLiving {
private Liquid LiquidRender = new Liquid();
public LiquidRender(Liquid LiquidRender, float par2)
{
super(new Liquid(), 0.5F);
}
}
LiquidMob.Java
package mods.nono.MGSmod.common;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EnumCreatureAttribute;
import net.minecraft.entity.monster.EntityMob;
import net.minecraft.world.World;
public class LiquidMob extends EntityMob
{
public LiquidMob(World par1World)
{
super(par1World);
this.texture = "/mods/nono/MGSmod/textures/mob/Liquid.png";
this.moveSpeed = 0.15F;
}
public int getMaxHealth()
{
return 100;
}
public int getAttackStrength(Entity par1Entity)
{
return 10;
}
public EnumCreatureAttribute getCreatureAttribute()
{
return EnumCreatureAttribute.UNDEFINED;
}
}
A placer dans votre ClientProxy.java :
public void registerRenderEntity()
{
RenderingRegistry.registerEntityRenderingHandler(LiquidMob.class, new LiquidRender(new Liquid(), 0.5F));
}
Et dans votre classe principale , partie @Init :
EntityRegistry.registerGlobalEntityID(LiquidMob.class, "Liquid", EntityRegistry.findGlobalUniqueEntityId(), 74, 38);
EntityRegistry.registerModEntity(LiquidMob.class, "Liquid", 6, this, 40, 1, true);
LanguageRegistry.instance().addStringLocalization("entity.Liquid.name","Liquid Ocelot");
proxy.registerRenderEntity();
Vous pouvez tester , vous verrez que Liquid N’est pas animé , que c’est juste une planche.
2) L’animation
Dans votre classe Liquid.Java , rendez vous à cette ligne :
Code (java):
super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
Puis ajoutez :
this.Membre.rotateAngleX
Ou Membre est à remplacer par le membre en question , ici on va le remplacer rightleg.
Vous pouvez changer X par Y ou par Z.
Ensuite , au bout de cette ligne , rajoutez :
= MathHelper.cos((180F / (float)Math.PI)) * -xF * f1;
Pour avoir une animation de balancement ( ? ) sinon :
= MathHelper.cos((180F / (float)y)) * -xF * f1;
Pour l’animation que d’un coté.
Remplacez X et Y par une valeur quelconque. ( pour X j’ai mis 3.8 )
Ensuite testez. Vous verrez que Liquid ne bouge qu’une seule jambe.
Refaites la même opération pour chacun des membres qui bougent !
Vous devriez avoir ça :
super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
this.rightleg.rotateAngleX = MathHelper.cos((180F / (float)Math.PI)) * -3.8F * f1;
this.leftleg.rotateAngleX = MathHelper.cos((180F / (float)Math.PI)) * -3.8F * f1;
this.rightarm.rotateAngleX = MathHelper.cos((180F / (float)Math.PI)) * -3.8F * f1;
this.leftarm.rotateAngleX = MathHelper.cos((180F / (float)Math.PI)) * -3.8F * f1;
Testez. Vous verrez que le mouvement n’est pas naturel …
Enlevez tout simplement le - devant un membre inférieur ( les jambes ) et supérieur ( les bras ) :
super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
this.rightleg.rotateAngleX = MathHelper.cos((180F / (float)Math.PI)) * -3.8F * f1;
this.leftleg.rotateAngleX = MathHelper.cos((180F / (float)Math.PI)) * 3.8F * f1;
this.rightarm.rotateAngleX = MathHelper.cos((180F / (float)Math.PI)) * 3.8F * f1;
this.leftarm.rotateAngleX = MathHelper.cos((180F / (float)Math.PI)) * -3.8F * f1;
Vous pouvez diminuer 3.8 ou l’augmenter si cela ne vous convient pas.
3) Copyright
le tuto + le model + la texture sont de moi
Libre a vous de le mettre sur n’importe quel site , du moment que vous me citez.