1.7.10 GuiScreen & Commande



  • Bonjour à tous, après plusieurs recherche je n'est pas trouver comment faire un GuiScreen avec un backgrounds des bouton ect et rajouter une commande qui peux ouvrir le Gui donc je me redirige vers vous pour obtenir de l'aide .

    Merci d'avance 
    PS : Désolé si il y'a des fautes d'orthographe



  • @'mrlebest':

    un GuiScreen avec un backgrounds des bouton ect

    C'est à dire ? Changer la texture des boutons ?

    Et pour la commande suffit de chercher comment on fait une commande et comment on ouvre un gui (les deux sont sur le forum), et de rassembler les deux.



  • Non non juste créé un Gui avec un backgrounds et pourvoir y rajouter des bouton et si possible modifier la texture des bouton après



  • Salut, bha il suffit de créer une classe extends GuiScreen et de dessiner ton images et ajouter t'es boutons simplement



  • Oui je s'avais ça mais pour la commande je fais comment ?

    Edit : J'ai trouver pour les commandes maintenant il faut relier le Gui à la commande et je sais pas faire



  • Envoie ta classe je vais t'expliqué en même temps donne moi la ligne que tu as trouvé pour exécuter la commande pour être sur que c'est bien ça.



  • @'floriangabet':

    Envoie ta classe je vais t'expliqué en même temps donne moi la ligne que tu as trouvé pour exécuter la commande pour être sur que c'est bien ça.

    J'ai trouver un tuto sur le forum pour les commande et pour la class je peux pas je suis sur tel



  • Je peux pas vraiment t'aider alors depuis ton ordinateur envois-nous ta classe



  • Pour ouvrir un Gui depuis une commande, il faut que tu retourne au client qui t'envoie la commande un nouveau paquet custom.
    Les commandes s’exécutent coté serveur, les GUI sont coté client



  • Tu peux pas me donner un exemple parceque je suis vraiment débutant java



  • Nous ne somme pas la pour te donner les réponses nous sommes la pour t'aider a les trouvées.
    Mais bon je suis sympa 🙂

    Normalement ta classe GuiScreen devrait ressembler a ça:

    
    import net.minecraft.client.gui.GuiButton;
    import net.minecraft.client.gui.GuiScreen;
    import net.minecraft.util.ResourceLocation;
    
    public class GuiExemple extends GuiScreen{
    
    private ResourceLocation ressource = new ResourceLocation("TONMODID:textures/gui/LENOMDETATEXTURE.png");
    
    private int ButtonExemple;
    
    public GuiExemple() {
    
    }
    
    @Override
    public void initGui() {
    
    ButtonExemple = 0;
    
    this.buttonList.add(new GuiButton(ButtonExemple, width / 2 - 123, 230, 40, 20, "Bouton Exemple"));
    
    super.initGui();
    }
    
    @Override
    protected void keyTyped(char typedChar, int keyCode) {
    super.keyTyped(typedChar, keyCode);
    }
    
    @Override
    protected void actionPerformed(GuiButton button) {
    
    switch(button.id) {
    case 0:
    //Envoie du packet ici
    TaClasseMain.network.sendToServer(new PacketCommands());
    break;
    
    default:
    break;
    }
    
    super.actionPerformed(button);
    }
    
    @Override
    public void updateScreen() {
    super.updateScreen();
    }
    
    public void drawScreen(int mouseX, int mouseY, float partialTick) {
    
    mc.getTextureManager().bindTexture(ressource);
    
    this.drawTexturedModalRect(this.width / 2 - 135, this.height / 2 - 125, 0, 0, 256, 250);
    
    super.drawScreen(mouseX, mouseY, partialTick);
        }
    
    }
    
    

    Pour se qui est du packet tien regarde ça: https://www.minecraftforgefrance.fr/showthread.php?tid=1118

    Ton packet devrait ressemblé a ça:

    
    import net.minecraft.entity.player.EntityPlayerMP;
    import net.minecraft.server.MinecraftServer;
    import io.netty.buffer.ByteBuf;
    import cpw.mods.fml.common.network.simpleimpl.IMessage;
    import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
    import cpw.mods.fml.common.network.simpleimpl.MessageContext;
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    
    public class PacketCommands implements IMessage{
    
    public PacketCommands()
    {
    
    }
    
    @Override
    public void fromBytes(ByteBuf buf) {
    
    }
    
    @Override
    public void toBytes(ByteBuf buf) {
    
    }
    
    public static class ClientHandler implements IMessageHandler <packetmoney, imessage="">{
           @Override
           public IMessage onMessage(PacketMoney message, MessageContext ctx)
           {
            EntityPlayerMP playermp = ctx.getServerHandler().playerEntity;
            MinecraftServer.getServer().getCommandManager().executeCommand(MinecraftServer.getServer(), "give " + playermp.getDisplayName() + " minecraft:apple"); // ça devrait te give une pomme (je suis pas sur que se soit ça donc essaye avant)
            return null;
           }
       }
    
    }
    
    

    Oublie pas de register (COTE CLIENT) ton packet je te laisse te débrouiller avec le lien que je t'ai donner plus haut.</packetmoney,>



  • Merci beaucoup tu ma aider enormement juste pour la commande je fais comment parceque je sais comment cree une commande mais pour la relier au gui je ne sais pas dutout


  • Administrateurs

    Regardes mieux le code qu'il a envoyé, c'est exactement ce qu'il faut pour éxecuter une commande depuis un gui.

    Par contre c'est un peu stupide comme manière de faire, plutôt que créer une commande et la lancer depuis un gui il serait mieux de faire directement l'action voulu depuis le gui.



  • Non moi enfaite je veux que lorsque on fais une commande ca ouvre le gui x)



  • Ah sérieux x) merde ^^

    Alors la faut faire ça:

    Classe commande:

    
    import net.minecraft.command.CommandBase;
    import net.minecraft.command.ICommandSender;
    import net.minecraft.entity.player.EntityPlayer;
    
    public class OpenGuiCommand extends CommandBase{
    
    @Override
    public String getCommandName() {
    return "lenomdetacommande";
    }
    
    @Override
    public String getCommandUsage(ICommandSender p_71518_1_) {
    // TODO Auto-generated method stub
    return "Usage: /lenomdetacommande";
    }
    
    @Override
    public void processCommand(ICommandSender sender, String[] args) {
    if(sender instanceof EntityPlayer)
    {
    EntityPlayerMP playermp = (EntityPlayerMP)sender;
    //sendpacket
    TACLASSEPRINCIPALE.network.senTo(new PacketOpenGui(), playermp);//Cette fois si enregistre ton packet côté CLIENT
    }
    
    }
    
    }
    
    

    Packet, enregistre ton packet côté CLIENT:

    
    public class PacketOpenGui implements IMessage
    {
        public PacketOpenGui()
        {}
    
        @Override
        public void fromBytes(ByteBuf buf)
        {}
    
        @Override
        public void toBytes(ByteBuf buf)
        {}
    
        public static class Handler implements IMessageHandler <packetopengui, imessage="">{
        @SideOnly(Side.CLIENT)
            @Override
            public IMessage onMessage(PacketOpenGui message, MessageContext ctx)
            {
                Minecraft.getMinecraft().displayGuiScreen(new TONGUISCREEN());//On fait un packet car si on utilise la classe Minecraft côté serveur en multijoueur ça crash!
                return null;
            }
        }
    
    

    Sinon tu as une autre façon sans passer par un packet.

    Tu peux mettre ton guiscreen dans le guihandle et faire un player.openGui directement dans la commande à toi de voir.

    EDIT:

    Oups j'ai oublier:

    Il faut enregistrer ta commande dans ta classe principale ou ta classe d'event (à toi de voir)

    tien faut ça:

    
     @EventHandler
        public void onServerStarting(FMLServerStartingEvent event)
        {
            event.registerServerCommand(new OpenGuiCommand());
        }
    ```</packetopengui,>


  • Merci beaucoup tu peux juste me dire ou il faux mettre le PacketCommande  et la class de la command ?



  • Il faut les créer ^^ comme tu as fait pour ta classe principale.



  • Ah non c'est bon je suis c** ca marche ! merci beaucoup !!!!

    Edit : Enfaite non ca marche pas quand je fais la commande ca m'ouvre rien

    Class principale :

           network = NetworkRegistry.INSTANCE.newSimpleChannel("narcotimod");
           network.registerMessage(PacketOpenGui.Handler.class, PacketOpenGui.class, 0, Side.SERVER);
       }
    
       @EventHandler
       public void serverStarting(FMLServerStartingEvent event)
       {
           event.registerServerCommand(new CommandTest());
       }
    

    Class du PacketGuiOpen:

    public class PacketOpenGui implements IMessage
    {
       public PacketOpenGui()
       {}
    
       @Override
       public void fromBytes(ByteBuf buf)
       {}
    
       @Override
       public void toBytes(ByteBuf buf)
       {}
    
       public static class Handler implements IMessageHandler <packetopengui, imessage="">{
       @SideOnly(Side.CLIENT)
           @Override
           public IMessage onMessage(PacketOpenGui message, MessageContext ctx)
           {
               Minecraft.getMinecraft().displayGuiScreen(new GuiScreenTest());//On fait un packet car si on utilise la classe Minecraft côté serveur en multijoueur ça crash!
               System.out.println("Ca marche le Gui !");
               return null;
           }
       }
    }
    
    

    Class de la Command

    package fr.mrlebest.narcotimod.common;
    
    import java.util.List;
    
    import fr.mrlebest.narcotimod.common.network.PacketOpenGui;
    import net.minecraft.command.CommandBase;
    import net.minecraft.command.ICommandSender;
    import net.minecraft.command.WrongUsageException;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.entity.player.EntityPlayerMP;
    import net.minecraft.server.MinecraftServer;
    import net.minecraft.util.EnumChatFormatting;
    
    public class CommandTest extends CommandBase
    {
    
       @Override
       public String getCommandName()
       {
           return "test";
       }
    
       @Override
       public String getCommandUsage(ICommandSender p_71518_1_)
       {
           // TODO Auto-generated method stub
           return "Usage: /lenomdetacommande";
       }
    
       @Override
       public void processCommand(ICommandSender sender, String[] args)
       {
           if(sender instanceof EntityPlayer)
           {
               EntityPlayerMP playermp = (EntityPlayerMP)sender;
               // sendpacket
               NarcotiMod.network.sendTo(new PacketOpenGui(), playermp);// Cette fois si enregistre ton packet côté CLIENT
               System.out.println("Ca marche !");
           }
    
       }
    
    }
    
    

    Class du GuiScreen

    package fr.mrlebest.narcotimod.client.gui;
    
    import fr.mrlebest.narcotimod.common.NarcotiMod;
    import fr.mrlebest.narcotimod.common.network.PacketOpenGui;
    import net.minecraft.client.gui.GuiButton;
    import net.minecraft.client.gui.GuiScreen;
    import net.minecraft.util.ResourceLocation;
    
    public class GuiScreenTest extends GuiScreen
    {
    
       private ResourceLocation ressource = new ResourceLocation("TONMODID:textures/gui/LENOMDETATEXTURE.png");
    
       private int ButtonExemple;
    
       public GuiScreenTest()
       {
    
       }
    
       @Override
       public void initGui()
       {
    
           ButtonExemple = 0;
    
           this.buttonList.add(new GuiButton(ButtonExemple, width / 2 - 123, 230, 40, 20, "Bouton Exemple"));
    
           super.initGui();
       }
    
       @Override
       protected void keyTyped(char typedChar, int keyCode)
       {
           super.keyTyped(typedChar, keyCode);
       }
    
       @Override
       protected void actionPerformed(GuiButton button)
       {
    
           switch(button.id)
           {
               case 0:
                   // Envoie du packet ici
                   NarcotiMod.network.sendToServer(new PacketOpenGui());
                   break;
    
               default:
                   break;
           }
    
           super.actionPerformed(button);
       }
    
       @Override
       public void updateScreen()
       {
           super.updateScreen();
       }
    
       public void drawScreen(int mouseX, int mouseY, float partialTick)
       {
    
           mc.getTextureManager().bindTexture(ressource);
    
           this.drawTexturedModalRect(this.width / 2 - 135, this.height / 2 - 125, 0, 0, 256, 250);
    
           super.drawScreen(mouseX, mouseY, partialTick);
       }
    
    }
    
    ```</packetopengui,>


  • De rien si c'est résolu met le sujet comme Résolu


  • Administrateurs

    Le message "Ca marche le Gui !" s'affiche t-il dans la console ?