Crée un animal et le placer sur l'épaule du joueur

axeldu18

Membre
Inscription
29 Mars 2014
Messages
5
Réactions
3
Points
5 121
RGCoins
25
Hello tout le monde !

Aujourd'hui je vai faire un Tuto pas trop compliquer et assez sympa, il consiste a crée un animal avec une texture sur un FTP et de le placer sur l'épaule du joueur


L'animal sera un petit chat (SANS ANIMATION).

Dans ce tuto il y auras plusieurs parties:

Sommaire:
1: Pré-requis
2: Création de l'animal avec Techne
3: La texture du model crée avec Techne
4: Intégration dans Eclipse

1: Pré-requis:

Tout d'abord vous devez possédé Techne, Techne est un logiciel de modélisation 3D et entièrement Gratuit
Lien Techne:


Ensuite il vous faut Eclipse qui va nous servir a l'intégration du model dans Minecraft
Lien Eclipse:

ATTENTION: Télécharger la version qui correspond a l'architecture de votre ordinateur (32Bits ou 64Bits).

Une fois Eclipse télécharger il vous faut MCP (Minecraft Coder Pack) qui va permetre de récupéré les sources du jeu pour pouvoir ensuite les modifier
Lien MCP:


Et pour fini un logiciel de graphisme, Moi perso je vai utiliser Paint.net
Lien Paint.net:



Récapitulatif des logiciel requis:
Techne
Eclipse
MCP
Un Logiciel de graphisme.


On se retrouve ensuite pour la 2Eme partie: La création de l'animal avec Techne

 
2: Création de l'animal avec Techne
Tout d’abord ouvrez Techne.
Une fois Techne ouvert, il vous affiche une fenêtre avec des champ a remplire.

1.PNG

J'ai choisie la class ModelBiped comme ça nous avons le model du joueur pour placer le chat sur l'épaule
Normalement vous devez avoir le personnage de minecraft



On va commencer par faire les pattes arrière:
Pour cela nous devez crée une nouvelle partie, Cliqué sur le bouton cube pour crée une nouvelle partie:

2.PNG

Un "cube" apparait dans le personnage,

4.PNG
On va maintenant le déplacer pour qu'il se trouve sur l'épaule.



Pour le déplacer, vous avez sur la gauche un menu avec des tas d'options:
5.PNG

Ensuite pour mettre la patte sur l'épaule vous devez modifier la position du cube:
Position: X: -7.7 Z: -1.0 Y: 0.0
et pour la dimension: X: 1 Z :1 Y: 2

6.PNG

ATTENTION!! N'oublier pas de modifier le Texture Offset sinon la texture du chat serat complétement Buggé.
Pour éviter cela modifier le Texture Offset par 0 et 7:
7.PNG

Ensuite pareille pour la patte gauche:
Position X: -6.3 Z: -1.0 Y: 0.0,
Dimension: X: 1 Z: 1 Y: 2
8.png

Texture Offset: 6 et 7:
9.PNG



Maintenant passons a la création du corps, Toujours pareille cliqué sur le bouton "cube" puis entré les dimension suivantes:
X: -7.5 Z: -4.5 Y: -1.0
et pour le positionnement: X: 2 Z: 2 Y:5
Si tout ce passe bien vous devriez avoir ceci:
10.PNG

On va maintenant l'incliné pour qu'il est l'air assis sur l'épaule. Pour cela il faut modifier la Rotation en X: -36 Z: 0 Y: 0. Pas besoin de toucher au texture Offset puisqu'il se trouve a
0 et 0 Quand vous allez rentré 36 Techne va automatiquement le modifier en -36.000, ne vous inquiétez pas c'est normal.



Voici le résultat:
11.PNG


Maintenant il faut crée les pattes avant. Toujours pareille nouveau cube, et cette fois si pour les dimension de la patte avant droite:
X: 1 Z: 3 Y: 1
Position: X: -7.7 Z: -3.0 Y: -1.5
Ne pas oublier le Texture Offset 14 et 0.



Résultat:
12.PNG


De même pour la patte gauche:
Dimension: X: 1 Z: 3 Y: 1
Position: X: -6.3 Z: -3.0 Y: -1.5
Texture Offset: 14 et 4

13.PNG


Passons maintenant a la queue du chat, Même chose nouveau cube,
Dimension X: 1 Z: 1Y : 3
Position X: -7.0 Z: -2.0 Y: 2.0
Texture Offset: 0 et 10:
14.PNG


Pour finir les 2 autre parties de la queue du chat:
ATTENTION !!! Vous devez modifier la Rotation de la 2Eme et 3eme partie !


1er:
Dimension: X: 1 Z:1 Y: 2
Position: X: -7.0 Z: -2.0 Y: 4.4

Texture Offset: 8 et 10
Rotation: X 35 (35.000)

15.PNG


2Eme:
Dimension X: 1 Z: 1 Y: 2
Position X: -7.0 Z: -2.5 Y: 5.6
Texture Offset 14 et 10
Rotation: X: 67 (67.000)

16.PNG


Nous approchons de la fin. :) Reste plus que la tête, le nez et les oreilles !. Passons a la tête toujours la même chose nous cube
Dimension: X: 2 Z: 2 Y:2
Position: X: -7.5 Z: -5.0 Y: 3.0
Texture Offset 18 et 0

17.PNG


Le nez maintenant Dimension: X: 1 Z:1 Y: 1
Position: X: -7.0 Z: -4.0 Y: -3.5
Texture Offset 18 et 4

18.PNG


Et pour finir le model les 2 oreilles du chat:
1er:
Dimension: X: 0 Z: 1 Y: 1
Position: X: -7.0 Z: -5.5 Y: -2.0
Texture Offset 22 et 4

19.PNG


2Eme Dimension: X: 0 Z: 1 Y: 1
Position: X: -6.0 Z: -5.5 Y: -2.0
Texture Offset 24 et 4

20.PNG



Voila le resultat avec le personnage en entier:
21.PNG


La suite demain dans l'après midi :)
 
3: La texture du model crée avec Techne
Maintenant passons a la texture du chat, de base les texture des model sont afficher en haut a gauche de Techne:
22.PNG


Vous voyer qu'il y as plusieurs patron, il y a celle du chat que l'on a placer avec le Texture Offset, et celle du personnage.Pour supprimer celle du personnage il suffit de supprimer toutes les parties du personnage affin d'avoir juste le chat au bon emplacement:
23.PNG


Maintenant reste plus qu'a exporter la texture. C'est super simple, il suffit de cliqué sur file => export as => Texture Map, Et voila vous avez le patron du skin du chat !, il reste plus qu'a le modifier pour que ça ait l'ai d'un chat.Voici le résultat avec la texture:
24.PNG


Texture map:
cat.png


Bon c'est pas parfait mais après c'est vous qui faite ce que vous voulait

Maintenant passons a l'intégration dans minecraft :), Mais avant toutes chose il faut exporter le model en java, Pour cela cliqué sur file => export as => java

Fichier java:
 
4: Intégration dans Eclipse

Dernière partie du tuto qui consiste a intégré le chat dans minecraft,

Donc premièrement dé-compilé minecraft avec MCP en double-cliquant sur "decompile" (Depuis la 1.6.2 MCP va directement chercher le jar est les librairies tout seul).

Une foit dé-compilé ouvrez Eclipse en sélectionnant la workspace de MCP (Dans le dossier de MCP il faut sélectionné le dossier Eclipse et cliqué sur OK).

Dé que votre Eclipse a fini de charger la workspace nous allons modifier la class du personnage soit la class "ModelBiped", Une fois ouvert on va commencer par définir les variables des différentes parties
PHP:
public ModelRenderer body; //Corps du chat

public ModelRenderer rightRearLeg; //Patte arriere droite

public ModelRenderer leftRearLeg; //Patte arriere gauche

public ModelRenderer rightFrontLeg; //Patte avant droite

public ModelRenderer leftFrontLeg; //Patte avant gauche

public ModelRenderer tail1; //Morceau de queue 1

public ModelRenderer tail2; //Morceau de queue 2

public ModelRenderer tail3; //Morceau de queue 3

public ModelRenderer head; //Tete du chat

public ModelRenderer nose; //Nez du chat

public ModelRenderer rightEar; //Oreille droite du chat

public ModelRenderer leftEar; //Oreille gauche du chat

Ensuite on va copier les partie du fichier généré par Techne dans la fonction :
Code:
public ModelBiped(float par1, float par2, int par3, int par4)
vers la ligne 56

Parties a copier dans la fonction:
PHP:
body = new ModelRenderer(this, 0, 0);
body.addBox(0F, 0F, 0F, 2, 2, 5);
body.setRotationPoint(-7.5F, -4.5F, -1F);
body.setTextureSize(64, 32);
body.mirror = true;
setRotation(body, -0.6283185F, 0F, 0F);
rightRearLeg = new ModelRenderer(this, 0, 7);
rightRearLeg.addBox(0F, 0F, 0F, 1, 1, 2);
rightRearLeg.setRotationPoint(-7.7F, -1F, 0F);
rightRearLeg.setTextureSize(64, 32);
rightRearLeg.mirror = true;
setRotation(rightRearLeg, 0F, 0F, 0F);
leftRearLeg = new ModelRenderer(this, 6, 7);
leftRearLeg.addBox(0F, 0F, 0F, 1, 1, 2);
leftRearLeg.setRotationPoint(-6.3F, -1F, 0F);
leftRearLeg.setTextureSize(64, 32);
leftRearLeg.mirror = true;
setRotation(leftRearLeg, 0F, 0F, 0F);
rightFrontLeg = new ModelRenderer(this, 14, 0);
rightFrontLeg.addBox(0F, 0F, 0F, 1, 3, 1);
rightFrontLeg.setRotationPoint(-7.7F, -3F, -1.5F);
rightFrontLeg.setTextureSize(64, 32);
rightFrontLeg.mirror = true;
setRotation(rightFrontLeg, 0F, 0F, 0F);
leftFrontLeg = new ModelRenderer(this, 14, 4);
leftFrontLeg.addBox(0F, 0F, 0F, 1, 3, 1);
leftFrontLeg.setRotationPoint(-6.3F, -3F, -1.5F);
leftFrontLeg.setTextureSize(64, 32);
leftFrontLeg.mirror = true;
setRotation(leftFrontLeg, 0F, 0F, 0F);
tail1 = new ModelRenderer(this, 0, 10);
tail1.addBox(0F, 0F, 0F, 1, 1, 3);
tail1.setRotationPoint(-7F, -2F, 2F);
tail1.setTextureSize(64, 32);
tail1.mirror = true;
setRotation(tail1, 0F, 0F, 0F);
tail2 = new ModelRenderer(this, 8, 10);
tail2.addBox(0F, 0F, 0F, 1, 1, 2);
tail2.setRotationPoint(-7F, -2F, 4.4F);
tail2.setTextureSize(64, 32);
tail2.mirror = true;
setRotation(tail2, 0.6108652F, 0F, 0F);
tail3 = new ModelRenderer(this, 14, 10);
tail3.addBox(0F, 0F, 0F, 1, 1, 2);
tail3.setRotationPoint(-7F, -2.5F, 5.6F);
tail3.setTextureSize(64, 32);
tail3.mirror = true;
setRotation(tail3, 1.169371F, 0F, 0F);
head = new ModelRenderer(this, 18, 0);
head.addBox(0F, 0F, 0F, 2, 2, 2);
head.setRotationPoint(-7.5F, -5F, -3F);
head.setTextureSize(64, 32);
head.mirror = true;
setRotation(head, 0F, 0F, 0F);
nose = new ModelRenderer(this, 18, 4);
nose.addBox(0F, 0F, 0F, 1, 1, 1);
nose.setRotationPoint(-7F, -4F, -3.5F);
nose.setTextureSize(64, 32);
nose.mirror = true;
setRotation(nose, 0F, 0F, 0F);
rightEar = new ModelRenderer(this, 22, 4);
rightEar.addBox(0F, 0F, 0F, 0, 1, 1);
rightEar.setRotationPoint(-7F, -5.5F, -2F);
rightEar.setTextureSize(64, 32);
rightEar.mirror = true;
setRotation(rightEar, 0F, 0F, 0F);
leftEar = new ModelRenderer(this, 24, 4);
leftEar.addBox(0F, 0F, 0F, 0, 1, 1);
leftEar.setRotationPoint(-6F, -5.5F, -2F);
leftEar.setTextureSize(64, 32);
leftEar.mirror = true;
setRotation(leftEar, 0F, 0F, 0F);
Vous allez avoir une erreur sur setRotation c'est normal il manque la fonction, pour règlè cela ajouter la fonction juste en dessous de ModelBiped vers la ligne 162 :
Code:
private void setRotation(ModelRenderer model, float x, float y, float z)
{
model.rotateAngleX = x;
model.rotateAngleY = y;
model.rotateAngleZ = z;
}

Il nous reste encore une chose a faire dans le ModelBiped pour que le chat soir complément intégré dans minecraft.

Ajouter la fonction renderCat a la fin de la class ModelBiped:
PHP:
public void renderCat(float f)
{
this.body.render(f);
this.rightRearLeg.render(f);
this.leftRearLeg.render(f);
this.rightFrontLeg.render(f);
this.leftFrontLeg.render(f);
this.tail1.render(f);
this.tail2.render(f);
this.tail3.render(f);
this.head.render(f);
this.nose.render(f);
this.rightEar.render(f);
this.leftEar.render(f);
}
Voila on a fini avec la class ModelBiped.

Maintenant on va lui attribué une texture prise depuis un FTP, Rendez-vous dans la class "AbstractClientPlayer", On va ajouter les variables pour pouvoir avoir la texture.

Nous avons 2 variables a ajouter au debut de la class:
PHP:
private ResourceLocation cats;
private ThreadDownloadImageData catDownload;

Maintenant allez dans la fonction "func_110302_j" qui se situe vers la ligne 20:
PHP:
protected void func_110302_j()

Et ajoutez ceci dans le "if (this.username != null && !this.username.isEmpty())":
PHP:
this.cats = catsRess(this.username);
this.catDownload = catThreadDownload(this.cats, this.username);

Normalement vous devriez avoir ceci:
PHP:
protected void func_110302_j()
{
System.out.println("Setting up custom skins");

if (this.username != null && !this.username.isEmpty())
{
this.field_110312_d = func_110311_f(this.username);
this.field_110313_e = func_110299_g(this.username);
this.cats = catsRess(this.username);
this.field_110316_a = func_110304_a(this.field_110312_d, this.username);
this.field_110315_c = func_110307_b(this.field_110313_e, this.username);
this.catDownload = catThreadDownload(this.cats, this.username);
}
}

On va maintenant crée le Thread qui va permet de télécharger l'image depuis le FTP et le RessourceLocation
C'est très simple on va remprendre l'exemple de la cape ligne 59:
PHP:
public static ThreadDownloadImageData func_110307_b(ResourceLocation par0ResourceLocation, String par1Str)
{
return func_110301_a(par0ResourceLocation, func_110308_e(par1Str), (ResourceLocation)null, (IImageBuffer)null);
}

public static ResourceLocation catsRess(String par0Str)
{
return new ResourceLocation("cats/" + StringUtils.stripControlCodes(par0Str));
}

Et on va crée juste en dessus ceci avec les variables du chat:
PHP:
public static ThreadDownloadImageData catThreadDownload(ResourceLocation par0ResourceLocation, String par1Str)
{
return func_110301_a(par0ResourceLocation, catURL(par1Str), (ResourceLocation)null, (IImageBuffer)null);
}

Il nous reste encore quelque fonction a crée pour que l'image soit télécharger par le Client

On va donc crée la fonction catURL qui va permettre d'aller cherche l'image grâce a un URL, Pour cela rendez-vous a la ligne 92 et ajoutez ceci:
PHP:
public static String catURL(String par0Str)
{
return String.format("http://WWW.VOTRESITE.FR/cats/%s.png", new Object[] {StringUtils.stripControlCodes(par0Str)});
}

N'oublier pas remplacer l'URL par celui de votre site et de ne pas toucher %s.png cela représente le nom du joueur

Maintenant ouvrez la class "RenderPlayer" c'est dans cette class que l'on va dire a minecraft que si le joueur a une image du chat dans le FTP alors il va l'attribué au model du chat

Allez vers la ligne 256 juste en dessous de la fonction de la cape et crée cette fonction:
PHP:
if(par1AbstractClientPlayer.catThreadDownloadImage().func_110557_a()){

}
Vous allez avoir une erreur sur "catThreadDownloadImage" c'est normal il faut vour rendre de nouveau dans la class "AbstractClientPlayer" et crée la fonction "catThreadDownloadImage" en dessous de "func_110310_o":
PHP:
public ThreadDownloadImageData catThreadDownloadImage()
{
return this.catDownload;
}
Elle sert a vérifier si le joueur a une image a sont nom sur le FTP

Retournez dans "RenderPlayer" et ajouter dans la fonction que l'on a crée ceci:
PHP:
this.func_110776_a(par1AbstractClientPlayer.func_110303_q());
this.modelBipedMain.renderCat(0.0625F);
Vous devriez avoir:
PHP:
if(par1AbstractClientPlayer.catThreadDownloadImage().func_110557_a()){
this.func_110776_a(par1AbstractClientPlayer.catRess());
this.modelBipedMain.renderCat(0.0625F);
}
Une erreur apparaît c'est normal il manque encore une fonction xD dans la class "AbstractClientPlayer"
Ajouter la RessourceLocation catRess:
PHP:
public ResourceLocation catRess()
{
return this.cats;
}
C'est la fonction qui permet de modifier le "%s.png" par le nom

Nous avons fini avec les modification de la class "AbstractClientPlayer" et "RenderPlayer"
Maintenant pour tester en jeu il faut allez modifier le nom par default qui se trouve dans la class "Main" dans le package "net.minecraft.client.main"
Le pseudo se situe a la ligne 36:
PHP:
ArgumentAcceptingOptionSpec var11 = var1.accepts("username").withRequiredArg().defaultsTo("Player" + Minecraft.getSystemTime() % 1000L, new String[0]);

Pour mettre votre pseudo supprimer:
PHP:
"Player" + Minecraft.getSystemTime() % 1000L
et ajouter votre pseudo dans les gillemets
PHP:
ArgumentAcceptingOptionSpec var11 = var1.accepts("username").withRequiredArg().defaultsTo("axeldu18", new String[0]);

Si tout ce passe bien en jeu vous devriez avoir:
25.png


C'est la fin de ce tuto j’espère avoir assez bien expliquer malgré mes faute d'orthographe un peu partout (English Power) Je vous souhaite une bonne lecture ;)

Cordialement Axeldu18
 
Je m'attendais pas dutout a te voir ici ^^
Je pense qu'il faut un minimum de connaissance pour suivre le tutoriel
Surtout avec Techne
 
Avant de faire ce tuto je savait pas faire de model avec Techne.
J'ai chercher sur internet puis j'ai trouver :)
 
Enorme tutoriel bien utiole ! Merci de ce travaille !
 
Parfait , Le tutoriel est clair ,tu merite le +1
 
WTF Très très très très très très très très très [...] bon tutoriel o.O Ta mis combien de temps a le réalisé ? tout seul ?
Mais ece que les autres joueurs voient l'animal ?
 
Retour
Haut