• Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Solved Image fixe menu minecraft

    1.8.x
    1.8
    3
    18
    3202
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      Sebenf0rce last edited by

      Bonjour,

      J’ai déjà posté cette demande il y a un moment pour la 1.7.10 ici :http://www.minecraftforgefrance.fr/showthread.php?tid=1311
      J’ai suivi le tuto de Scarex pour la 1.8 mais est-il possible d’appliquer la solution proposé dans l’ancien post à la méthode du tutoriel ?

      Merci d’avance.

      1 Reply Last reply Reply Quote 0
      • robin4002
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

        Salut,
        C’est possible via GuiScreenEvent.DrawScreenEvent.Pre. Il faut cancel l’event puis utiliser le code que j’ai donner pour draw à nouveau.
        Cependant tu vas perdre le rendu des boutons, donc il faut les get via reflexion pour les rendre à nouveau :

                   List buttonList = ObfuscationReflectionHelper.getPrivateValue(GuiScreen.class, event.gui, "buttonList", "field_146292_n");
                   for(k = 0; k < buttonList.size(); ++k)
                   {
                       ((GuiButton)buttonList.get(k)).drawButton(Minecraft.getMinecraft(), event.mouseX, event.mouseY);
                   }
        
                   List labelList = ObfuscationReflectionHelper.getPrivateValue(GuiScreen.class, event.gui, "labelList", "field_146293_o");
                   for(k = 0; k < labelList.size(); ++k)
                   {
                       ((GuiLabel)labelList.get(k)).drawLabel(Minecraft.getMinecraft(), event.mouseX, event.mouseY);
                   }
        
        1 Reply Last reply Reply Quote 0
        • S
          Sebenf0rce last edited by

          @‘robin4002’:

          Salut,
          C’est possible via GuiScreenEvent.DrawScreenEvent.Pre. Il faut cancel l’event puis utiliser le code que j’ai donner pour draw à nouveau.
          Cependant tu vas perdre le rendu des boutons, donc il faut les get via reflexion pour les rendre à nouveau :

                     List buttonList = ObfuscationReflectionHelper.getPrivateValue(GuiScreen.class, event.gui, "buttonList", "field_146292_n");
                     for(k = 0; k < buttonList.size(); ++k)
                     {
                         ((GuiButton)buttonList.get(k)).drawButton(Minecraft.getMinecraft(), event.mouseX, event.mouseY);
                     }
          
                     List labelList = ObfuscationReflectionHelper.getPrivateValue(GuiScreen.class, event.gui, "labelList", "field_146293_o");
                     for(k = 0; k < labelList.size(); ++k)
                     {
                         ((GuiLabel)labelList.get(k)).drawLabel(Minecraft.getMinecraft(), event.mouseX, event.mouseY);
                     }
          

          Est ce que c’est bien comme ça que je dois cancel l’event :

          public void cancelBg(GuiScreenEvent.DrawScreenEvent.Pre event) {
          event.setCanceled(true);
          }
          

          Pour le code du background je l’ai modifié un peu pour qu’il fonctionne avec l’event mais j’ai quelques erreurs que je n’arrive pas à résoudre.
          Voici le code :

          GL11.glViewport(0, 0, 256, 256);
                 event.gui.getTextureManager().bindTexture(backGround); 
                 GL11.glDisable(GL11.GL_TEXTURE_2D);
                 GL11.glEnable(GL11.GL_TEXTURE_2D);
                 GL11.glViewport(0, 0, event.gui.width, event.gui.height);
                 Tessellator tessellator = Tessellator.instance;
                 tessellator.startDrawingQuads();
                 GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
                 GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
                 tessellator.setColorRGBA_F(1.0F, 1.0F, 1.0F, 1.0F);
                 int k = event.gui.width;
                 int l = event.gui.height;
                 tessellator.addVertexWithUV(0, 0, this.zLevel, 0, 0);
                 tessellator.addVertexWithUV(0, l, this.zLevel, 0, 1);
                 tessellator.addVertexWithUV(k, l, this.zLevel, 1, 1);
                 tessellator.addVertexWithUV(k, 0, this.zLevel, 1, 0);
                 tessellator.draw();
          

          La méthode getTextureManager a t’elle changé ?
          Pour le tessellator j’ai des erreurs un peu partout nottamment à sa déclaration : “The field Tessellator.instance is not visible”

          1 Reply Last reply Reply Quote 0
          • robin4002
            robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

            event.gui.getTextureManager().bindTexture(backGround);
            ->
            Minecraft.getMinecraft().getTextureManager().bindTexture(backGround);

            Pour le Tessellator, en 1.8 c’est WorldRenderer.

            1 Reply Last reply Reply Quote 0
            • S
              Sebenf0rce last edited by

              @‘robin4002’:

              event.gui.getTextureManager().bindTexture(backGround);
              ->
              Minecraft.getMinecraft().getTextureManager().bindTexture(backGround);

              Pour le Tessellator, en 1.8 c’est WorldRenderer.

              Du coup j’ai remplacé par : WorldRenderer worldRenderer = new WorldRenderer( valeur A mettre);
              A quoi correspond la valeur en paramètre ?

              Sinon la méthode draw n’existe plus, j’ai donc cherché un méthode correspondante et je suis tombé sur ça : startDrawingQuads
              Est ce que c’est bien ce que je cherche ?

              1 Reply Last reply Reply Quote 0
              • robin4002
                robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                Il faut faire comme ça :

                Tessellator tessellator = Tessellator.getInstance();
                WorldRenderer worldrenderer = tessellator.getWorldRenderer();
                worldrenderer.startDrawingQuads();
                worldrenderer.addVertexWithUV(0, 0, event.gui.zLevel, 0, 0);
                worldrenderer.addVertexWithUV(0, l, event.gui.zLevel, 0, 1);
                worldrenderer.addVertexWithUV(k, l, event.gui.zLevel, 1, 1);
                worldrenderer.addVertexWithUV(k, 0, event.gui.zLevel, 1, 0);
                tessellator.draw();
                
                1 Reply Last reply Reply Quote 0
                • S
                  Sebenf0rce last edited by

                  @‘robin4002’:

                  Il faut faire comme ça :

                  Tessellator tessellator = Tessellator.getInstance();
                  WorldRenderer worldrenderer = tessellator.getWorldRenderer();
                  worldrenderer.startDrawingQuads();
                  worldrenderer.addVertexWithUV(0, 0, event.gui.zLevel, 0, 0);
                  worldrenderer.addVertexWithUV(0, l, event.gui.zLevel, 0, 1);
                  worldrenderer.addVertexWithUV(k, l, event.gui.zLevel, 1, 1);
                  worldrenderer.addVertexWithUV(k, 0, event.gui.zLevel, 1, 0);
                  tessellator.draw();
                  

                  Ah d’accord autant pour moi.
                  Dernière petite chose event.gui.zLevel n’est pas reconnu. Dois-je  créer la variable moi même et l’appelé directement ?

                  1 Reply Last reply Reply Quote 0
                  • robin4002
                    robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                    Remplaces par 0 ou 1 sinon.

                    1 Reply Last reply Reply Quote 0
                    • S
                      Sebenf0rce last edited by

                      @‘robin4002’:

                      Remplaces par 0 ou 1 sinon.

                      Ok donc je viens de tester et malheuresement le background de base est toujours présent, ou ai-je pu me tromper ?

                      Voici mon code :

                      public class ClientProxy extends CommonProxy
                      {
                      
                      private final ResourceLocation backGround = new ResourceLocation("menu", "textures/gui/menu.png");
                      
                      public ClientProxy() {
                      // registering the PROXY to use events from MinecraftForge
                      MinecraftForge.EVENT_BUS.register(this);
                      }
                      
                      /**
                      * Suppression du background
                      * @param event
                      */
                      public void cancelBg(GuiScreenEvent.DrawScreenEvent.Pre event) {
                      event.setCanceled(true);
                      }
                      /**
                      * This function is called when the init method of a GuiScreen is called and
                      * modify the current buttons and the splash text
                      */
                      
                      @SubscribeEvent
                      public void onInitGuiEvent(final InitGuiEvent.Post event) {
                      
                      if (event.gui instanceof GuiMainMenu) { // On regarde si le gui est bien le menu principal
                      
                      GL11.glViewport(0, 0, 256, 256);
                      Minecraft.getMinecraft().getTextureManager().bindTexture(backGround); 
                             GL11.glDisable(GL11.GL_TEXTURE_2D);
                             GL11.glEnable(GL11.GL_TEXTURE_2D);
                             GL11.glViewport(0, 0, event.gui.width, event.gui.height);
                             Tessellator tessellator = Tessellator.getInstance();
                             WorldRenderer worldrenderer = tessellator.getWorldRenderer();
                             worldrenderer.startDrawingQuads();
                             GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
                             GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
                      
                             int k = event.gui.width;
                             int l = event.gui.height;
                             worldrenderer.addVertexWithUV(0, 0, 1, 0, 0);
                             worldrenderer.addVertexWithUV(0, l, 1, 0, 1);
                             worldrenderer.addVertexWithUV(k, l, 1, 1, 1);
                             worldrenderer.addVertexWithUV(k, 0, 1, 1, 0);
                             tessellator.draw();
                      
                      1 Reply Last reply Reply Quote 0
                      • Superloup10
                        Superloup10 Modérateurs last edited by

                        La méthode cancelBg n’est pas reconnu en tant qu’event, car il manque l’annotation @SubscribeEvent

                        Si vous souhaitez me faire un don, il vous suffit de cliquer sur le bouton situé en dessous.

                        Je suis un membre apprécié et joueur, j'ai déjà obtenu 17 points de réputation.

                        1 Reply Last reply Reply Quote 0
                        • robin4002
                          robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                          De plus le rendu doit aussi être fait dans l’event GuiScreenEvent.DrawScreenEvent.Pre.

                          @SubscribeEvent
                          public void cancelBg(GuiScreenEvent.DrawScreenEvent.Pre event)
                          {
                          if (event.gui instanceof GuiMainMenu)
                          {
                          event.setCanceled(true);
                          GL11.glViewport(0, 0, 256, 256);
                          Minecraft.getMinecraft().getTextureManager().bindTexture(backGround);
                          GL11.glDisable(GL11.GL_TEXTURE_2D);
                          GL11.glEnable(GL11.GL_TEXTURE_2D);
                          GL11.glViewport(0, 0, event.gui.width, event.gui.height);
                          Tessellator tessellator = Tessellator.getInstance();
                          WorldRenderer worldrenderer = tessellator.getWorldRenderer();
                          worldrenderer.startDrawingQuads();
                          GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
                          GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
                          
                          int k = event.gui.width;
                          int l = event.gui.height;
                          worldrenderer.addVertexWithUV(0, 0, 1, 0, 0);
                          worldrenderer.addVertexWithUV(0, l, 1, 0, 1);
                          worldrenderer.addVertexWithUV(k, l, 1, 1, 1);
                          worldrenderer.addVertexWithUV(k, 0, 1, 1, 0);
                          tessellator.draw();
                          
                          List buttonList = ObfuscationReflectionHelper.getPrivateValue(GuiScreen.class, event.gui, "buttonList", "field_146292_n");
                          for(k = 0; k < buttonList.size(); ++k)
                          {
                          ((GuiButton)buttonList.get(k)).drawButton(Minecraft.getMinecraft(), event.mouseX, event.mouseY);
                          }
                          
                          List labelList = ObfuscationReflectionHelper.getPrivateValue(GuiScreen.class, event.gui, "labelList", "field_146293_o");
                          for(k = 0; k < labelList.size(); ++k)
                          {
                          ((GuiLabel)labelList.get(k)).drawLabel(Minecraft.getMinecraft(), event.mouseX, event.mouseY);
                          }
                          }
                          }
                          
                          1 Reply Last reply Reply Quote 0
                          • S
                            Sebenf0rce last edited by

                            J’ai modifié tout ça, le background est désormais bien cancel par contre j’ai un petit problème au niveau du rendu de mon background.

                            Voici l’affichage obtenu (le background est affiché en tout petit en bas à gauche de l’interface) :

                            1 Reply Last reply Reply Quote 0
                            • robin4002
                              robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                              Je pense qu’il y a un problème avec la texture ou le code de rendu.

                              1 Reply Last reply Reply Quote 0
                              • S
                                Sebenf0rce last edited by

                                @‘robin4002’:

                                Je pense qu’il y a un problème avec la texture ou le code de rendu.

                                La texture est bonne je l’ai utilisé dans mon menu en 1.7. Ce que je ne comprends pas c’est que le code aussi, la seule chose changé est l’ajout du WorldRenderer.
                                J’ai essayé de testé différente valeurs à la place du zLevel mais ça ne semble avoir aucun effet sur le rendu.

                                1 Reply Last reply Reply Quote 0
                                • robin4002
                                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                                  Essaies de retirer les lignes suivantes :
                                        GL11.glViewport(0, 0, 256, 256);
                                        GL11.glDisable(GL11.GL_TEXTURE_2D);
                                        GL11.glEnable(GL11.GL_TEXTURE_2D);
                                        GL11.glViewport(0, 0, event.gui.width, event.gui.height);
                                        GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
                                        GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);

                                  1 Reply Last reply Reply Quote 0
                                  • S
                                    Sebenf0rce last edited by

                                    @‘robin4002’:

                                    Essaies de retirer les lignes suivantes :
                                          GL11.glViewport(0, 0, 256, 256);
                                          GL11.glDisable(GL11.GL_TEXTURE_2D);
                                          GL11.glEnable(GL11.GL_TEXTURE_2D);
                                          GL11.glViewport(0, 0, event.gui.width, event.gui.height);
                                          GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
                                          GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);

                                    En enlevant ces lignes j’obtiens un écran blanc.
                                    Cependant après quelques test j’ai remarqué que c’est cette ligne qui pose problème : GL11.glViewport(0, 0, event.gui.width, event.gui.height);
                                    En l’enlevant l’image s’affiche bien mais ne s’adapte pas à l’écran. Ce que je veux dire par là c’est que l’image est affiché avec sa dimension il y a donc des bordure noires.

                                    Pourquoi ici (0, 0, event.gui.width, event.gui.height) les coordonnées ne sont pas bien reconnu ? (quand je fais un println de la largeur et de la hauteur ça m’affiche 667 ce qui n’est pas du tout bon)

                                    1 Reply Last reply Reply Quote 0
                                    • robin4002
                                      robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                                      Le problème vient de la alors.
                                      Maintenant il faut comprendre pourquoi les valeurs ne sont pas bonne …
                                      Franchement je ne sais pas du tout d’où ça peut venir.

                                      Sinon modifies le menu par remplacement de classe (ouvrir un menu custom lorsque le menu de base est ouvert via l’event GuiOpenEvent) ça sera bien plus simple.

                                      1 Reply Last reply Reply Quote 0
                                      • S
                                        Sebenf0rce last edited by

                                        J’ai opté pour cette solution, c’est moins contraignant, merci pour ton aide 😉

                                        1 Reply Last reply Reply Quote 0
                                        • 1 / 1
                                        • First post
                                          Last post
                                        Design by Woryk
                                        Contact / Mentions Légales

                                        MINECRAFT FORGE FRANCE © 2018

                                        Powered by NodeBB