Creation de gui



  • hello, j'aimerais crée un gui mais le problème c'est que je ne comprend pas du tout comment sa marche

    j'ai chercher sur internet quelque explication mais rien trouver de satisfaisant ^^

    si quelqu'un pourrait m'expliquer 🙂



  • -Si tu souhaites extends GuiScreen : http://www.minecraftforge.net/wiki/Basic_GUI
    -Si tu souhaites extends GuiContainer : http://www.minecraftforge.net/wiki/Containers_and_GUIs



  • @'Plaigon':

    -Si tu souhaites extends GuiScreen : http://www.minecraftforge.net/wiki/Basic_GUI
    -Si tu souhaites extends GuiContainer : http://www.minecraftforge.net/wiki/Containers_and_GUIs

    La page du GuiScreen je l'avais trouvé j'ai fait tout ce qui était mis mais le problème c'est que je ne savais pas comment ouvrir le gui via un bouton sur le menue echap et aussi comment ajouter une image ainsi que des composant ^^



  • Pour draw un background sur un GuiScreen, voici la fonction que je te propose, à call dans la méthode drawScreen :

    
            Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation(TonMod.modid, "textures/gui/tongui.png"));
            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
            int xCoord = (width - 300) / 2;//300 est la longueur de ton gui, à remplacer par la tienne
            int yCoord = (height - 300) / 2;//idem pour la hauteur
            drawTexturedModalRect(xCoord, yCoord, 0, 0, 275, 275);
            this.func_146270_b(1);
            super.drawScreen(i, j, f);
    
    

    Pour l'ouvrir via un bouton, ce tuto devrait encore être bon, je pense
    Quant aux nouveaux composants, c'est un peu à toi de te débrouiller…Regarde des gui's déjà existants, ça t'aidera bien !



  • J'ai une erreur sur la ligne
     ```java
    this.func_146270_b(1);

    
    EDIT:
    enfaite je croit avoir trouver j'ai remplacer par 
    ```java
     this.drawWorldBackground(1);
    

    EDIT 2:

    Je vien de lancer le jeu pour voir si mon gui marche mais malheuresement mon jeu crash

    –-- Minecraft Crash Report ----
    // This is a token for 1 free hug. Redeem at your nearest Mojangsta: [HUG]

    Time: 05/05/16 18:06
    Description: There was a severe problem during mod loading that has caused the game to fail

    cpw.mods.fml.common.LoaderException: java.lang.ClassNotFoundException: fr.burning.testgui.ClientProxy
    at cpw.mods.fml.common.ProxyInjector.inject(ProxyInjector.java:76)
    at cpw.mods.fml.common.FMLModContainer.constructMod(FMLModContainer.java:512)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
    at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
    at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
    at com.google.common.eventbus.EventBus.post(EventBus.java:275)
    at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:212)
    at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:190)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
    at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
    at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
    at com.google.common.eventbus.EventBus.post(EventBus.java:275)
    at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:119)
    at cpw.mods.fml.common.Loader.loadMods(Loader.java:513)
    at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:208)
    at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:480)
    at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:878)
    at net.minecraft.client.main.Main.main(SourceFile:148)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
    Caused by: java.lang.ClassNotFoundException: fr.burning.testgui.ClientProxy
    at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:191)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at cpw.mods.fml.common.ModClassLoader.loadClass(ModClassLoader.java:58)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at cpw.mods.fml.common.ProxyInjector.inject(ProxyInjector.java:59)
    … 33 more
    Caused by: java.lang.NullPointerException
    at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:182)
    ... 39 more

    d'apres ce que je comprend le probleme vient de la classe ClientPorxy donc la voici ^^

    
    public class ClientProxy 
    {
    private static KeyBinding keyBindTest;
    Minecraft mc;
    public ClientProxy()
    {
    FMLCommonHandler.instance().bus().register(this);
    keyBindTest = new KeyBinding("guitest.key", Keyboard.KEY_T, "key.categories.testguimod");
    ClientRegistry.registerKeyBinding(keyBindTest);
    }
    
    @SubscribeEvent
    public void onEvent(KeyInputEvent event)
    {
    // Si vous remplacez isPressed() par getIsKeyPressed()
    // Le chat sera inondé à chaque fois que vous presserez la touche
    
    if(keyBindTest.isPressed())
    {
    keyTestTyped(); // Traitement de la touche
    }
    }
    
    private void keyTestTyped()
    {
    // La touche vient d'être appuyé !!
    mc.displayGuiScreen(new GuiTest());
    }
    }
    
    


  • Forge arrive pas à trouver ton proxy client, vérifie que t'as bien écrit le nom du package où il est.



  • @'AymericRed':

    Forge arrive pas à trouver ton proxy client, vérifie que t'as bien écrit le nom du package où il est.

    oui c'est bien écrit, c'est sa le problème



  • Montre le ligne où tu enregistres le proxy avec le chemin de la classe et montre le "package …" en haut de ton ClientProxy, on sait jamais une fois j'ai bien du passer 5-10 minutes pour trouver où il y avait un pb.



  • @'AymericRed':

    Montre le ligne où tu enregistres le proxy avec le chemin de la classe et montre le "package …" en haut de ton ClientProxy, on sait jamais une fois j'ai bien du passer 5-10 minutes pour trouver où il y avait un pb.

    classe principale

    package fr.buning.testgui;
    
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.Instance;
    import cpw.mods.fml.common.SidedProxy;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.event.FMLPostInitializationEvent;
    import cpw.mods.fml.common.event.FMLPreInitializationEvent;
    import cpw.mods.fml.common.network.NetworkRegistry;
    
    @Mod(modid = "gui", name = "Basic GUI", version = "1.0.0")
    public class testgui 
    {
    
    @Instance("gui")
    public static testgui instance;
    public static final String MODID = "gui";
    
        @SidedProxy(clientSide = "fr.burning.testgui.ClientProxy", serverSide = "fr.burning.testgui.CommonProxy")
        public static CommonProxy proxy;
    
    @Mod.EventHandler
    public void preInit(FMLPreInitializationEvent event) throws Exception
    {
    System.out.println("/***PreInit***/");
    }
    
        @Mod.EventHandler
        public void init(FMLInitializationEvent event) 
        {
    
        System.out.println("/***Init***/");
                proxy.registerKeybindings();
                NetworkRegistry.INSTANCE.registerGuiHandler(instance, proxy);
        }
    
    @Mod.EventHandler
    public void postInit(FMLPostInitializationEvent event)
    {
    System.out.println("/***postInit***/");
    }
    
    }
    
    

    classe ClientProxy

    package fr.buning.testgui;
    
    import org.lwjgl.input.Keyboard;
    
    import cpw.mods.fml.client.registry.ClientRegistry;
    import cpw.mods.fml.common.FMLCommonHandler;
    import cpw.mods.fml.common.eventhandler.SubscribeEvent;
    import cpw.mods.fml.common.gameevent.InputEvent.KeyInputEvent;
    import net.minecraft.client.Minecraft;
    import net.minecraft.client.gui.GuiChat;
    import net.minecraft.client.settings.KeyBinding;
    import net.minecraft.util.ChatComponentText;
    
    public class ClientProxy 
    {
    private static KeyBinding keyBindTest;
    Minecraft mc;
    public ClientProxy()
    {
    FMLCommonHandler.instance().bus().register(this);
    keyBindTest = new KeyBinding("guitest.key", Keyboard.KEY_T, "key.categories.testguimod");
    ClientRegistry.registerKeyBinding(keyBindTest);
    }
    
    @SubscribeEvent
    public void onEvent(KeyInputEvent event)
    {
    // Si vous remplacez isPressed() par getIsKeyPressed()
    // Le chat sera inondé à chaque fois que vous presserez la touche
    
    if(keyBindTest.isPressed())
    {
    keyTestTyped(); // Traitement de la touche
    }
    }
    
    private void keyTestTyped()
    {
    // La touche vient d'être appuyé !!
    mc.displayGuiScreen(new GuiTest());
    }
    }
    
    

    sa doit etre un faute d'othographe a la con



  • Ton ClientProxy est dans fr.buning.testgui, tu as oublié le "r".



  • @'AymericRed':

    Ton ClientProxy est dans fr.buning.testgui, tu as oublié le "r".

    Ha oui exact le con c'est sa quand on veut faire vite XD, merci 😉