Rendu d'item avec un model techne


  • Moddeurs confirmés

    Sommaire

    1. Introduction
    2. Prérequis
    3. Classe du render
    4. Classe du model
    5. ClientProxy
    6. Finition du render
    7. 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 GL11

    Vous 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

    2013-07-21_14.13.24.png


  • Administrateurs

    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 ?


  • Moddeurs confirmés

    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"?


  • Moddeurs confirmés Rédacteurs Administrateurs



  • 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


  • Moddeurs confirmés Rédacteurs Administrateurs



  • 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 ?


  • Moddeurs confirmés Rédacteurs Administrateurs

    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 ?


  • Moddeurs confirmés Rédacteurs Administrateurs

    ? 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);


  • Moddeurs confirmés

    Prérequis: un item simple



  • Sauf que je met quoi comme classe liée à l'objet ? ItemTutorialTechneRender ?


  • Moddeurs confirmés Rédacteurs Administrateurs

    Non, le render n'est pas un item tu dois avec une classe pour le rendu et une pour le bloc


Log in to reply