• Récent
  • Mots-clés
  • Populaire
  • Utilisateurs
  • Groupes
  • S'inscrire
  • Se connecter
  • 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
12.8k
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 10 août 2019, 12:11 18 août 2013, 17:37

    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 18 août 2013, 19:31

      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 18 août 2013, 22:45

        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 18 août 2013, 23:19

          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 19 août 2013, 09:56

            @‘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 19 août 2013, 11:26

              @‘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 19 août 2013, 11:41

                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 19 août 2013, 11:44

                  @‘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 19 août 2013, 11:47

                    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 19 août 2013, 11:48

                      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 19 août 2013, 11:50

                        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 20 août 2013, 10:31

                          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 20 août 2013, 12:42

                            @‘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 20 août 2013, 12:45

                              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 20 août 2013, 12:47

                                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 20 août 2013, 12:49

                                  @‘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 20 août 2013, 13:03

                                    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
                                    • topic:timeago_later,environ un mois
                                    • pulgan
                                      pulgan dernière édition par 22 sept. 2013, 20:58

                                      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 10 août 2019, 12:12 22 sept. 2013, 21:06

                                        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 23 sept. 2013, 18:24

                                          @‘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
                                          7 sur 35
                                          • Premier message
                                            7/35
                                            Dernier message
                                          Design by Woryk
                                          Contact / Mentions Légales

                                          MINECRAFT FORGE FRANCE © 2018

                                          Powered by NodeBB