MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Rendu TESR Orientable

    Planifier Épinglé Verrouillé Déplacé Sans suite
    1.7.10
    10 Messages 4 Publieurs 2.0k Vues 1 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • DCEDOD Hors-ligne
      DCEDO
      dernière édition par

      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)

      :::

      package fr.shyfe.dcedo.common;
      
      import net.minecraft.client.model.ModelBase;
      import net.minecraft.client.model.ModelRenderer;
      
      public class ModelPancarteIncarnamV2 extends ModelBase
      {
          ModelRenderer Shape1;
          ModelRenderer Shape2;
          ModelRenderer Shape3;
          ModelRenderer Shape4;
          ModelRenderer Shape5;
          ModelRenderer Shape6;
          ModelRenderer Shape7;
      
        public ModelPancarteIncarnamV2()
        {
          textureWidth = 128;
          textureHeight = 128;
      
            Shape1 = new ModelRenderer(this, 50, 70);
            Shape1.addBox(0F, 0F, 0F, 4, 30, 1);
            Shape1.setRotationPoint(-2F, -6F, 0.1F);
            Shape1.setTextureSize(128, 128);
            Shape1.mirror = true;
            setRotation(Shape1, 0F, 0F, 0F);
            Shape2 = new ModelRenderer(this, 30, 30);
            Shape2.addBox(0F, 0F, 0F, 24, 24, 3);
            Shape2.setRotationPoint(-12F, -10F, -1F);
            Shape2.setTextureSize(128, 128);
            Shape2.mirror = true;
            setRotation(Shape2, 0F, 0F, 0F);
            Shape3 = new ModelRenderer(this, 10, 30);
            Shape3.addBox(0F, 0F, 0F, 5, 10, 3);
            Shape3.setRotationPoint(-16.9F, -10F, -1F);
            Shape3.setTextureSize(128, 128);
            Shape3.mirror = true;
            setRotation(Shape3, 0F, 0F, 0F);
            Shape4 = new ModelRenderer(this, 58, 15);
            Shape4.addBox(0F, 0F, 0F, 10, 7, 3);
            Shape4.setRotationPoint(2F, -16.9F, -1F);
            Shape4.setTextureSize(128, 128);
            Shape4.mirror = true;
            setRotation(Shape4, 0F, 0F, 0F);
            Shape5 = new ModelRenderer(this, 90, 40);
            Shape5.addBox(0F, 0F, 0F, 7, 4, 1);
            Shape5.setRotationPoint(12F, 0.7F, 0F);
            Shape5.setTextureSize(128, 128);
            Shape5.mirror = true;
            setRotation(Shape5, 0F, 0F, 0F);
            Shape6 = new ModelRenderer(this, 90, 20);
            Shape6.addBox(0F, 0F, 0F, 10, 4, 1);
            Shape6.setRotationPoint(17.5F, -4.3F, -0.1F);
            Shape6.setTextureSize(128, 128);
            Shape6.mirror = true;
            setRotation(Shape6, 0F, 0F, 0.7853982F);
            Shape7 = new ModelRenderer(this, 90, 61);
            Shape7.addBox(0F, 0F, 0F, 6, 4, 1);
            Shape7.setRotationPoint(14.7F, 7F, -0.1F);
            Shape7.setTextureSize(128, 128);
            Shape7.mirror = true;
            setRotation(Shape7, 0F, 0F, -0.7853982F);
        }
      
        public void renderAll()
        {
          Shape1.render(0.0625F);
          Shape2.render(0.0625F);
          Shape3.render(0.0625F);
          Shape4.render(0.0625F);
          Shape5.render(0.0625F);
          Shape6.render(0.0625F);
          Shape7.render(0.0625F);
        }
      
        private void setRotation(ModelRenderer model, float x, float y, float z)
        {
          model.rotateAngleX = x;
          model.rotateAngleY = y;
          model.rotateAngleZ = z;
        }
      }
      
      

      :::

      La classe du block model :

      :::

      package fr.shyfe.dcedo.common;
      
      import net.minecraft.client.model.ModelBase;
      import net.minecraft.client.model.ModelRenderer;
      
      public class ModelPancarteIncarnamV2 extends ModelBase
      {
          ModelRenderer Shape1;
          ModelRenderer Shape2;
          ModelRenderer Shape3;
          ModelRenderer Shape4;
          ModelRenderer Shape5;
          ModelRenderer Shape6;
          ModelRenderer Shape7;
      
        public ModelPancarteIncarnamV2()
        {
          textureWidth = 128;
          textureHeight = 128;
      
            Shape1 = new ModelRenderer(this, 50, 70);
            Shape1.addBox(0F, 0F, 0F, 4, 30, 1);
            Shape1.setRotationPoint(-2F, -6F, 0.1F);
            Shape1.setTextureSize(128, 128);
            Shape1.mirror = true;
            setRotation(Shape1, 0F, 0F, 0F);
            Shape2 = new ModelRenderer(this, 30, 30);
            Shape2.addBox(0F, 0F, 0F, 24, 24, 3);
            Shape2.setRotationPoint(-12F, -10F, -1F);
            Shape2.setTextureSize(128, 128);
            Shape2.mirror = true;
            setRotation(Shape2, 0F, 0F, 0F);
            Shape3 = new ModelRenderer(this, 10, 30);
            Shape3.addBox(0F, 0F, 0F, 5, 10, 3);
            Shape3.setRotationPoint(-16.9F, -10F, -1F);
            Shape3.setTextureSize(128, 128);
            Shape3.mirror = true;
            setRotation(Shape3, 0F, 0F, 0F);
            Shape4 = new ModelRenderer(this, 58, 15);
            Shape4.addBox(0F, 0F, 0F, 10, 7, 3);
            Shape4.setRotationPoint(2F, -16.9F, -1F);
            Shape4.setTextureSize(128, 128);
            Shape4.mirror = true;
            setRotation(Shape4, 0F, 0F, 0F);
            Shape5 = new ModelRenderer(this, 90, 40);
            Shape5.addBox(0F, 0F, 0F, 7, 4, 1);
            Shape5.setRotationPoint(12F, 0.7F, 0F);
            Shape5.setTextureSize(128, 128);
            Shape5.mirror = true;
            setRotation(Shape5, 0F, 0F, 0F);
            Shape6 = new ModelRenderer(this, 90, 20);
            Shape6.addBox(0F, 0F, 0F, 10, 4, 1);
            Shape6.setRotationPoint(17.5F, -4.3F, -0.1F);
            Shape6.setTextureSize(128, 128);
            Shape6.mirror = true;
            setRotation(Shape6, 0F, 0F, 0.7853982F);
            Shape7 = new ModelRenderer(this, 90, 61);
            Shape7.addBox(0F, 0F, 0F, 6, 4, 1);
            Shape7.setRotationPoint(14.7F, 7F, -0.1F);
            Shape7.setTextureSize(128, 128);
            Shape7.mirror = true;
            setRotation(Shape7, 0F, 0F, -0.7853982F);
        }
      
        public void renderAll()
        {
          Shape1.render(0.0625F);
          Shape2.render(0.0625F);
          Shape3.render(0.0625F);
          Shape4.render(0.0625F);
          Shape5.render(0.0625F);
          Shape6.render(0.0625F);
          Shape7.render(0.0625F);
        }
      
        private void setRotation(ModelRenderer model, float x, float y, float z)
        {
          model.rotateAngleX = x;
          model.rotateAngleY = y;
          model.rotateAngleZ = z;
        }
      }
      
      

      :::

      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

      :::

      package fr.shyfe.dcedo.common;
      
      import org.lwjgl.opengl.GL11;
      
      import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
      import net.minecraft.tileentity.TileEntity;
      import net.minecraft.util.ResourceLocation;
      import fr.shyfe.dcedo.common.DCEDO;
      
      public class TileEntityPancarteIncarnamSpecialRenderer extends TileEntitySpecialRenderer
      {
          public static ModelPancarteIncarnamV2 model = new ModelPancarteIncarnamV2();
          public static ResourceLocation texture = new ResourceLocation(DCEDO.MODID.toLowerCase(), "textures/models/blocks/texture_model_pancarte_incarnam_v2.png");
      
          @Override
          public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float partialRenderTick)
          {
                  this.renderTileEntityPancarteIncarnamV2At((TileEntityPancarteIncarnamV2)tile, x, y, z, partialRenderTick);
          }
      
          private void renderTileEntityPancarteIncarnamV2At(TileEntityPancarteIncarnamV2 tile, double x, double y, double z, float partialRenderTick)
          {
              GL11.glPushMatrix(); // ouvre une matrix
              GL11.glTranslated(x + 0.5D, y + 1.5D, z + 0.5D); // déplace le bloc sur les coordonnés et le centre
              GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); // met droit le bloc (par défaut il est à l'envers)
              this.bindTexture(texture); // affiche la texture
              model.renderAll(); // rend le modèle
              GL11.glPopMatrix(); // ferme la matrix
          }
      
      }
      
      

      :::

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

      1 réponse Dernière réponse Répondre Citer 0
      • robin4002R Hors-ligne
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs
        dernière édition par

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

        1 réponse Dernière réponse Répondre Citer 0
        • DCEDOD Hors-ligne
          DCEDO
          dernière édition par

          @‘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)

          1 réponse Dernière réponse Répondre Citer 0
          • AymericRedA Hors-ligne
            AymericRed
            dernière édition par

            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”)”

            Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

            AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

            Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
            Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

            1 réponse Dernière réponse Répondre Citer 0
            • DCEDOD Hors-ligne
              DCEDO
              dernière édition par

              @‘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 🙂

              1 réponse Dernière réponse Répondre Citer 0
              • AymericRedA Hors-ligne
                AymericRed
                dernière édition par

                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 ^^

                Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                1 réponse Dernière réponse Répondre Citer 0
                • DCEDOD Hors-ligne
                  DCEDO
                  dernière édition par

                  @‘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 ?

                  1 réponse Dernière réponse Répondre Citer 0
                  • robin4002R Hors-ligne
                    robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                    dernière édition par

                    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.

                    1 réponse Dernière réponse Répondre Citer 0
                    • DCEDOD Hors-ligne
                      DCEDO
                      dernière édition par

                      @‘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 !

                      1 réponse Dernière réponse Répondre Citer 0
                      • SCAREXS Hors-ligne
                        SCAREX
                        dernière édition par

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

                        Site web contenant mes scripts : http://SCAREXgaming.github.io

                        Pas de demandes de support par MP ni par skype SVP.
                        Je n'accepte sur skype que l…

                        1 réponse Dernière réponse Répondre Citer 0
                        • 1 / 1
                        • Premier message
                          Dernier message
                        Design by Woryk
                        ContactMentions Légales

                        MINECRAFT FORGE FRANCE © 2024

                        Powered by NodeBB