MFF

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

    Afficher Un GuiScreen A Partir D'une Commande

    Planifier Épinglé Verrouillé Déplacé Sans suite
    1.9.4
    21 Messages 5 Publieurs 5.5k 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.
    • DeletedD Hors-ligne
      Deleted
      dernière édition par

      https://www.minecraftforgefrance.fr/showthread.php?tid=4329&highlight=MrLeBest
      Plus largement: https://www.minecraftforgefrance.fr/search.php?action=results&sid=95c06960ff44317432b8db0ed1ffab50&sortby=lastpostℴ=desc

      As-tu passé du temps à lire les liens que je t’avais envoyé + haut ? Car ça ne donne pas l’impression, étant donné qu’il y avait un tuto où robin expliquait comment compléter la fonction openGui, or on voit très bien que tu n’as fait aucune modif par rapport au message précédent.

      EDIT:
      Le throws de execute est inutile. As-tu bien enregistré ta commande ? Si oui que se passe-t-il en jeu ? Dans les logs ? Pense à rajouter quelques println pour voir où s’arrête ton code.

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

        @‘Plaigon’:

        https://www.minecraftforgefrance.fr/showthread.php?tid=4329&highlight=MrLeBest
        Plus largement: https://www.minecraftforgefrance.fr/search.php?action=results&sid=95c06960ff44317432b8db0ed1ffab50&sortby=lastpostℴ=desc

        As-tu passé du temps à lire les liens que je t’avais envoyé + haut ? Car ça ne donne pas l’impression, étant donné qu’il y avait un tuto où robin expliquait comment compléter la fonction openGui, or on voit très bien que tu n’as fait aucune modif par rapport au message précédent.

        EDIT:
        Le throws de execute est inutile. As-tu bien enregistré ta commande ? Si oui que se passe-t-il en jeu ? Dans les logs ? Pense à rajouter quelques println pour voir où s’arrête ton code.

        Je te jure que si j’ai tout lue mais la je viens de retester et je n’y arrive toujours pas et je ne sais pas pourquoi  pourrais tu m’expliquer mes erreurs s’il te plait j’amerais apprendre mais pour l’instant je n’y comprends rien et cela fait de puis ce matin que j’essaye de faire un gui et j’y consacre toute ma journée !  😢

        
        public class GuiHandlerTuto implements IGuiHandler{
        
        @Override
        public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
               return null;
        }
        
        @Override
        public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
        
               return new TntGui();
        }
        
        }
        
        
        
        @Override
        public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
        EntityPlayer player= (EntityPlayer)sender;
                player.openGui(ModTutorial.instance, 0, player.worldObj, (int)player.posX, (int)player.posY, (int)player.posZ);
        
        }
        
        
        
        public class TntGui extends GuiScreen{
        public void initGui()
            {
                this.buttonList.clear();
                    this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 72, I18n.format("Dire : ``Bonjour``", new Object[0]))); // Bouton
                    this.buttonList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 96, I18n.format("Revenir en jeu", new Object[0])));    // Bouton 
            }
        
            public boolean doesGuiPauseGame()
            {
                return false;
            }
        
            protected void actionPerformed(GuiButton par1)
            {
                switch (par1.id)
                {
                    case 0:
                        this.mc.thePlayer.sendChatMessage("Bonjour je m'appel " + mc.getSession().getUsername()); //permet de dire bonjour et son pseudo dans le chat (j'ai mis ça just pour montrer)
                        this.mc.displayGuiScreen((GuiScreen) null); //retourne en jeu
                        break;
                    case 1:
                    this.mc.displayGuiScreen((GuiScreen) null); //retourne en jeu
                    break;
                }
            }
        
            public void drawScreen(int par1, int par2, float par3)
            {
            this.drawDefaultBackground(); //affiche un fond noir
                this.drawCenteredString(this.fontRendererObj, I18n.format("§cGui Tuto", new Object[0]), this.width / 2, 40, 16777215); //met le texte "Gui Tuto" au haut du gui
                super.drawScreen(par1, par2, par3);
            }
        }
        
        
        
           @EventHandler
           public void init(FMLInitializationEvent event){
           ClientCommandHandler.instance.registerCommand(new TntCommande());
               NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandlerTuto());
           proxy.init();
           }
        
        
        1 réponse Dernière réponse Répondre Citer 0
        • DeletedD Hors-ligne
          Deleted
          dernière édition par

          Renvoie ta classe principale, ton GuiHandler, ta classe Commande, et ton GUI. Et réexplique nous **précisément **ton erreur. Merci d’avance !

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

            @‘Plaigon’:

            Renvoie ta classe principale, ton GuiHandler, ta classe Commande, et ton GUI. Et réexplique nous **précisément **ton erreur. Merci d’avance !

            Je voudrais juste afficher un simple Gui mais je n’y arrive pas , pas d’erreur en console et j’ai du mal a comprendre apprêt avoir lui a plusieurs reprises tes liens ! (j’ai éditer mon message pour tes montrer les classes)

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

              Et tes classes ? Je les voudrai entièrement afin de t’être le + utile possible !
              Et que se passe-t-il à la suite de l’envoie de ta commande, elle s’exécute, puis … ? Rien du tout ensuite ? T’as essayé, comme dit précédemment, de mettre des sysout un peu partout voir s’il étaient appelés ? On n’est pas là pour te débugger entièrement la chose, je rappelle, hein ?

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

                @‘Plaigon’:

                Et tes classes ? Je les voudrai entièrement afin de t’être le + utile possible !

                
                 @Mod(modid = Reference.MOD_ID, name = Reference.MOD_NAME, version = Reference.MOD_VERSION)
                 public class ModTutorial{
                
                    @SidedProxy(clientSide = "com.floflolol.mod.proxy.ClientProxy", serverSide = "com.floflolol.mod.proxy.ServerProxy")
                    public static CommonProxy proxy;
                
                   @Instance(Reference.MOD_ID)
                   public static ModTutorial instance;
                
                   public static Logger logger;
                
                   @EventHandler
                   public void preInit(FMLPreInitializationEvent event){
                       logger = event.getModLog();
                
                       MinecraftForge.EVENT_BUS.register(new EventTnt());
                       MinecraftForge.EVENT_BUS.register(new EventGui());
                
                   }
                
                   @EventHandler
                   public void init(FMLInitializationEvent event){
                   ClientCommandHandler.instance.registerCommand(new TntCommande());
                       NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandlerTuto());
                   proxy.init();
                   }
                
                       @EventHandler
                       public void PostInit(FMLPostInitializationEvent event){
                       /*No Utils Tnt
                       RenderManager rendermanager = Minecraft.getMinecraft().getRenderManager();
                       rendermanager.entityRenderMap.put(EntityTNTPrimed.class, new RenderTntPrimed(rendermanager));*/
                       }
                
                
                
                public class TntGui extends GuiScreen{
                public void initGui()
                    {
                        this.buttonList.clear();
                            this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 72, I18n.format("Dire : ``Bonjour``", new Object[0]))); // Bouton
                            this.buttonList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 96, I18n.format("Revenir en jeu", new Object[0])));    // Bouton 
                    }
                
                    public boolean doesGuiPauseGame()
                    {
                        return false;
                    }
                
                    protected void actionPerformed(GuiButton par1)
                    {
                        switch (par1.id)
                        {
                            case 0:
                                this.mc.thePlayer.sendChatMessage("Bonjour je m'appel " + mc.getSession().getUsername()); //permet de dire bonjour et son pseudo dans le chat (j'ai mis ça just pour montrer)
                                this.mc.displayGuiScreen((GuiScreen) null); //retourne en jeu
                                break;
                            case 1:
                            this.mc.displayGuiScreen((GuiScreen) null); //retourne en jeu
                            break;
                        }
                    }
                
                    public void drawScreen(int par1, int par2, float par3)
                    {
                    this.drawDefaultBackground(); //affiche un fond noir
                        this.drawCenteredString(this.fontRendererObj, I18n.format("§cGui Tuto", new Object[0]), this.width / 2, 40, 16777215); //met le texte "Gui Tuto" au haut du gui
                        super.drawScreen(par1, par2, par3);
                    }
                }
                
                
                
                public class TntCommande extends CommandBase {
                
                private GuiHandlerTuto GuiHandlerTuto = new GuiHandlerTuto();
                
                @Override
                public String getCommandName() {
                return "tnttimer";
                }
                
                @Override
                public String getCommandUsage(ICommandSender sender) {
                return "/tnttimer";
                }
                
                @Override
                public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
                EntityPlayer player= (EntityPlayer)sender;
                        player.openGui(ModTutorial.instance, 0, player.worldObj, (int)player.posX, (int)player.posY, (int)player.posZ);
                
                }
                
                @Override
                public boolean checkPermission(MinecraftServer server, ICommandSender sender) {
                return true;
                }
                
                }
                
                
                
                public class GuiHandlerTuto implements IGuiHandler{
                
                @Override
                public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
                       return null;
                }
                
                @Override
                public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
                
                       return new TntGui();
                }
                
                }
                
                

                @‘floflolol’:

                @‘Plaigon’:

                Et tes classes ? Je les voudrai entièrement afin de t’être le + utile possible !

                
                 @Mod(modid = Reference.MOD_ID, name = Reference.MOD_NAME, version = Reference.MOD_VERSION)
                 public class ModTutorial{
                
                    @SidedProxy(clientSide = "com.floflolol.mod.proxy.ClientProxy", serverSide = "com.floflolol.mod.proxy.ServerProxy")
                    public static CommonProxy proxy;
                    
                   @Instance(Reference.MOD_ID)
                   public static ModTutorial instance;
                   
                   public static Logger logger;
                   
                   @EventHandler
                   public void preInit(FMLPreInitializationEvent event){
                       logger = event.getModLog();
                       
                       MinecraftForge.EVENT_BUS.register(new EventTnt());
                       MinecraftForge.EVENT_BUS.register(new EventGui());
                
                   }
                   
                   @EventHandler
                   public void init(FMLInitializationEvent event){
                   ClientCommandHandler.instance.registerCommand(new TntCommande());
                       NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandlerTuto());
                   proxy.init();
                   }
                   
                       @EventHandler
                       public void PostInit(FMLPostInitializationEvent event){
                       /*No Utils Tnt
                       RenderManager rendermanager = Minecraft.getMinecraft().getRenderManager();
                       rendermanager.entityRenderMap.put(EntityTNTPrimed.class, new RenderTntPrimed(rendermanager));*/
                       }
                
                
                
                public class TntGui extends GuiScreen{
                public void initGui()
                    {
                        this.buttonList.clear();
                            this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 72, I18n.format("Dire : ``Bonjour``", new Object[0]))); // Bouton
                            this.buttonList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 96, I18n.format("Revenir en jeu", new Object[0])));    // Bouton 
                    }
                
                    public boolean doesGuiPauseGame()
                    {
                        return false;
                    }
                
                    protected void actionPerformed(GuiButton par1)
                    {
                        switch (par1.id)
                        {
                            case 0:
                                this.mc.thePlayer.sendChatMessage("Bonjour je m'appel " + mc.getSession().getUsername()); //permet de dire bonjour et son pseudo dans le chat (j'ai mis ça just pour montrer)
                                this.mc.displayGuiScreen((GuiScreen) null); //retourne en jeu
                                break;
                            case 1:
                            this.mc.displayGuiScreen((GuiScreen) null); //retourne en jeu
                            break;
                        }
                    }
                
                    public void drawScreen(int par1, int par2, float par3)
                    {
                    this.drawDefaultBackground(); //affiche un fond noir
                        this.drawCenteredString(this.fontRendererObj, I18n.format("§cGui Tuto", new Object[0]), this.width / 2, 40, 16777215); //met le texte "Gui Tuto" au haut du gui
                        super.drawScreen(par1, par2, par3);
                    }
                }
                
                
                
                public class TntCommande extends CommandBase {
                
                private GuiHandlerTuto GuiHandlerTuto = new GuiHandlerTuto();
                
                @Override
                public String getCommandName() {
                return "tnttimer";
                }
                
                @Override
                public String getCommandUsage(ICommandSender sender) {
                return "/tnttimer";
                }
                
                @Override
                public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
                EntityPlayer player= (EntityPlayer)sender;
                        player.openGui(ModTutorial.instance, 0, player.worldObj, (int)player.posX, (int)player.posY, (int)player.posZ);
                
                }
                
                @Override
                public boolean checkPermission(MinecraftServer server, ICommandSender sender) {
                return true;
                }
                
                }
                
                
                
                public class GuiHandlerTuto implements IGuiHandler{
                
                @Override
                public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
                       return null;
                }
                
                @Override
                public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
                
                       return new TntGui();
                }
                
                }
                
                

                et ce mod sert a faire un gui que coté Client !

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

                  Alors pense a registerCommand uniquement côté client dans init. Sinon j’ai essayé vite fait de mon côté, executCommand est bien appelé mais du coup uniquement côté client: logique.
                  En revanche, j’ai tenté un Minecraft#displayGuiScreen et rien du tout ne s’affichait à l’écran, comme si la méthode ne servait à rien 😮
                  Je réessaierai tout à l’heure si j’ai le temps, attends sinon la venue d’un autre membre 😕

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

                    @‘floflolol’:

                    c’est un mod pour Client et non Server

                    Ah, à ce moment là, il faut que ta commande implémente l’interface **IClientCommand **et que tu l’enregistres avec *ClientCommandHandler.instance.registerCommand(command) *dans ton init. Comme ça, tu n’auras pas à t’embêter avec le GuiHandler.
                    Le **IClientCommand **n’a était rajouté qu’à partir de la 1.11.2…

                    Ensuite, dans le execute de ta commande, tu fais comme ça :

                    
                    @Override
                    public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
                    Minecraft mc = Minecraft.getMinecraft();
                    TimerTask timerTask = new TimerTask() {
                    
                    @Override
                    public void run() {
                    mc.displayGuiScreen(<instance de="" ton="" gui="">);
                    }
                    };
                    Timer timer = new Timer();
                    timer.schedule(timerTask, 200);
                    }
                    
                    

                    PS: override la méthode **getRequiredPermissionLevel **afin qu’elle retourne 0 pour que ta commande puisse fonctionner sur un serveur.</instance>

                    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

                      Je suis partie sur une mauvaise piste, ce que je t’ai dit de faire n’allait pas fonctionner car tu utilises une commande client (ClientCommandHandler.instance.register)
                      (player.openGui doit être exécuté côté serveur, sinon il ne fonctionne pas).
                      C’est le genre de chose qu’il aurait fallu préciser dès le début.

                      Il faudrait ouvrir le gui comme celui :

                      Minecraft.getMinecraft().addScheduledTask(new Runnable()
                      {
                          @Override
                          public void run()
                          {
                              Minecraft.getMinecraft().displayGuiScreen(new TntGui());
                          }
                      });
                      
                      1 réponse Dernière réponse Répondre Citer 1
                      • F Hors-ligne
                        floflolol
                        dernière édition par

                        @‘robin4002’:

                        Je suis partie sur une mauvaise piste, ce que je t’ai dit de faire n’allait pas fonctionner car tu utilises une commande client (ClientCommandHandler.instance.register)
                        (player.openGui doit être exécuté côté serveur, sinon il ne fonctionne pas).
                        C’est le genre de chose qu’il aurait fallu préciser dès le début.

                        Il faudrait ouvrir le gui comme celui :

                        Minecraft.getMinecraft().addScheduledTask(new Runnable()
                        {
                            @Override
                            public void run()
                            {
                                Minecraft.getMinecraft().displayGuiScreen(new TntGui());
                            }
                        });
                        

                        Cela ne fonctionne pas !  😢

                        
                        public class TntCommande extends CommandBase {
                        
                        private GuiHandlerTuto GuiHandlerTuto = new GuiHandlerTuto();
                        
                        @Override
                        public String getCommandName() {
                        return "tnttimer";
                        }
                        
                        @Override
                        public String getCommandUsage(ICommandSender sender) {
                        return "/tnttimer";
                        }
                        
                        @Override
                        public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
                        Minecraft.getMinecraft().addScheduledTask(new Runnable()
                        {
                            @Override
                            public void run()
                            {
                                Minecraft.getMinecraft().displayGuiScreen(new TntGui());
                            }
                        });
                        
                        }
                        
                        @Override
                        public boolean checkPermission(MinecraftServer server, ICommandSender sender) {
                        return true;
                        }
                        
                        }
                        
                        
                        
                           @EventHandler
                           public void init(FMLInitializationEvent event){
                           ClientCommandHandler.instance.registerCommand(new TntCommande());
                           proxy.init();
                           }
                        
                        

                        @‘Alexandre1156’:

                        @‘floflolol’:

                        c’est un mod pour Client et non Server

                        Ah, à ce moment là, il faut que ta commande implémente l’interface **IClientCommand **et que tu l’enregistres avec *ClientCommandHandler.instance.registerCommand(command) *dans ton init. Comme ça, tu n’auras pas à t’embêter avec le GuiHandler.
                        Le **IClientCommand **n’a était rajouté qu’à partir de la 1.11.2…

                        Ensuite, dans le execute de ta commande, tu fais comme ça :

                        
                        @Override
                        public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
                        Minecraft mc = Minecraft.getMinecraft();
                        TimerTask timerTask = new TimerTask() {
                        
                        @Override
                        public void run() {
                        mc.displayGuiScreen(<instance de="" ton="" gui="">);
                        }
                        };
                        Timer timer = new Timer();
                        timer.schedule(timerTask, 200);
                        }
                        
                        

                        PS: override la méthode **getRequiredPermissionLevel **afin qu’elle retourne 0 pour que ta commande puisse fonctionner sur un serveur.</instance>

                        Je suis en 1.9.4 ( Je L’es Déjà Tag  ::dodgy: (Mercie de l’aide quand même!) ).


                        @‘Plaigon’:

                        Alors pense a registerCommand uniquement côté client dans init. Sinon j’ai essayé vite fait de mon côté, executCommand est bien appelé mais du coup uniquement côté client: logique.
                        En revanche, j’ai tenté un Minecraft#displayGuiScreen et rien du tout ne s’affichait à l’écran, comme si la méthode ne servait à rien 😮
                        Je réessaierai tout à l’heure si j’ai le temps, attends sinon la venue d’un autre membre 😕

                        J’ai trouvé une faille ?  😮 De plus je viens d’essayer de initialiser dans le init du client mais sans résultat !

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

                          Le problème avec :

                          
                          Minecraft.getMinecraft().addScheduledTask(new Runnable()
                          {
                          @Override
                          public void run()
                          {
                          Minecraft.getMinecraft().displayGuiScreen(new TntGui());
                          }
                          });
                          

                          C’est que la commande est exécutée avant la fermeture du GuiChat, donc une fois la commande exécutée le Gui actuellement ouvert est fermé. Si tu ne veux pas te prendre la tête, je te propose d’utiliser un keybinding pour ouvrir ton GUI

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

                            @‘BrokenSwing’:

                            Le problème avec :

                            
                            Minecraft.getMinecraft().addScheduledTask(new Runnable()
                            {
                               @Override
                               public void run()
                               {
                                   Minecraft.getMinecraft().displayGuiScreen(new TntGui());
                               }
                            });
                            

                            C’est que la commande est exécutée avant la fermeture du GuiChat, donc une fois la commande exécutée le Gui actuellement ouvert est fermé. Si tu ne veux pas te prendre la tête, je te propose d’utiliser un keybinding pour ouvrir ton GUI

                            Donc est-ce que cela serrait possible de forcé la fermeture du GuiChat et après lancer le ScheduledTask ?

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

                              Si tu as du mal avec les commandes client et les ScheduledTask en général, une solution alternative que je te propose, serait l’event ClientChatReceivedEvent.

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

                                @‘Plaigon’:

                                Si tu as du mal avec les commandes client et les ScheduledTask en général, une solution alternative que je te propose, serait l’event ClientChatReceivedEvent.

                                Je vais voir Merci 😉

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

                                MINECRAFT FORGE FRANCE © 2024

                                Powered by NodeBB