Rendu TESR Orientable



  • Bonjour, j'en vient à vous car depuis plus d'une semaine je bloque sur la création d'un bloc avec rendu TESR réalisé avec Techne orientable. J'ai tenté de suivre le tutoriel mais sans succès. Si quelqu'un pouvait me lister ce que je dois ajouter dans mon code pour obtenir un bloc qui s'oriente en fonction de la direction du joueur ce serait très appréciable.

    Mon code :

    Dans ma classe principale, la déclaration du model :

    pancarteIncarnam = new PancarteIncarnam(Material.rock).setBlockName("PancarteIncarnam").setBlockTextureName(DCEDO.MODID + ":Texture_Pancarte_Incarnam").setCreativeTab(DCEDO.DCEDOCreativeTabsBlocks);
            GameRegistry.registerBlock(pancarteIncarnam, "PancarteIncarnam");
            GameRegistry.registerTileEntity(TileEntityPancarteIncarnamV2.class, "TileEntityPancarteIncarnam");
    

    La classe de mon model : (même si je ne pense pas que ce sera utile ici)

    La classe du block model :

    Le TileEntity :

    package fr.shyfe.dcedo.common;
    
    import net.minecraft.nbt.NBTTagCompound;
    import net.minecraft.network.NetworkManager;
    import net.minecraft.network.Packet;
    import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.util.IIcon;
    
    public class TileEntityPancarteIncarnamV2 extends TileEntity
    {
    
    }
    
    

    Enfin le Tile EntitySpecialRenderer

    Voîlà, merci d'avance (je précise qu'actuellement le model est visible mais que je veux pouvoir l'orienter).


  • Administrateurs

    Il y a tout qui est expliqué dans le tutoriel ….



  • @'robin4002':

    Il y a tout qui est expliqué dans le tutoriel ….

    En fait, je fais le tutoriel sur les tileEntity normalement, puis sur les blocks orientables avec la méthode des TileEntity, mais après je bloque .. Et une fois que je l'aurais une fois, je pourrais reprendre le code pour tous mes blocks

    (Au passage, ne prends pas ca comme un reproche à ton tutoriel qui sont d'ailleurs super utiles, c'est seulement que dans mon cas précis, j'arrive pas à relier les deux parties)



  • Où est-ce que tu bloques ? Si je me souviens bien dans le tuto tu as un int qui est sauvegardé dans la tile entity, il te suffit de faire ce qui est indiqué dans le tuto pour affecter la bonne valeur à l'int selon l'orientation, et après dans ta classe de rendu, tu récupères cet int et selon sa valeur, tu fais un "GL11.glRotatef(180F, 0.0F, 1.0F, 0.0F); //(faut changer le "180F")"



  • @'AymericRed':

    Où est-ce que tu bloques ? Si je me souviens bien dans le tuto tu as un int qui est sauvegardé dans la tile entity, il te suffit de faire ce qui est indiqué dans le tuto pour affecter la bonne valeur à l'int selon l'orientation, et après dans ta classe de rendu, tu récupères cet int et selon sa valeur, tu fais un "GL11.glRotatef(180F, 0.0F, 1.0F, 0.0F); //(faut changer le "180F")"

    En fait ce qui aurait été le mieux c'est de m'envoyer un "exemple" qui fonctionne, mais du coup je vais refaire le tuto et vous envoyez mes erreurs, en espérant que ce soit mieux comme ça 🙂



  • Oui c'est mieux ;), c'est toujours mieux d'essayer par soi même puis de demander aux autres la solution aux problèmes que l'on rencontre ^^



  • @'AymericRed':

    Oui c'est mieux ;), c'est toujours mieux d'essayer par soi même puis de demander aux autres la solution aux problèmes que l'on rencontre ^^

    Ah, mais j'avais déjà essayé de nombreuses fois mais sans succès, j'ai refait les tutoriels et je bloque toujours sur la même partie :

    Dans la classe de mon block, je dois ajouter :

     @SideOnly(Side.CLIENT)
        public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
        {
            if(world.getBlockMetadata(x, y, z) == 0) // vérifie que le metadata est 0, car comme déjà dit je veux que seul mon bloc de metadata 0 soit orientable
            {
                if(side == 0 || side == 1) // si le side est en bas ou en haut
                {
                    return this.icons[0][0]; // je mets la texture que j'ai prévu pour le haut et le bas
                }
                TileEntity tile = world.getTileEntity(x, y, z); // on obtient l'entité de bloc
                if(tile instanceof TileEntityPancarteIncarnamV2) // on vérifie son instance pour éviter un ClassCastException
                {
                    byte direction = ((TileEntityPancarteIncarnamV2)tile).getDirection(); // on obtient la valeur de la direction
                    return side == 3 && direction == 0 ? this.icons[0][1] : (side == 4 && direction == 1 ? this.icons[0][1] : (side == 2 && direction == 2 ? this.icons[0][1] : (side == 5 && direction == 3 ? this.icons[0][1] : this.icons[0][2]))); // et ici c'est la même condition ternaire que j'ai déjà utilisé dans le cas du bloc basique, sauf qu'on vérifie la direction et non le metadata
                }
            }
            return this.getIcon(side, world.getBlockMetadata(x, y, z)); // dans les autres cas on cherche la texture dans la fonction getIcon(side, metadata)
        }
    

    L'erreur provient de "icons", j'avoue ne pas trop comprendre l'utilité de cette partie dans mon cas.

    Euhm, je viens de réessayer en enlevant cette partie et il se trouve que ça marche ! J'ai enfin réussi à rendre mon bloc orientable.

    Au passage, quelle est la ligne à modifier pour changer la hitbox du model ?


  • Administrateurs

    https://www.minecraftforgefrance.fr/showthread.php?tid=1509#classe5

    Et en effet il ne faut pas mettre la fonction getIcon puisque le rendu est géré par le TESR et pas par la méthode classique.
    Il me semblait l'avoir précisé.

    Et pour les exemples fonctionnels, il y a le github.



  • @'robin4002':

    https://www.minecraftforgefrance.fr/showthread.php?tid=1509#classe5

    Et en effet il ne faut pas mettre la fonction getIcon puisque le rendu est géré par le TESR et pas par la méthode classique.
    Il me semblait l'avoir précisé.

    Et pour les exemples fonctionnels, il y a le github.

    Effectivement, je viens de voir les github. Merci pour toutes les aides !



  • Si le problème résolu n'oublie pas la balise 😉