MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Bloquer l'affichage du Gui des coffres

    Planifier Épinglé Verrouillé Déplacé Résolu 1.12.x
    1.12.x
    16 Messages 5 Publieurs 1.8k Vues 1 Watching
    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.
    • M Hors-ligne
      ManaToa
      dernière édition par

      Bonjour/Bonsoir,

      Je poste ici car j’ai une question concernant la modification du code source de Minecraft.
      J’aimerais faire un petit mod vraiment tout simple, qui n’ajoute rien, mais modifie une fonction de base de Minecraft.

      Je m’explique:

      Dans le cadre d’un court-métrage en solo et à la première personne, j’aimerais pouvoir ouvrir un coffre sans vraiment l’ouvrir. C’est à dire que pour une immersion maximale, je souhaite supprimer un maximum de GUIs pour ne pas “gâcher” le court-métrage. 
      En ce qui concerne cette discussion, c’est uniquement au niveau des coffres que j’ai besoin d’aide. Ce que je voudrais c’est que lorsque j’effectue un clique droit sur un coffre, l’animation du coffre qui s’ouvre se lance, mais le GUI de celui-ci ne s’affiche pas.

      J’ai forge 1.12, et j’ai décompilé minecraft dans Eclipse. Il me semble que j’ai localisé la classe qui affiche (construit) le GUI des coffres, il s’agit de la classe GuiChest.class.

      Ma question est donc la suivante: Est-il possible, par une manière ou une autre de cancel l’affichage du GUI des coffres, soit en modifiant le code source directement (ce que je n’arrive pas à faire) soit en créant une fonction qui l’annule ?

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

        Salut,
        Ça devrait être possible avec l’event OpenGuiEvent, il suffit de le cancel si le gui ouvert est celui du coffre.
        Sinon une autre possibilité, avec l’event de rendu du gui, le cancel pour que le gui ne s’affiche plus (il sera alors toujours considéré comme ouvert).

        1 réponse Dernière réponse Répondre Citer 0
        • M Hors-ligne
          ManaToa
          dernière édition par

          Ah, enfin une solution qui se profile à l’horizon ! Merci !

          Alors je vais être honnête avec toi, je n’ai jamais moddé minecraft auparavant, donc je ne sais pas trop comment m’y prendre. J’ai des connaissances de bases en java, mais encore, pas sûr que ça suffise.
          Déjà entre les deux solutions que tu me proposes, je ne sais pas laquelle choisir. Est-ce que c’est trop demander que tu m’aides à mettre en place la solution ?  🙂
          je ne veux pas te déranger, mais j’avoue que je ne sais pas trop par où commencer.

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

            Commences par faire la base de ton mod : https://www.minecraftforgefrance.fr/showthread.php?tid=3134
            ensuite il y a un tutoriel détaillé sur les événements ici : https://www.minecraftforgefrance.fr/showthread.php?tid=4207

            1 réponse Dernière réponse Répondre Citer 0
            • M Hors-ligne
              ManaToa
              dernière édition par

              Je te remercie, je vais m’y atteler dès que possible.

              1 réponse Dernière réponse Répondre Citer 0
              • M Hors-ligne
                ManaToa
                dernière édition par

                Me revoilà !

                Alors j’ai regardé les articles que tu m’as indiqué. D’ailleurs celui que tu as fait est très clair bravo. 🙂

                J’avais déjà dé-compilé Minecraft dans Eclipse alors il ne me restait qu’à faire le mod, et c’est chose faite.
                Je voulais juste te demander ton avis sur ce que j’ai fait pour voir si tout est en ordre.

                Voici ma classe qui cancel l’ouverture du GUI d’un coffre:

                
                package fr.manatoa.cinematique;
                
                import net.minecraft.client.gui.inventory.GuiChest;
                import net.minecraftforge.client.event.GuiOpenEvent;
                import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
                import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
                import net.minecraftforge.fml.relauncher.Side;
                
                @EventBusSubscriber(value = Side.CLIENT, modid = Cinematiques.MODID)
                
                public class EventHandlerClient {
                
                @SubscribeEvent
                
                public static void onGuiOpen(GuiOpenEvent event)
                {
                if(event.getGui() instanceof GuiChest)
                {
                event.setCanceled(true);
                }
                }
                }
                
                

                C’était pas compliqué à faire étant donné que c’était quasiment l’exemple montré dans l’article.

                Alors je l’ai testé et ça marche ! le coffre s’ouvre bien et le GUI n’apparaît pas.

                Le seul hic c’est que le coffre reste ouvert, il ne se ferme que si je ferme un autre GUI comme l’inventaire.
                Une solution ? Est-ce que je peux forcer le coffre à se fermer ?

                1 réponse Dernière réponse Répondre Citer 0
                • SpyManS Hors-ligne
                  SpyMan
                  dernière édition par

                  en gros comme ya pas de gui bah ya pas la fonction qui gere ca
                  faut creer un gui vide qui afficher rien
                  c’est le plus simple je pense

                  1- Creer un class extends GuiContainer implements YesNoCallBack
                  2- dans ton event au lieu de mettre setCanceled ta un trus du genre setGui et tu met ton gui

                  1 réponse Dernière réponse Répondre Citer 0
                  • M Hors-ligne
                    ManaToa
                    dernière édition par


                    @‘SpyMan’:

                    en gros comme ya pas de gui bah ya pas la fonction qui gere ca
                    faut creer un gui vide qui afficher rien
                    c’est le plus simple je pense

                    1- Creer un class extends GuiContainer implements YesNoCallBack
                    2- dans ton event au lieu de mettre setCanceled ta un trus du genre setGui et tu met ton gui

                    Bon j’essaie de cette manière mais en vain, j’arrive pas à créer le Gui, il me demande quelque chose en plus de ce que tu m’as dit. J’ai essayé avec des tutos mais j’y arrive pas trop.
                    Et il ne reconnaît pas le “YesNoCallBack”

                    Comment je crée un Gui vide ?


                    Et sinon je peux pas appeler la fonction qui ferme le coffre ? (bon faut la trouver)

                    1 réponse Dernière réponse Répondre Citer 0
                    • M Hors-ligne
                      ManaToa
                      dernière édition par

                      @‘SpyMan’:

                      en gros comme ya pas de gui bah ya pas la fonction qui gere ca
                      faut creer un gui vide qui afficher rien
                      c’est le plus simple je pense

                      1- Creer un class extends GuiContainer implements YesNoCallBack
                      2- dans ton event au lieu de mettre setCanceled ta un trus du genre setGui et tu met ton gui

                      Alors je viens d’essayer ta solution, et ça marche pas (dommage).

                      Lorsque je clique sur le coffre, le gui (vide) apparaît, mais l’animation d’ouverture du coffre ne se fait pas. En fait elle se fait quand je quitte le gui vide. Donc le problème n’est pas résolu car le coffre reste à nouveau ouvert. De plus, je ne peux pas quitter ce gui vide avec “E” comme les autre, mais seulement avec “Escape”.

                      je n’ais pas pu mettre le “YesNoCallBack” car il il n’est pas reconnu. Voici la classe de mon gui, faut-il rajouter quelque chose ?

                      package fr.manatoa.cinematique;
                      
                      import net.minecraft.client.gui.GuiScreen;
                      
                      public class GuiVide extends GuiScreen {
                      }
                      

                      Sinon, est-il possible d’appeler la fonction qui ferme le coffre ?

                      EDIT:

                      Autant pour moi, j’ai mal lu. Ce n’est pas un GuiScreen mais GuiContainer que tu as proposé.

                      1 réponse Dernière réponse Répondre Citer 0
                      • SpyManS Hors-ligne
                        SpyMan
                        dernière édition par

                        GuiContainer et pas GuiScreen le extends

                        1 réponse Dernière réponse Répondre Citer 0
                        • M Hors-ligne
                          ManaToa
                          dernière édition par

                          @‘SpyMan’:

                          GuiContainer et pas GuiScreen le extends

                          Oui justement, mais quand je met un GuiContainer, il faut construire le Gui, et j’y arrive pas


                          Edit : Alors, j’ai déjà trouvé que c’était “implements GuiYesNoCallback” qu’il fallait mettre, un bon point 🙂
                          Mais maintenant que j’ai mis GuiContainer, je dois définir un constructeur.
                          J’ai besoin d’aide !  😛

                          Donc voici le code actuel :

                          package fr.manatoa.cinematique;
                          
                          import net.minecraft.client.gui.GuiYesNoCallback;
                          import net.minecraft.client.gui.inventory.GuiContainer;
                          
                           public class GuiVide extends GuiContainer implements GuiYesNoCallback {
                           }
                          

                          Et j’ai ce message d’erreur:

                          Est-ce que pour creer mon GuiContainer je dois obligatoirement avoir un TileEntity ? C’est cette étape qui me bloc sur les tutos que j’ai vu jusqu’à présent.

                          1 réponse Dernière réponse Répondre Citer 0
                          • BrokenSwingB Hors-ligne
                            BrokenSwing Moddeurs confirmés Rédacteurs
                            dernière édition par

                            Bonjour,
                            Tente de souscrire à l’event GuiScreenEvent.DrawScreenEvent.Pre et de l’annuler

                            1 réponse Dernière réponse Répondre Citer 0
                            • M Hors-ligne
                              ManaToa
                              dernière édition par

                              @‘BrokenSwing’:

                              Bonjour,
                              Tente de souscrire à l’event GuiScreenEvent.DrawScreenEvent.Pre et de l’annuler

                              Salut,

                              Tu me conseils d’annuler cet événement à la place du GuiOpenEvent ou en plus ? (Je vais essayer les deux :))


                              @‘BrokenSwing’:

                              Bonjour,
                              Tente de souscrire à l’event GuiScreenEvent.DrawScreenEvent.Pre et de l’annuler

                              Salut,

                              Tu me conseils d’annuler cet événement à la place du GuiOpenEvent ou en plus ? (Je vais essayer les deux :))

                              1 réponse Dernière réponse Répondre Citer 0
                              • M Hors-ligne
                                ManaToa
                                dernière édition par

                                @‘BrokenSwing’:

                                Bonjour,
                                Tente de souscrire à l’event GuiScreenEvent.DrawScreenEvent.Pre et de l’annuler

                                Salut, je viens d’essayer ce que tu m’as proposé, et ça marche parfaitement !
                                Quand je clique sur le coffre, il s’ouvre (animation) mais le Gui n’apparaît pas et quand je clique sur “E” (comme pour fermer n’importe quel inventaire) le coffre se ferme (animation à nouveau).
                                Merci beaucoup, c’est justement ce que j’avais besoin ! J’avais même pas remarqué cet événement en épluchant la liste.

                                Je récapitule si certains sont intéressés, il suffit de créer cette classe pour réaliser ce j’ai dis juste avant avec le coffre:

                                package fr.manatoa.cinematique;
                                
                                import net.minecraft.client.gui.GuiYesNoCallback;
                                import net.minecraft.client.gui.inventory.GuiChest;
                                import net.minecraftforge.client.event.GuiOpenEvent;
                                import net.minecraftforge.client.event.GuiScreenEvent;
                                import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
                                import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
                                import net.minecraftforge.fml.relauncher.Side;
                                
                                @EventBusSubscriber(value = Side.CLIENT, modid = Cinematiques.MODID)
                                
                                public class EventHandlerClient {
                                
                                @SubscribeEvent
                                
                                public static void onGuiDraw(GuiScreenEvent.DrawScreenEvent.Pre event)
                                {
                                if(event.getGui() instanceof GuiChest)
                                {
                                event.setCanceled(true);
                                }
                                }
                                }
                                

                                Merci encore ! J’ai ma solution, je passe le sujet en résolu.

                                Bonne continuation à vous tous.

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

                                  C’était la deuxième solution que j’avais proposé à l’origine :
                                  @‘robin4002’:

                                  Salut,
                                  Ça devrait être possible avec l’event OpenGuiEvent, il suffit de le cancel si le gui ouvert est celui du coffre.
                                  Sinon une autre possibilité, avec l’event de rendu du gui, le cancel pour que le gui ne s’affiche plus (il sera alors toujours considéré comme ouvert).

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • LeBossMax2L Hors-ligne
                                    LeBossMax2
                                    dernière édition par

                                    Je vais proposer une autre solution, si tu veux pouvoir te déplacer une fois que tu as ouvert le coffre, tu peux utiliser l’event PlayerInteractionEvent.RightClickBlock et le cancel si il s’agit d’un coffre ensuite tu get la tileentity du cadre et tu modifie la variable numPlayerUsing (tu met à 0 si elle est à un, et tu met à 1 si elle est à 0) comme ça, il n’y aura que l’animation et le Gui ne s’ouvre pas.

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

                                    MINECRAFT FORGE FRANCE © 2024

                                    Powered by NodeBB