Rendu d'item avec un model techne
-
Sommaire
- Introduction
- Prérequis
- Classe du render
- Classe du model
- ClientProxy
- Finition du render
- Résultat
Introduction
Comme pour un bloc, il est possible d’assigner un model techne à un item, voici comment faire:
Prérequis
Classe du render
Pour commencer, il vous faut créer une classe avec l’implémentation “IItemRenderer”, Attention, il n’y a pas d’extension, seulement une implémentation!
package tutoriel.common; import net.minecraftforge.client.IItemRenderer; public class ItemTutorielTechneRender implements IItemRenderer { }
Puis nous y ajoutons un constructeur et trois méthodes.
public ItemTutorielTechneRender () { } @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { } @Override public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { return false; } @Override public void renderItem(ItemRenderType type, ItemStack item, Object… data) { }
Puis on ajoute deux variables, le model et la texture puis on déclare le model dans le constructeur.
protected ItemTutorielTechneModel model; protected static final ResourceLocation texture = new ResourceLocation("ModTutoriel:textures/items/itemTechne.png"); public ItemTutorielTechneRender () { model = new ItemTutorielTechneModel(); }
Dans la première méthode nous ajoutons un switch avec la case EQUIPPED et le default, pour que quand il est equipé, il fasse le rendu.
switch(type) { case EQUIPPED: return true; default: return false; }
Et presque la même chose pour la troisième méthode:
switch(type) { case EQUIPPED: { } default: break; }
Maintenant les choses se compliquent un peu, dans la case EQUIPPED (de la troisième méthode) nous allons ajouter ceci:
GL11.glPushMatrix(); Minecraft.getMinecraft().renderEngine.func_110577_a(texture); model.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); GL11.glPopMatrix(); break;
Dans l’ordre:
Ouverture de la matrice GL11
Définition de la texture
Définition du model
Fermeture de la matrice GL11Vous pouvez ajouter des autres “case” avec “EQUIPPED_FIRST_PERSON” pour un rendu en première personne et “ENTITY” pour un rendu de l’entité au sol, il existe aussi la case “INVENTORY” mais je ne lui ait pas encore trouvé d’utilité.
Classe du model
Faite votre model sur techne, avec comme base, le ModelBase.
Puis copiez/collez tout dans la classe et modifiez ceci:
public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) { super.setRotationAngles(f, f1, f2, f3, f4, f5); }
En ça:
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); }
Et ceci:
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); }
En cela:
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); }
ClientProxy
Rien de plus simple, ajoutez ceci:
MinecraftForgeClient.registerItemRenderer(ModTutoriel.ItemTutorial.itemID, (IItemRenderer)new ItemTutorielTechneRender());
#finition-du-render(Finition du render)
A ce niveau, vous pouvez tester votre item, et si vous avez (beaucoup) de chance, il sera dans votre main et dans le bon sens.
Sinon, il va falloir jouer avec les rotations et translation de GL11:Dans la troisième méthode, entre la texture et le model, vous pouvez ajouter les fontions suivantes:
Rotation:
GL11.glRotatef(Angle, X, Y, Z);
Attention, tout les arguments sont des float, si vous voulez faire une rotation sur l’axe y, il faudra mettre:
GL11.glRotatef(Angle, 0.0F, 1.0F, 0.0F);
Translation:
GL11.glTranslatef(X, Y, Z);
Attention, tout les arguments sont des float, si vous voulez faire une translation sur l’axe z, il faudra mettre par exemple:
GL11.glTranslatef(0.0F, 0.0F, -0.7F);
Après, il n’y a pas de secret, il vous faut essayer de modifier un peu tous les arguments jusqu’à trouver la bonne combinaison.
Résultat
-
Très bon tutoriel !
-
Exactement ce que j’avais besoin ! ( Je fais une arbalète 3D )
-
Wouh, ça permet du nouveau contenu bien lourd pour nos mods ! Très bon tutoriel et merci à toi !
-
sympa mais j’ai strictement rien compris a la première parti de ou vont tout les morceaux de code
-
où tu a téléchargé Techne ?
-
Désolé, mais techne n’est que disponible pour windows
-
0nit, si tu comprend bien l’anglais, je t’envoie regarder cette vidéo: http://www.youtube.com/watch?v=A0XSQtJ3cnk&list=PLy1hxmUG15wchXpnWqoyAAyX8THP47jnK&index=10
Il explique comment faire pour utiliser Techne sur mac. -
bonjour serait il possible d’avoir des explication sur “l’implementation”?
-
C’est du java les interfaces … :
http://www.siteduzero.com/informatique/tutoriels/apprenez-a-programmer-en-java/les-interfaces -
salut serait t’il possible d’avoir la class du render en un seul morceaux pour voir ou va chaque morceaux de code et une petite maj du tuto pour la 1.6.4
-
https://github.com/FFMT/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotech_mod/main/client/renderer/items/ItemScytheRender.java
Le tutoriel est toujours valable en 1.6.4. -
autre question comment on fait pour voir l’item en 3d sen être en F5 ?
et peux on faire des pièce d’armure avec un rendu 3d genre casque avec des corne et plastron avec aile ? -
Pour mettre le rendu dans l’inventaire, c’est la case INVENTORY.
Pour changer le modèle des armures, c’est la fonction getArmorModel dans l’ItemArmor. -
Tu fais comment pour le déclarer ton block sur forge ?
-
? J’ai pas compris ta question.
-
Bah la il est pas déclaré dans la classe principale, on a pas besoin de mettre un truc du genre ? : ItemTutorial = new ItemTutorial(1998, “modtutorial:tutorial”).setUnlocalizedName(“tutorial”).setCreativeTab(CreativeTabs.tabBlock);
-
Prérequis: un item simple
-
Sauf que je met quoi comme classe liée à l’objet ? ItemTutorialTechneRender ?
-
Non, le render n’est pas un item tu dois avec une classe pour le rendu et une pour le bloc