Event du menu pause
-
Bonjour, je voudrais que lorsqu’un joueur ouvre le menu pause une action soie executé
Voila mon action:try { Runtime.getRuntime().exec( "une commande ici"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
Je suis un codeur débutant et appréciais votre aide. Merci
-
Simplement comme ça:
@SubscribeEvent public void OpenGui(GuiOpenEvent event) { System.out.println(event.gui); if(event.gui instanceof GuiIngameMenu) { //Tu exécute ton code ici } }
Je suis pas sur du nom “GuiIngameMenu”
Si ça marche pas regarde dans les log j’ai fais un print il serra marqué tu as juste a le remplacer.
Oublie pas de register l’event. -
Well je m’attendait a
-
Merci pour le code, je pensais qu’il serait plus compliqué!
Comment register un event?
Il y a t’il une page pour l’expliquer? -
Oui il y a un tutoriel sur le forum.
-
Voila ma classe:
package fr.minecraftforgefrance.client.custommenu; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiIngameMenu; import net.minecraft.client.gui.GuiMainMenu; import net.minecraftforge.client.event.GuiOpenEvent; import java.io.IOException; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @Mod(modid = "custommenu", name = "Custom Menu", version = "1.1.0") public class ModCustomMenu { @EventHandler public void init(FMLInitializationEvent event) { if(event.getSide().isClient()) { FMLCommonHandler.instance().bus().register(this); } } @SubscribeEvent @SideOnly(Side.CLIENT) public void onTick(TickEvent.ClientTickEvent event) { Minecraft mc = FMLClientHandler.instance().getClient(); if(mc.currentScreen != null && mc.currentScreen.getClass().equals(GuiMainMenu.class)) { mc.displayGuiScreen(new GuiCustomMainMenu()); } } @SubscribeEvent @SideOnly(Side.CLIENT) public void OpenGui(GuiOpenEvent event) { System.out.println(event.gui); if(event.gui instanceof GuiIngameMenu) { try { Runtime.getRuntime().exec( "une commande ici"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
PS: Je modifie en faite ton mod pour le menu personnalisé
Je ne vois pas ou cela bloque car dans la console, le nom des menu ne s’affichent pas et ma commande ne s’exécute pas -
Cet event n’est pas register sous FMLCommonHandler mais sous MinecraftForge.
Je te passe la liste des events avec la méthode de de register: https://www.minecraftforgefrance.fr/forge-events.phpDu coup tu r’ajoute: MinecraftForge.EVENT_BUS.register(this); dans le init juste en dessous FMLCommonHandler.
Je te met un petit screen regarde a droite la méthode de register:
-
J’aimerais ajouter qu’exécuter une commande est problématique: chaque OS a sa façon de gérer la syntaxe des commandes et de choisir ce qui est une commande valide ou non (Windows vs Unix, par exemple)
-
C’est simple il faut ajoute ce code:
String OS = System.getProperty("os.name", "generic").toLowerCase(Locale.ENGLISH); if (OS.indexOf("win") >= 0) {ton action pour windows ici}
tu peux ajouter ```java
System.out.println(OS)pour trouver le nom de l'os pour mac unix etc…