Afficher Un GuiScreen A Partir D'une Commande



  • Bonjour, je voudrais afficher un GuiScreen (D'ailleurs j'ai trouvez 0 tuto sur votre situe pour ouvrir un Gui dans n'importe qu'elle situation) de puis une commande, le seul problème c'est que le guiScreen ne fonctionne pas ! (Je suis un débutant dans Forge, s'il vous plais ne vous moquer pas, Merci) !
    (La commande Fonctionne Bien et le débug aussi, c'est juste le guiScreen qui ne s'affiche pas !)

    
    @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().displayGuiScreen(new TntGui());
    Minecraft.getMinecraft().thePlayer.addChatComponentMessage(sendMessage.sendMessageF("Test"));
    }
    
    @Override
    public boolean checkPermission(MinecraftServer server, ICommandSender sender) {
    return true;
    }
    
    

    Gui

    
    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);
        }
    }
    
    

  • Administrateurs

    Salut,
    Les commandes sont exécutés côté serveur, il n'est donc pas possible d'utiliser Minecraft.getMinecraft().displayGuiScreen.
    Il te faut soit envoyer un paquet, soit utiliser la fonction player.openGui qui se charge déjà d'envoyer un paquet et retourner ton gui dans la fonction getClientElement du gui handler.

    https://www.minecraftforgefrance.fr/forumdisplay.php?fid=17



  • @'robin4002':

    Salut,
    Les commandes sont exécutés côté serveur, il n'est donc pas possible d'utiliser Minecraft.getMinecraft().displayGuiScreen.
    Il te faut soit envoyer un paquet, soit utiliser la fonction player.openGui qui se charge déjà d'envoyer un paquet et retourner ton gui dans la fonction getClientElement du gui handler.

    https://www.minecraftforgefrance.fr/forumdisplay.php?fid=17

    Bonjour , merci de ta réponse, je n'est pas très bien compris comment je fais pour afficher le gui, j'ai essayer cette méthode , mais elle me retourne une erreur !

    
    @Override
    public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
    if(sender instanceof EntityPlayer) {
    EntityPlayer player = (EntityPlayer) sender;
    player.openGui(new TntGui(), 9999, player.worldObj, player.chunkCoordX, player.chunkCoordY, player.chunkCoordZ);
    }
    }
    
    


  • 
    /**
    * Opens a GUI with this player, uses FML's IGuiHandler system.
    * Allows for extension by modders.
    *
    * @param mod The mod trying to open a GUI
    * @param modGuiId GUI ID
    * @param world Current World
    * @param x Passed directly to IGuiHandler, data meaningless Typically world X position
    * @param y Passed directly to IGuiHandler, data meaningless Typically world Y position
    * @param z Passed directly to IGuiHandler, data meaningless Typically world Z position
    */
    public void openGui(Object mod, int modGuiId, World world, int x, int y, int z)
    
    


  • @'Plaigon':

    
       /**
        * Opens a GUI with this player, uses FML's IGuiHandler system.
        * Allows for extension by modders.
        *
        * @param mod The mod trying to open a GUI
        * @param modGuiId GUI ID
        * @param world Current World
        * @param x Passed directly to IGuiHandler, data meaningless Typically world X position
        * @param y Passed directly to IGuiHandler, data meaningless Typically world Y position
        * @param z Passed directly to IGuiHandler, data meaningless Typically world Z position
        */
       public void openGui(Object mod, int modGuiId, World world, int x, int y, int z)
    
    

    Je pense ne pas comprendre certain parametre comme le "Gui Id", mais personnellement étant débutant, je vois mon code visuellement juste mais alors qui ne l'est pas, j'ai regarder ce tuto et j'y comprends peut grand chose https://www.minecraftforgefrance.fr/showthread.php?tid=163 !  😢 😢





  • @'Plaigon':

    https://www.minecraftforgefrance.fr/showthread.php?tid=2082#classe3

    Cette histoire commence a m'énerver, car je n'y comprends vraiment rien, j'aimerais avoir des exemple mais que pour coté client, car c'est un mod pour Client et non Server et je voudrais pas ouvrir un container mais un GuiScreen  ! Si qu'elle qu'un pourrais montrer un petit code, du style juste mettre un bouton sur l'écran sans mettre d'effet ! Je pense que c'est simple non ? Cela serrais hyper sympas, car j'y comprends Rien de chez Rien  😢 😢 (Et cela m'énerve  :@ de pas y arriver)

    
    @Override
    public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
    if(sender instanceof EntityPlayer) {
    EntityPlayer player = (EntityPlayer) sender;
    player.openGui(ModTutorial.instance, 0, player.getEntityWorld(), player.chunkCoordX, player.chunkCoordY, player.chunkCoordZ);
    }
    }
    
    
    
    @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();
    }
    
    
    
    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 preInit(FMLPreInitializationEvent event){
           NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandlerTuto());
       }
    
    


  • 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.



  • @'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();
       }
    
    


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



  • @'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)



  • 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 ?



  • @'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 !



  • 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 😕



  • @'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>


  • Administrateurs

    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());
        }
    });
    


  • @'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 !


  • Rédacteurs

    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



  • @'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 ?



  • 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.