Afficher Un GuiScreen A Partir D'une Commande
-
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>
-
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 ! -
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.
-
@‘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
