• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Créer un item zoom

    Les items
    1.6.x
    10
    35
    12959
    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.
    • elias54
      elias54 Administrateurs dernière édition par robin4002

      Salut à tous ! Vous avez été nombreux à me demander de faire ce tutoriel car il vous semble intéressant de faire un item qui fait un zoom/dé-zoom lors d’un clique droit. Et bien chose promise chose due ! 🙂

      –SOMMAIRE–

      1. Les pré-requis
      2. La classe principale
      3. Le Tick Handler
      4. La classe de l’Item
      5. Le rendu final des classes
      6. BONUS

      -ATTENTION-
      Ce tutoriel ne modifie en aucun cas le FOV de Minecraft !! Nous allons faire un vrai zoom !

      1. Les pré-requis

      Pour commencer, vous devez avoir des connaissances en java et savoir créer un item ainsi que maîtriser le TickHandler.

      2. La classe principale

      Dans la classe principale de notre Mod, nous allons y ajouter un boolean que nous allons appeler “zoom” juste au dessus de votre méthode de pré-initialisation :

      public static boolean zoom;
      

      Oui, le boolean doit être STATIC ! Sinon vous aurez une erreur ! (Pas toute de suite, mais lorsque nous en aurons besoin.)

      Oui mais pourquoi ne doit-on pas mettre = false ?
      -Car un boolean est automatiquement en false quand il n’y a pas d’égale.

      3. Le Tick Handler

      Eh oui, il fallait s’en douter, mais pour que le zoom soit fonctionnel, nous aurons besoin d’un TickHandler ! (Par pitié, ne ramenez pas la fonction “onUpdate” de la classe Item ! Le zoom ne fonctionne pas avec !)

      Pour les zoom, nous n’utiliserons pas un TickCommonHandler, mais plutôt un TickClientHandler ;). Le serveur n’a pas à gérer le zoom, mais le boolean ! 😄

      Donc faites une classe avec un nom quelconque du moment qu’elle implémente ITickHandler.

      Donc moi je vais l’appeler “TickClientHandler” comme ceci :

      public class TickClientHandler implements ITickHandler
      

      Ensuite vous allez devoir ajouter ces méthodes dans la classe :

      @Override
      public void tickStart(EnumSet<TickType> type, Object… tickData)
      {
      }
      
      @Override
      public void tickEnd(EnumSet<TickType> type, Object... tickData)
      {
      }
      
      @Override
      public EnumSet<TickType> ticks()
      {
          return EnumSet.of(TickType.RENDER, TickType.CLIENT);
      }
      
      @Override
      public String getLabel()
      {
          return "TickClientHandler";
      }
      

      Ajoutez-les bien comme je vous l’ai montré ! Car j’ai un peu modifié certaines méthodes comme celle-ci :

      @Override
      public EnumSet<TickType> ticks()
      {
          return EnumSet.of(TickType.RENDER, TickType.CLIENT);
      }
      

      On a déjà fini ?!
      -Euh… Non… ^^ Loin de là même. 😉

      Maintenant, nous allons passer aux choses sérieuses ! 😄

      Tout en bas de votre classe, créez un void statique que nous allons appeler “zoom” et y ajouter un float comme paramètre.
      Ex :

      public static void zoom(float value)
      {
      }
      

      C’est ici que nous allons ajouter une ligne qui va faire appel à vos connaissances Java… J’ai nommé : La reflection ! 🙂
      La plupart du temps, on fait ses propres lignes de reflection java (oui reflection et pas réflexion, la JVM n’a pas de cerveau et ne réfléchit pas ^^), mais grâce à Forge, nous avons une version simplifié de ceci ! 🙂 Et ce, en une ligne !

      C’est bien beau tout cela, mais… C’est quoi cette fameuse “ligne” ?

      Tout simplement celle qui va permettre la modification du zoom. 🙂

      Pourquoi utiliser cette ligne alors que nous pouvions tout simplement appeler cameraZoom de EntityRenderer ?

      Tout simplement que le field cameraZoom n’est pas accessible. Et que pour rendre accessible un field sans modifier la classe qui le contient, c’est là que la reflection java intervient.

      Dans votre methode zoom, ajoutez cette ligne :

      ObfuscationReflectionHelper.setPrivateValue(EntityRenderer.class, FMLClientHandler.instance().getClient().entityRenderer, value, "cameraZoom");
      

      Pour résumer cette ligne : Elle va définir la valeur “value” (nom de notre float dans le paramètre de la méthode) au field cameraZoom (il est appelé en String car cela ne servirait à rien sinon)

      Maintenant que nous avons fait notre fonction zoom, il faut l’utiliser maintenant ! 😄

      Rendez-vous dans la méthode tickEnd et ajoutez ces deux déclarations :

      final Minecraft minecraft = FMLClientHandler.instance().getClient();
      final EntityPlayerSP player = minecraft.thePlayer;
      

      Et pour ceux comme moi qui connaissent les TickHandler, il faut jamais oublier cette condition :

      if (type.equals(EnumSet.of(TickType.CLIENT)))
      {
      }
      

      Et c’est dans cette condition que nous allons rendre notre code utile ! 🙂

      Certains d’entre vous l’aurons compris, nous allons faire une autre condition DANS celle-ci !
      Ajoutez cette autre condition dans la condition que je vous ai montré ci dessus :

      if(VotreClassPrincipale.zoom)
      {
      } else {
      }
      

      Oh tiens, un else ! Mais oui voyons, c’est normal ! 😉

      Remplacez VotreClassPrincipale par le nom de votre class principale.
      Nous allons, une troisième et dernière fois, ajouter une condition qui va vérifier si le joueur est bien à la première personne et n’a aucun GUI d’ouvert !

      if(minecraft.gameSettings.thirdPersonView == 0 && minecraft.currentScreen == null)
      {
      }
      

      Maintenant, on ajoute (enfin) notre zoom(value); ! 😄

      zoom(value);
      

      Remplacez value par la quantité de zoom, pour ce tutoriel, nous allons mettre 6.0F(c’est déjà pas mal).

      Et dans le else de la condition if(VotreClassePrincipale.zoom), ajoutez de nouveau cette même ligne :

      zoom(1.0F);
      

      Pourquoi 1.0F ?
      -1.0 est le zoom par défaut de la caméra. (Donc pour récupérer la vue normal.)

      Votre méthode tickEnd doit ressembler à ça (normalement) :

      public void tickEnd(EnumSet<TickType> type, Object... tickData)
      {
          final Minecraft minecraft = FMLClientHandler.instance().getClient();
          final EntityPlayerSP player = minecraft.thePlayer;
          if (type.equals(EnumSet.of(TickType.CLIENT)))
          {
              if(VotreClassePrincipale.zoom)
              {
                  if(minecraft.gameSettings.thirdPersonView == 0 && minecraft.currentScreen == null)
                  {
                  zoom(6.0F); // ou le nombre que vous voulez, mais 6.0 c'est déjà assez
                  }
              }else {
                  zoom(1.0F); // on rétabli le zoom
              }
          }
      }
      

      Et voilà, nous avons fini la partie qui consistait à créer le zoom ! 😉
      Maintenant il nous faut appeler le boolean dans notre classe de l’item !

      4. La classe de l’Item

      Dans cette partie, je ne vais pas vous apprendre à créer un item basique, je vous invite à voir le tutoriel de robin pour cela !

      Donc je vais nommer notre classe ItemZoomer !

      Faites ensuite la base de l’item (c’est à dire la classe avec le constructeur ainsi que sa déclaration dans la classe principale, etc…)

      Pour utiliser notre zoom avec l’item, nous aurons besoin d’utiliser la fonction onRightClick de Item.java :

      public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
      {
          return stack;
      }
      

      Et c’est là que se joue la touche finale ! 😉

      Juste au dessus de “return stack” ajoutez la condition et ces quelques lignes suivante :

      if(!world.isRemote)
      {
          VotreClassePrincipale.zoom = !VotreClassePrincipale.zoom;
      }
      

      Encore une fois remplacez VotreClassePrincipale par le nom de votre classe principale 🙂

      Et voilà, nous avons créer notre bel item zoomer ! 😛

      5. Le rendu final des classes

      La classe principale (exemple) :

      public static Item itemZoomer;
      

      et dans votre methode d’initialisation :

      itemZoomer = new ItemZoomer(votreID).setCreativeTab(Votre_Creative_Tab).setUnlocalizedName("itemZoomer").setTextureName("monModID:itemZoomer");
      TickRegistry.registerTickHandler(new TickClientHandler(), Side.CLIENT); // car c'est le client qui gère le zoom et non le serveur
      

      Au dessus de votre méthode de pré-initialisation :

      public static boolean zoom;
      

      Le TickClientHandler :

      public class TickClientHandler implements ITickHandler {
      
          @Override
          public void tickStart(EnumSet<TickType> type, Object... tickData) {
              final Minecraft minecraft = FMLClientHandler.instance().getClient();
          }
      
          @Override
          public void tickEnd(EnumSet<TickType> type, Object... tickData)
          {
              final Minecraft minecraft = FMLClientHandler.instance().getClient();
              final EntityPlayerSP player = minecraft.thePlayer;
              if (type.equals(EnumSet.of(TickType.CLIENT)))
              {
                  if(VotreClassePrincipale.zoom)
                  {
                      if(minecraft.gameSettings.thirdPersonView == 0 && minecraft.currentScreen == null)
                      {
                          zoom(6F);
                      }
                  }else {
                      zoom(1.0F);
                  }
      
              }
          }
      
          @Override
          public EnumSet<TickType> ticks() {
              return EnumSet.of(TickType.RENDER, TickType.CLIENT);
          }
      
          @Override
          public String getLabel() {
              return "TickClientHandler";
          }
      
          public static void zoom(float value)
          {
              ObfuscationReflectionHelper.setPrivateValue(EntityRenderer.class, FMLClientHandler.instance().getClient().entityRenderer, value, "cameraZoom");
          }
      }
      

      La classe de l’item :

      public class ItemZoomer extends Item{
      
          public ItemZoomer(int i)
          {
              super(i);
          }
      
          @Override
          public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
          {
              if(!world.isRemote)
              {
                  VotreClassePrincipale.zoom = !VotreClassePrincipale.zoom;
              }
              return stack;
          }
      }
      

      Dans ce tutoriel je n’ai pas mis les packages ou autres trucs que vous êtes censé vous même inclure. (Ce qui explique pourquoi je n’ai pas mis de class principal intégrale dans la partie “rendue final” 🙂

      6. BONUS

      Pour le bonus, pas grand chose… Ah si ! Ajouter un overlay pour donner un petit effet à votre zoom ! 😄

      Overlay ? C’est quoi ça ? 😮

      Ça : http://puu.sh/46id6.png

      Pour se faire, c’est simple, ajoutez cette ligne tout en haut de votre TickHandler :

      public static final ResourceLocation zoomOverlay = new ResourceLocation("votreModID", "textures/blur/votreZoomOverlay.png");
      

      Comme vous l’aurez compris il s’agit d’une texture que nous allons imposer à l’écran ! 🙂

      -ATTENTION-
      La texture de l’overlay doit être en 256x256 ! (si vous faites un téléscope (par exemple), autant vous donner l’overlay : http://puu.sh/46iD2.png Maintenant vous avez un exemple de ce que je veux dire. En effet, la texture semble écrasé, mais in game elle ne le sera pas, car grâce à la méthode que je vais vous montrer, nous allons “étirer” la texture histoire qu’elle ressemble à quelque chose ! 🙂 )

      Donc dans votre classe, ajoutez cette méthode :

      public static void renderTextureOverlay(ResourceLocation s, float f)
      {
          Minecraft minecraft = FMLClientHandler.instance().getClient();
          ScaledResolution scaledresolution = new ScaledResolution(minecraft.gameSettings, minecraft.displayWidth, minecraft.displayHeight);
          int i = scaledresolution.getScaledWidth();
          int j = scaledresolution.getScaledHeight();
          GL11.glEnable(GL11.GL_BLEND);
          GL11.glDisable(GL11.GL_DEPTH_TEST);
          GL11.glDepthMask(false);
          GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
          GL11.glColor4f(1.0F, 1.0F, 1.0F, f);
          GL11.glDisable(GL11.GL_ALPHA_TEST);
          minecraft.getTextureManager().bindTexture(s);
          Tessellator tessellator = Tessellator.instance;
          tessellator.startDrawingQuads();
          tessellator.addVertexWithUV(0.0D, j, -90D, 0.0D, 1.0D);
          tessellator.addVertexWithUV(i, j, -90D, 1.0D, 1.0D);
          tessellator.addVertexWithUV(i, 0.0D, -90D, 1.0D, 0.0D);
          tessellator.addVertexWithUV(0.0D, 0.0D, -90D, 0.0D, 0.0D);
          tessellator.draw();
          GL11.glDepthMask(true);
          GL11.glEnable(GL11.GL_DEPTH_TEST);
          GL11.glEnable(GL11.GL_ALPHA_TEST);
          GL11.glColor4f(1.0F, 1.0F, 1.0F, f);
      }
      

      On a presque fini ! Nous avons préparé ce dont nous avons besoin. 🙂

      Créez une nouvelle condition en dessous de :

      if (type.equals(EnumSet.of(TickType.CLIENT)))
      {
      }
      

      Elle est exactement la même, juste à remplacer CLIENT par RENDER, donc comme ceci :

      if (type.equals(EnumSet.of(TickType.RENDER)))
      {
      }
      

      Et dans cette condition nous allons ajouter encore une AUTRE condition qui va appeler la méthode que nous avons faite ci dessus ! 😄

      if(VotreClassePrincipale.zoom && minecraft.gameSettings.thirdPersonView == 0 && minecraft.currentScreen == null)
      {
          renderTextureOverlay(zoomOverlay, 1.0F);
      }
      

      C’est tout ?!

      Oui, déjà fini ^^

      Voilà ce à quoi votre classe TickHandler devrait ressembler :

      public class TickClientHandler implements ITickHandler
      {
          public static final ResourceLocation zoomOverlay = new ResourceLocation("votreModID", "textures/blur/votreZoomOverlay.png"); //256x256 la texture je vous le rappel ! :D
      
          @Override
          public void tickStart(EnumSet<TickType> type, Object... tickData) {
          }
      
          @Override
          public void tickEnd(EnumSet<TickType> type, Object... tickData)
          {
              final Minecraft minecraft = FMLClientHandler.instance().getClient();
              final EntityPlayerSP player = minecraft.thePlayer;
              if (type.equals(EnumSet.of(TickType.CLIENT)))
              {
                  if(VotreClassePrincipale.zoom)
                  {
                      if(minecraft.gameSettings.thirdPersonView == 0 && minecraft.currentScreen == null)
                      {
                          zoom(6F);
                      }
                  }else {
                      zoom(1.0F);
                  }
              }
              if (type.equals(EnumSet.of(TickType.RENDER)))
              {
                  if(VotreClassePrincipale.zoom && minecraft.gameSettings.thirdPersonView == 0 && minecraft.currentScreen == null)
                  {
                      renderTextureOverlay(zoomOverlay, 1.0F);
                  }
              }
          }
      
          public static void renderTextureOverlay(ResourceLocation s, float f)
          {
              Minecraft minecraft = FMLClientHandler.instance().getClient();
              ScaledResolution scaledresolution = new ScaledResolution(minecraft.gameSettings, minecraft.displayWidth, minecraft.displayHeight);
              int i = scaledresolution.getScaledWidth();
              int j = scaledresolution.getScaledHeight();
              GL11.glEnable(GL11.GL_BLEND);
              GL11.glDisable(GL11.GL_DEPTH_TEST);
              GL11.glDepthMask(false);
              GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
              GL11.glColor4f(1.0F, 1.0F, 1.0F, f);
              GL11.glDisable(GL11.GL_ALPHA_TEST);
              minecraft.getTextureManager().bindTexture(s);
              Tessellator tessellator = Tessellator.instance;
              tessellator.startDrawingQuads();
              tessellator.addVertexWithUV(0.0D, j, -90D, 0.0D, 1.0D);
              tessellator.addVertexWithUV(i, j, -90D, 1.0D, 1.0D);
              tessellator.addVertexWithUV(i, 0.0D, -90D, 1.0D, 0.0D);
              tessellator.addVertexWithUV(0.0D, 0.0D, -90D, 0.0D, 0.0D);
              tessellator.draw();
              GL11.glDepthMask(true);
              GL11.glEnable(GL11.GL_DEPTH_TEST);
              GL11.glEnable(GL11.GL_ALPHA_TEST);
              GL11.glColor4f(1.0F, 1.0F, 1.0F, f);
          }
      
          @Override
          public EnumSet<TickType> ticks() {
              // TODO Auto-generated method stub
              return EnumSet.of(TickType.RENDER, TickType.CLIENT);
          }
      
          public static void zoom(float value)
          {
              ObfuscationReflectionHelper.setPrivateValue(EntityRenderer.class, FMLClientHandler.instance().getClient().entityRenderer, value, "cameraZoom");
          }
      
          @Override
          public String getLabel() {
              return "TickClientHandler";
          }
      }
      

      J’espère que ce tutoriel vous aura plu, il m’a beaucoup été demandé, donc je l’ai fait. Et encore il faut que je me relise, car je suis persuadé que j’ai fait des fautes (j’ai passé la journée à faire ce tutoriel ^^).

      Mon site | GitHub

      1 réponse Dernière réponse Répondre Citer 0
      • 0nit
        0nit dernière édition par

        Super tuto 😄
        Je te met 4 étoiles(même si on ne peut pas en mettre sur les tuto validés) car je n’aime pas que l’on me prenne pour un c**

        Remplacez VotreClassPrincipale par le nom de votre class principale.

        PS: bien sur je rigole 😛

        Mes tutoriels:

        >! [1.6.x] - Le kit d'outils
        >! [1.6.x] - Les recettes du four

        1 réponse Dernière réponse Répondre Citer 0
        • Nolan-XX
          Nolan-XX dernière édition par

          Super tuto qui me sera utile , mais deux questions :

          • comment changer la touche pour zoomer ? car sur mon objet , le RightClick est déjà utilisé
          • Comment afficher une image lors du zoom ? Pour faire un fusil sniper par exemple
          1 réponse Dernière réponse Répondre Citer 0
          • robin4002
            robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

            Pour afficher quelque chose, Overlay :
            https://github.com/MCNanotech/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotech_mod/main/core/ClientProxy.java#L84
            https://github.com/MCNanotech/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotech_mod/main/client/gui/GuiOverlay.java

            Pour la touche, KeyBindingRegistry, je fais voir pour faire un tutoriel dessus. Et sinon :
            https://github.com/MCNanotech/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotech_mod/ultimateGraviSuite/keyboard/KeyboardClient.java

            1 réponse Dernière réponse Répondre Citer 0
            • elias54
              elias54 Administrateurs dernière édition par

              @‘Nolan-XX’:

              • comment changer la touche pour zoomer ? car sur mon objet , le RightClick est déjà utilisé

              Check le lien de robin 🙂

              @‘Nolan-XX’:

              • Comment afficher une image lors du zoom ? Pour faire un fusil sniper par exemple

              C’est le bonus ça ^^ Je le ferais quand j’aurais le temps ! 🙂 Car j’ai un système avancé de l’affichage overlay que celui du lien de robin 🙂

              Mon site | GitHub

              1 réponse Dernière réponse Répondre Citer 0
              • Nolan-XX
                Nolan-XX dernière édition par

                @‘robin4002’:

                Pour afficher quelque chose, Overlay :
                https://github.com/MCNanotech/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotech_mod/main/core/ClientProxy.java#L84
                https://github.com/MCNanotech/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotech_mod/main/client/gui/GuiOverlay.java

                Pour la touche, KeyBindingRegistry, je fais voir pour faire un tutoriel dessus. Et sinon :
                https://github.com/MCNanotech/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotech_mod/ultimateGraviSuite/keyboard/KeyboardClient.java

                Ne le prends pas mal , mais j’ai rien compris Oo
                De plus , du peu que j’ai compris de ta classe KeyboardClient , c’est pour effectuer une action en appuyant sur une touche quand un certain objet est équipé , et ce n’est pas ce que je veux faire …

                1 réponse Dernière réponse Répondre Citer 0
                • elias54
                  elias54 Administrateurs dernière édition par

                  Et bien c’est simple en fait, dans ton tick client handler, tu mets une condition “if(Keyboard.isKeyDown(Keyboard.KEY_Z))”

                  à la place du VotreClassePrincipale.zoom 🙂

                  Mon site | GitHub

                  1 réponse Dernière réponse Répondre Citer 0
                  • Nolan-XX
                    Nolan-XX dernière édition par

                    @‘elias54’:

                    Et bien c’est simple en fait, dans ton tick client handler, tu mets une condition “if(Keyboard.isKeyDown(Keyboard.KEY_Z))”

                    à la place du VotreClassePrincipale.zoom 🙂

                    Il me dit : KEY_Z cannot be resolved or is not a field

                    Et dans la classe de l’objet , je remets if(Keyboard.isKeyDown(Keyboard.KEY_Z)) ?

                    1 réponse Dernière réponse Répondre Citer 0
                    • elias54
                      elias54 Administrateurs dernière édition par

                      Non, dans le tick handler seulement, et as-tu bien importé la bonne classe ? Car il y a deux class Keyboard 😉

                      Mon site | GitHub

                      1 réponse Dernière réponse Répondre Citer 0
                      • Nolan-XX
                        Nolan-XX dernière édition par

                        J’ai importé : net.java.games.input.Keyboard;
                        C’était la mauvaise je suppose :s

                        et dans la classe de mon Item je mets quoi du coup ?

                        1 réponse Dernière réponse Répondre Citer 0
                        • elias54
                          elias54 Administrateurs dernière édition par

                          Oui c’est la mauvaise. Envoie tes sources en privé je t’arrange le tout 🙂

                          Mon site | GitHub

                          1 réponse Dernière réponse Répondre Citer 0
                          • elias54
                            elias54 Administrateurs dernière édition par

                            Je viens d’ajouter le bonus au tuto ! 🙂 Enjoy.

                            Mon site | GitHub

                            1 réponse Dernière réponse Répondre Citer 0
                            • Nolan-XX
                              Nolan-XX dernière édition par

                              @‘elias54’:

                              #6. BONUS(6. BONUS)

                              Pour le bonus, pas grand chose… Ah si ! Ajouter un overlay pour donner un petit effet à votre zoom ! 😄

                              Overlay ? C’est quoi ça ? 😮
                              -Ça : http://puu.sh/46id6.png

                              Pour se faire, c’est simple, ajoutez cette ligne tout en haut de votre TickHandler :

                              
                              public static final ResourceLocation zoomOverlay = new ResourceLocation("votreModID", "textures/blur/votreZoomOverlay.png");
                              
                              

                              Comme vous l’aurez compris il s’agit d’une texture que nous allons imposer à l’écran ! 🙂

                              %(#FF0000)[-ATTENTION-
                              La texture de l’overlay doit être en 256x256 ! (si vous faites un téléscope (par exemple), autant vous donner l’overlay : http://puu.sh/46iD2.png Maintenant vous avez un exemple de ce que je veux dire. En effet, la texture semble écrasé, mais in game elle ne le sera pas, car grâce à la méthode que je vais vous montrer, nous allons “étirer” la texture histoire qu’elle ressemble à quelque chose ! 🙂 )]

                              Donc dans votre classe, ajoutez cette méthode :

                              
                              public static void renderTextureOverlay(ResourceLocation s, float f)
                              {
                              Minecraft minecraft = FMLClientHandler.instance().getClient();
                              ScaledResolution scaledresolution = new ScaledResolution(minecraft.gameSettings, minecraft.displayWidth, minecraft.displayHeight);
                              int i = scaledresolution.getScaledWidth();
                              int j = scaledresolution.getScaledHeight();
                              GL11.glEnable(GL11.GL_BLEND);
                              GL11.glDisable(GL11.GL_DEPTH_TEST);
                              GL11.glDepthMask(false);
                              GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
                              GL11.glColor4f(1.0F, 1.0F, 1.0F, f);
                              GL11.glDisable(GL11.GL_ALPHA_TEST);
                              minecraft.func_110434_K().func_110577_a(s);
                              Tessellator tessellator = Tessellator.instance;
                              tessellator.startDrawingQuads();
                              tessellator.addVertexWithUV(0.0D, j, -90D, 0.0D, 1.0D);
                              tessellator.addVertexWithUV(i, j, -90D, 1.0D, 1.0D);
                              tessellator.addVertexWithUV(i, 0.0D, -90D, 1.0D, 0.0D);
                              tessellator.addVertexWithUV(0.0D, 0.0D, -90D, 0.0D, 0.0D);
                              tessellator.draw();
                              GL11.glDepthMask(true);
                              GL11.glEnable(GL11.GL_DEPTH_TEST);
                              GL11.glEnable(GL11.GL_ALPHA_TEST);
                              GL11.glColor4f(1.0F, 1.0F, 1.0F, f);
                              }
                              
                              

                              On a presque fini ! Nous avons préparé ce dont nous avons besoin. 🙂

                              Créez une nouvelle condition en dessous de :

                              
                              if (type.equals(EnumSet.of(TickType.CLIENT)))
                              {
                              }
                              
                              

                              Elle est exactement la même, juste à remplacer CLIENT par RENDER, donc comme ceci :

                              
                              if (type.equals(EnumSet.of(TickType.RENDER)))
                              {
                              }
                              
                              

                              Et dans cette condition nous allons ajouter encore une AUTRE condition qui va appeler la méthode que nous avons faite ci dessus ! 😄

                              
                              if(VotreClassePrincipale.zoom && minecraft.gameSettings.thirdPersonView == 0 && minecraft.currentScreen == null)
                              {
                              renderTextureOverlay(zoomOverlay, 1.0F);
                              }
                              
                              

                              C’est tout ?!
                              -Oui, déjà fini ^^

                              Voilà ce à quoi votre classe TickHandler devrait ressembler :

                              
                              public class TickClientHandler implements ITickHandler
                              {
                              public static final ResourceLocation zoomOverlay = new ResourceLocation("votreModID", "textures/blur/votreZoomOverlay.png"); //256x256 la texture je vous le rappel ! :D
                              
                              @Override
                              public void tickStart(EnumSet <ticktype>type, Object... tickData) {
                              }
                              
                              @Override
                              public void tickEnd(EnumSet <ticktype>type, Object... tickData)
                              {
                              final Minecraft minecraft = FMLClientHandler.instance().getClient();
                              final EntityPlayerSP player = minecraft.thePlayer;
                              if (type.equals(EnumSet.of(TickType.CLIENT)))
                              {
                              if(VotreClassePrincipale.zoom)
                              {
                              if(minecraft.gameSettings.thirdPersonView == 0 && minecraft.currentScreen == null)
                              {
                              zoom(6F);
                              }
                              }else {
                              zoom(1.0F);
                              }
                              }
                              if (type.equals(EnumSet.of(TickType.RENDER)))
                              {
                              if(VotreClassePrincipale.zoom && minecraft.gameSettings.thirdPersonView == 0 && minecraft.currentScreen == null)
                              {
                              renderTextureOverlay(zoomOverlay, 1.0F);
                              }
                              }
                              }
                              
                              public static void renderTextureOverlay(ResourceLocation s, float f)
                              {
                              Minecraft minecraft = FMLClientHandler.instance().getClient();
                              ScaledResolution scaledresolution = new ScaledResolution(minecraft.gameSettings, minecraft.displayWidth, minecraft.displayHeight);
                              int i = scaledresolution.getScaledWidth();
                              int j = scaledresolution.getScaledHeight();
                              GL11.glEnable(GL11.GL_BLEND);
                              GL11.glDisable(GL11.GL_DEPTH_TEST);
                              GL11.glDepthMask(false);
                              GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
                              GL11.glColor4f(1.0F, 1.0F, 1.0F, f);
                              GL11.glDisable(GL11.GL_ALPHA_TEST);
                              minecraft.func_110434_K().func_110577_a(s);
                              Tessellator tessellator = Tessellator.instance;
                              tessellator.startDrawingQuads();
                              tessellator.addVertexWithUV(0.0D, j, -90D, 0.0D, 1.0D);
                              tessellator.addVertexWithUV(i, j, -90D, 1.0D, 1.0D);
                              tessellator.addVertexWithUV(i, 0.0D, -90D, 1.0D, 0.0D);
                              tessellator.addVertexWithUV(0.0D, 0.0D, -90D, 0.0D, 0.0D);
                              tessellator.draw();
                              GL11.glDepthMask(true);
                              GL11.glEnable(GL11.GL_DEPTH_TEST);
                              GL11.glEnable(GL11.GL_ALPHA_TEST);
                              GL11.glColor4f(1.0F, 1.0F, 1.0F, f);
                              }
                              
                              @Override
                              public EnumSet <ticktype>ticks() {
                              // TODO Auto-generated method stub
                              return EnumSet.of(TickType.RENDER, TickType.CLIENT);
                              }
                              
                              public static void zoom(float value)
                              {
                              ObfuscationReflectionHelper.setPrivateValue(EntityRenderer.class, FMLClientHandler.instance().getClient().entityRenderer, value, "cameraZoom");
                              }
                              
                              @Override
                              public String getLabel() {
                              return "TickClientHandler";
                              }
                              
                              }
                              
                              ```</ticktype></ticktype></ticktype>
                              

                              Le public ```java
                              static final ResourceLocation zoomOverlay = new ResourceLocation(“votreModID”, “textures/blur/votreZoomOverlay.png”);

                              et le ```java
                              minecraft.func_110434_K().func_110577_a(s);
                              ``` et```java
                              public static void renderTextureOverlay(ResourceLocation s, float f)
                              ``` sont soulignés en rouge , je suppose qu'ils n'existent pas en 1.5.2 , donc par quoi les remplacer ?
                              1 réponse Dernière réponse Répondre Citer 0
                              • robin4002
                                robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                                Oui les resourceLocation c’est en 1.6, en 1.5 c’est entre chose, la même chose que pour les TileEntitySpecialRender il me semble.

                                1 réponse Dernière réponse Répondre Citer 0
                                • elias54
                                  elias54 Administrateurs dernière édition par

                                  en 1.5.2, vire la ligne public static final ResourceLocation et remplace le ResourceLocation du void par String.

                                  Ensuite, tu auras une ligne en erreur dans la méthode, remplace la par minecraft.bindTexture(“laTextureEtSonChemin.png”)

                                  Mon site | GitHub

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • Nolan-XX
                                    Nolan-XX dernière édition par

                                    @‘robin4002’:

                                    Oui les resourceLocation c’est en 1.6, en 1.5 c’est **autre **chose, la même chose que pour les TileEntitySpecialRender il me semble.

                                    Et je dois faire quoi du coup ?
                                    Tu sais , je n’ai pas ton niveau …

                                    @‘elias54’:

                                    en 1.5.2, vire la ligne public static final ResourceLocation et remplace le ResourceLocation du void par String.

                                    Ensuite, tu auras une ligne en erreur dans la méthode, remplace la par minecraft.bindTexture(“laTextureEtSonChemin.png”)

                                    J’ai toujours une erreur a bindTexture

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • elias54
                                      elias54 Administrateurs dernière édition par

                                      mh…
                                      renderengine ou quelque chose comme ça… je sais que c’est minecraft.QUELQUECHOSE.bindTexture…

                                      Mon site | GitHub

                                      1 réponse Dernière réponse Répondre Citer 0
                                      • pulgan
                                        pulgan dernière édition par

                                        Salut d’abord très bien comme tuto mais j’ai un problème , j’ai une erreur à cette ligne

                                        minecraft.getTextureManager().bindTexture(s);

                                        Tu aurait une idée si je la suprime sa marche mais j’ai l’image ou il y a toute leS image genre la. Barre de vie , les cœur pourrait tu m’aider

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

                                          minecraft.func_110434_K().func_110577_a(s); pour les anciennes version de forge.
                                          Les tutoriels ont été mis à jour pour les nouvelles mapping de mcp : https://www.minecraftforgefrance.fr/topic/166/mise-à-jour-de-tous-les-tutoriels-vers-les-nouvelles-mappings
                                          Il est mieux d’utiliser une version de forge supérieur à 849.

                                          1 réponse Dernière réponse Répondre Citer 0
                                          • pulgan
                                            pulgan dernière édition par

                                            @‘robin4002’:

                                            minecraft.func_110434_K().func_110577_a(s); pour les anciennes version de forge.
                                            Les tutoriels ont été mis à jour pour les nouvelles mapping de mcp : http://www.minecraftforgefrance.fr/showthread.php?tid=188
                                            Il est mieux d’utiliser une version de forge supérieur à 849.

                                            j’ai remit a jour le forge mais quand je met la ligne:

                                            mc.getTextureManager().bindTexture(resourcelocation)
                                            

                                            j’ai toujours une erreur a “mc” et a “resourcelocation”

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

                                            MINECRAFT FORGE FRANCE © 2018

                                            Powered by NodeBB