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

    Modifier le menu principal

    Tutoriels des membres
    15
    56
    14372
    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.
    • SCAREX
      SCAREX dernière édition par robin4002

      Ce tutoriel est également disponible en vidéo.

      Sommaire

      • Introduction
      • Pré-requis
      • Code
        • ClientProxy
      • Résultat
      • En vidéo
      • Crédits

      Introduction

      Vous voulez modifier le menu principal de Minecraft et vous n’arrivez pas à le faire correctement ? Voici un tutoriel qui vous montrera comment le faire proprement.

      Pré-requis

      • Créer la base de votre mod
      • Utiliser les événements

      Code

      ClientProxy :

      package fr.scarex.tutorialmod.client;
      
      import java.awt.Desktop;
      import java.net.URI;
      
      import net.minecraft.client.gui.GuiButton;
      import net.minecraft.client.gui.GuiMainMenu;
      import net.minecraft.client.gui.GuiOptions;
      import net.minecraft.client.gui.GuiScreenResourcePacks;
      import net.minecraftforge.client.event.GuiOpenEvent;
      import net.minecraftforge.client.event.GuiScreenEvent.ActionPerformedEvent;
      import net.minecraftforge.client.event.GuiScreenEvent.InitGuiEvent;
      import net.minecraftforge.common.MinecraftForge;
      import cpw.mods.fml.common.ObfuscationReflectionHelper;
      import cpw.mods.fml.common.eventhandler.SubscribeEvent;
      import fr.scarex.tutorialmod.CommonProxy;
      import fr.scarex.tutorialmod.TutorialMod;
      
      /**
          * @author SCAREX
          * 
          */
      public class ClientProxy extends CommonProxy
      {
          public ClientProxy() {
              // registering the PROXY to use events from MinecraftForge
              MinecraftForge.EVENT_BUS.register(this);
          }
      
          /**
              * 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(InitGuiEvent.Post event) {
              if (event.gui instanceof GuiMainMenu) { // On regarde si le gui est bien le menu principal
                  for (Object b : event.buttonList) { // On parcourt la liste des boutons
                      if (((GuiButton) b).id == 14) { // Si c'est le bouton "Minecraft Realms" (qui a l'ID 14)
                          ((GuiButton) b).visible = false; // On ne l'affiche plus
                      }
                  }
                  int i = event.gui.height / 4 + 48; // On définit une variable pour simplifier le code (elle est utilisée par Minecraft)
                  event.buttonList.add(new GuiButton(30, event.gui.width / 2 - 100, i + 24 * 2, 100, 20, "Teamspeak") { // On crée un bouton avec l'ID 30 de 100 de large et 20 de large appelé "Teamspeak"
                      @Override
                      public void mouseReleased(int x, int y) { // Lorsque l'on clique
                          if (Desktop.isDesktopSupported()) { // Si on peut utiliser des URIs
                              try {
                                  Desktop.getDesktop().browse(new URI("ts3server://ts.minecraftforgefrance.fr?port=9987")); // On essaye de lancer TeamSpeak
                              } catch (Exception e) {
                                  TutorialMod.LOGGER.warn("Douldn't open teamspeak", e);
                              }
                          }
                      }
                  });
      
                  ObfuscationReflectionHelper.setPrivateValue(GuiMainMenu.class, (GuiMainMenu) event.gui, "Bienvenue dans ce tutoriel", "splashText", "field_73975_c"); // On modifie le SplashText
              }
          }
      
          /**
              * This event is called when an action is performed 
      
              * This method avoid opening the resource packs GUI
              */
          @SubscribeEvent
          public void onActionPerformed(ActionPerformedEvent.Pre event) {
              if (event.gui instanceof GuiOptions && event.button.id == 105) event.setCanceled(true); // Si l'ID est 100 (le bouton des Resource Packs), on annule
          }
      
          /**
              * This event is called when a GUI is opened 
      
              * This method avoid opening the resource packs GUI
              */
          @SubscribeEvent
          public void onGuiOpen(GuiOpenEvent event) {
              if (event.gui instanceof GuiScreenResourcePacks) event.setCanceled(true); // Même chose, si on essaye d'ouvrir les Resource Packs, on annule
          }
      }
      

      Si vous toutes ces fonctionnalités ne suffisent pas, vous pouvez rediriger vers un autre GUI en utilisant le GuiOpenEvent et changer la variable event.gui en lui associant un GUI comme ceci :

      @SubscribeEvent
          public void onGuiOpen(GuiOpenEvent event) {
              if (event.gui instanceof LeGuiVoulut) event.gui = new VotreGui();
          }
      

      NOTE : j’ai enlevé des boutons de Minecraft et bloqué certaines fonctionnalités, il est déconseillé de faire çà pour votre mod, je l’ai fait uniquement pour vous montrer comment faire.

      ATTENTION : il ne faut pas oublier de rajouter “field_73975_c” dans la liste de reflection (se reporter au code modifié) pour faire fonctionner le mod dans un environnement obfusqué (une fois le mod exporté)

      Résultat

      Liste des commits GitHub :
      Commit initial
      Correction d’un bug lors de l’exportation du mod
      Les commits sur github montrent clairement où ont été placés les fichiers, ainsi que ce qui a été ajouté et retiré dans le fichier.

      En vidéo

      https://www.youtube.com/watch?v=hv0HJDuzu9k

      Crédits

      Rédaction :

      • SCAREX

      Correction :


      Ce tutoriel de SCAREX publié sur Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International

      retourSommaire des tutoriels

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

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

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

        http://minecraftforgefrance.fr/showthread.php?tid=2369

        "If you have a comprehensive explanation for everything then it decreases uncertainty and anxiety and reduces your cognitive load. And if you can use that simplifying algorithm to put yourself on the side of moral virtue then you’re constantly a good person with a minimum of effort."
        ― Jordan B. Peterson

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

          J’avais déjà lancé l’upload avant que le post sorte, je vais relancer un montage avec l’intro.

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

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

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

            Je propose juste d’aussi l’upload sur la chaîne du site, a toi de voir 😛
            Et pas grave pour l’intro 😉

            "If you have a comprehensive explanation for everything then it decreases uncertainty and anxiety and reduces your cognitive load. And if you can use that simplifying algorithm to put yourself on the side of moral virtue then you’re constantly a good person with a minimum of effort."
            ― Jordan B. Peterson

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

              Le set private value sur le spash texte ne va pas fonctionner correctement.

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

                Car le nom obfusqué ne sera pas correct à l’exportation ?

                EDIT : je test

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

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

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

                  Oui.

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

                    Effectivement, j’avais pensé à çà sauf que je ne connais pas de moyen d’avoir le nom obfusqué de la variable.

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

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

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

                      Suite à la requête de SCAREX, la vidéo du topic a été modifié pour ajouter la version qui a été publié sur la chaîne Minecraft Forge France.

                      Mon site | GitHub

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

                        Il faut chercher dans les mappings. Les fichiers se trouve dans C:\Users\Robin.gradle\caches\minecraft\de\oceanlabs\mcp\mcp_snapshot\

                        1 réponse Dernière réponse Répondre Citer 0
                        • jglrxavpok
                          jglrxavpok Modérateurs dernière édition par

                          Ou alors tu peux aussi utiliser l’index du field dans la classe 😉

                          Sent from my GT-I9000 using Tapatalk 2

                          Modérateur sur MFF. 
                          Mon Github: http://github.com/jglrxavpok
                          Mon compte Steam si vous voulez jouer à CS:GO ou TF2 avec moi: https://steamcommunity.com/id/jglrxavpok/

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

                            J’aime pas utiliser les index car ils changent en fonction de la classe mère. Je corrigerais le tuto une fois chez moi (d’ici 3 jours).

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

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

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

                              J’ai fixé le problème d’obfuscation, le tutoriel est valide.

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

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

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

                                c’est quoi la ligne de code pour pouvoir directement rejoindre un serveur?

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

                                  Je crois que c’est FMLCommonHandler. connectToServerAtStartup

                                  Envoyé de mon SM-G920F en utilisant Tapatalk

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

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

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

                                    @‘SCAREX’:

                                    Je crois que c’est FMLCommonHandler. connectToServerAtStartup

                                    Envoyé de mon SM-G920F en utilisant Tapat

                                    Tu pourrais appronfondire car cela nous aide pas a créé un bouton qui nous connecte a notre serveur ( Avec une IP )
                                    Merci d’avance j’en ai grandement besoin

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

                                      package fr.scarex.tutorialmod.client;
                                      
                                      /* Ici vont les imports
                                      
                                      /**
                                      * @author SCAREX
                                      *
                                      */
                                      public class ClientProxy extends CommonProxy
                                      {
                                      public ClientProxy() {
                                      // registering the PROXY to use events from MinecraftForge
                                      MinecraftForge.EVENT_BUS.register(this);
                                      }
                                      
                                      /**
                                      * 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(InitGuiEvent.Post event) {
                                      if (event.gui instanceof GuiMainMenu) { // On regarde si le gui est bien le menu principal
                                      int i = event.gui.height / 4 + 48; // On définit une variable pour simplifier le code (elle est utilisée par Minecraft)
                                      event.buttonList.add(new GuiButton(30, event.gui.width / 2 - 100, i + 24 * 2, 100, 20, "Bouton de connexion") { // On crée un bouton avec l'ID 30 de 100 de large et 20 de large
                                      @Override
                                      public void mouseReleased(int x, int y) { // Lorsque l'on clique
                                      FMLClientHandler.connectToServerAtStartup("tonAdresse", lePort); // On lance la connection au serveur
                                      }
                                      });
                                      }
                                      }
                                      }
                                      

                                      Voilà le code qu’il faut, si tu as besoin de plus de détails, n’hésite pas.

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

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

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

                                        Merci beaucoup je vais voir si tu m’as avancé dans mon projet  😉

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

                                          [font=monospaceFMLClientHandler][font=monospace.][font=monospaceconnectToServerAtStartup][font=monospace(][font=monospace“tonAdresse”][font=monospace,] lePort[font=monospace);] [font=monospace// On lance la connection au serveur]
                                          Je vois pas ce que tu veut dire pas lePort :/

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

                                            25565 le port par défaut d’un serveur genre adresse_ip : port

                                            Si je t'ai filé un coup de main n'oublie pas le + / -
                                            Par contre évite les demandes d'aides en MP, tu sera sympa'

                                            La JavaDoc c'est comme le PQ, ça sert à ce démerder tous seul. -Victor Hugo- 2017

                                            Une superbe API pour animer vos super modèles CraftStudio dans Minecraft !

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

                                            MINECRAFT FORGE FRANCE © 2018

                                            Powered by NodeBB