Bonjour a tous !
Je vais vous apprendre a faire une animation simple pour un mob.
1) Prérequis :
Les proxies + la classe de votre mob
Pour faire court , je vous donnerai les miens , a savoir notre cher Liquid Ocelot :
Et la texture :
Liquid.java :
Code (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
Code (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
Code (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 :
Code (java):
public void registerRenderEntity()
{
RenderingRegistry.registerEntityRenderingHandler(LiquidMob.class, new LiquidRender(new Liquid(), 0.5F));
}
Et dans votre classe principale , partie @Init :
Code (java):
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 :
Code (java):
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 :
Code (java):
= MathHelper.
cos((180F
/ (float)Math.
PI)) * -xF
* f1
;
Pour avoir une animation de balancement ( ? ) sinon :
Code (java):
= 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 :
Code (java):
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 ) :
Code (java):
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.
Fin.
(le tuto + le model + la texture sont de moi )