• 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

Modifier le menu principal

Tutoriels des membres
15
56
14.3k
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 29 nov. 2021, 02:06 18 juil. 2015, 14:35

    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 18 juil. 2015, 16:59

      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 18 juil. 2015, 17:01

        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 18 juil. 2015, 17:12

          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 18 juil. 2015, 21:50

            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 18 juil. 2015, 21:53

              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 18 juil. 2015, 21:57

                Oui.

                1 réponse Dernière réponse Répondre Citer 0
                • SCAREX
                  SCAREX dernière édition par 18 juil. 2015, 22:14

                  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 19 juil. 2015, 15:26

                    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 19 juil. 2015, 20:03

                      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 19 juil. 2015, 22:02

                        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 24 juil. 2015, 14:26

                          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 26 juil. 2015, 18:42

                            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
                            • environ 5 mois
                            • Gabs
                              Gabs dernière édition par 26 déc. 2015, 17:44

                              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 26 déc. 2015, 17:51

                                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
                                • environ 3 mois
                                • M
                                  MelShaDoW dernière édition par 5 avr. 2016, 16:37

                                  @‘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 5 avr. 2016, 16:44

                                    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 5 avr. 2016, 16:51

                                      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 5 avr. 2016, 17:02

                                        [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 5 avr. 2016, 17:05

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

                                          MINECRAFT FORGE FRANCE © 2018

                                          Powered by NodeBB