Un GUI basique



  • Donc, je cherche a créer un GUI basique avec 2 étapes :
    1- La base s'ouvre, avec un bouton a appuyer ( avec écrit Otacon dessus )

    2- Une fois qu'on clique, la face d'otacon apparait :

    Et nous dit un truc random

    Il faudrait que le GUI apparaisse en appuyant sur une touche ( a savoir P )

    Je n'ai aucune idée de comment faire, pourtant j'ai bien regardé le code source.

    Merci d'avance.



  • Alors, pour le bouton c'est simple, tu fais une boolean trigger liée a la fonction qui check les boutons

    Ensuite, pour ouvrir avec une touche, regarde comment l'inventaire s'ouvre





  • @'Patatoufet':

    http://www.minecraftforum.net/topic/1798625-162sobiohazardouss-forge-keybinding-tutorial/

    Il me mets une erreur a

    ("Codec", Keyboard.KEY_P)};
    

    KEY_P cannot be resolved or is not a field



  • Tu a bien pensé au

    
    KeyBinding[] key = {new KeyBinding("Codec", Keyboard.KEY_P)};
    boolean[] repeat = {false};
    KeyBindingRegistry.registerKeyBinding(new CodecKeyBind(key, repeat));
    
    

    ?



  • Évidemment …


  • Modérateurs

    Tu as du importer la mauvaise classe Keyboard.
    Vérifie que tu as bien importé org.lwjgl.util.Keyboard



  • Merci. Et maintenant ?



  • #Classe principale(Classe principale)
    Dans la déclaration

    public static Main INSTANCE;
    

    Dans le onInit

    KeyBindingRegistry.registerKeyBinding(new TutoKeyBind());
    

    #Crée ta classe qui gère les touches (Crée ta classe qui gère les touches )

    public class TutoKeyBind extends KeyHandler
    {
    public static KeyBinding tutoKey = new KeyBinding("key.button.tutoKey", Keyboard.KEY_P);
    
    public FicheKeyBind()
    {
    
    super(new KeyBinding[] {tutoKey}, new boolean[] {false});
    }
    
    @Override
    public String getLabel()
    {
    return "Key Tutorial";
    }
    
    @Override
    public void keyDown(EnumSet <ticktype>types, KeyBinding kb, boolean tickEnd, boolean isRepeat) {
    }
    
    @Override
    public void keyUp(EnumSet <ticktype>types, KeyBinding kb, boolean tickEnd)
    {
    
    EntityPlayer player = FMLClientHandler.instance().getClient().thePlayer;
    Minecraft mc = Minecraft.getMinecraft();
    
    if(kb.keyCode == tutoKey.keyCode && mc.currentScreen == null) // Tu vérifie qu'il à appuyer sur la touche et qu'il a pas d'autre gui d'ouvert.
    {
    player.openGui(Main.INSTANCE,TutorielGuiHandler.tutoGuiHandler,player.worldObj,(int) player.posX,(int) player.posY,(int) player.posZ);
    }
    
    }
    
    @Override
    public EnumSet <ticktype>ticks()
    {
    return EnumSet.allOf(TickType.class);
    }
    }
    

    #Ton GuiHandler(Ton GuiHandler)
    Attention un seul HuiGandler par mod.

    public class TutorielGuiHandler implements IGuiHandler{
    public static final int tutoGuiHandler = 1;
    
    private EntityLiving entityL;
    @Override
    public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
    switch(ID){
    case 1: return new ContainerTuto();
    default : return null;
    }
    
    }
    
    @Override
    public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
    switch(ID){
    case 1: return new GuiTuto();
    default : return null;
    }
    }
    
    }
    ```</ticktype></ticktype></ticktype>


  • Voila, et les classes ContainerTuto et GuiTuto maintenant ? Je mets quoi dedans ?


  • Administrateurs

    Regarde le code du livre. Pour le bouton, il faudra faire que lorsque tu clic, ça ouvre un autre gui au joueur (l'id 2 ducoup).



  • Dans la console, il m'affiche

    2014-02-18 17:57:44 [Avertissement] [ForgeModLoader] A mod tried to open a gui on the server without being a NetworkMod
    2014-02-18 17:57:44 [Avertissement] [ForgeModLoader] A mod tried to open a gui on the server without being a NetworkMod
    2014-02-18 17:57:45 [Avertissement] [ForgeModLoader] A mod tried to open a gui on the server without being a NetworkMod
    2014-02-18 17:57:45 [Avertissement] [ForgeModLoader] A mod tried to open a gui on the server without being a NetworkMod
    

    Dès que j'appuie sur P ?


  • Administrateurs

    @NetworkMod(clientSideRequired = true, serverSideRequired = false) à mettre dans la classe principale en dessus de @Mod.



  • Il y est déjà


  • Administrateurs

    Ton gui handler est enregistré dans ta classe principale ?
    NetworkRegistry.instance().registerGuiHandler(new TonGuiHandler()); (ou quelque chose comme ça, je ne connais pas par cœur la méthode)



  • Toujours aucun changements.


  • Administrateurs

    Tu as le
    @Instance("modid")
    public NomDelaClasse instance; dans ta classe principale ?



  • ça ?

    @Mod(modid = "MGS", name = "Metal gear cubid", version = "1.1.0")
    

  • Administrateurs

    Non, envoie toute ta classe principale (sur un paste bin si elle est longue).




Log in to reply