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?


  • Administrateurs

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

    Du 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:


  • Modérateurs

    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…