MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Un système de trade : le GUI

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.x
    6 Messages 3 Publieurs 1.3k Vues 1 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • AxaurusA Hors-ligne
      Axaurus
      dernière édition par

      Salut
      Je voudrai créer un système de “trade” (commerce en français ?) avec un gui custom.
      J’ai réussi à créer le système (grandement inspiré de l’EntityVillager) mais le problème est avec le GUI : je ne sais pas comment l’afficher.
      J’ai créer la classe (je pense qu’elle marche) mais c’est pour l’afficher que je ne sais pas. J’ai suivi le tuto ici, mais ce n’est pas exactement pareil : le tuto est pour des TileEntity, hors moi je veux pour une entité. J’ai cherché partout sur internet et regarder les classes vanilla, mais ne trouve pas.
      J’ai tout de même tester des choses :
      -```java
      FMLClientHandler.instance().displayGuiScreen([size=smallplayer], [size=smallnew] GuiMerchant([size=smallplayer].[size=smallinventory], [size=smallmerchant], [size=smallworldObj], I18n.format([size=small“entity.MOB.name”], [size=smallnew] Object[0])));

      Mais il faut initialiser la variable merchant :
      ```java
      IMerchant [size=smallmerchant] =
      ``` je ne sais pas ce qu'il faut mettre après le égale.
      - ```java
      [size=smallplayer].openGui(This_is_Christmas.This_is_Christmas.*[size=smallinstance]*, 0, [size=smallworldObj], (**[size=smallint]**)[size=smallplayer].[size=smallposX], (**[size=smallint]**)[size=smallplayer].[size=smallposY], (**[size=smallint]**)[size=smallplayer].[size=smallposZ]);
      

      Ici, je suppose que ça affiche le GUI avec l’ID 0 dans le mod. Si c’est ça, comment affecter mon GUI à l’ID 0 ?
      -la méthode qui est utilisée chez les villageois est : ```java
      [size=smallplayer].displayGUIMerchant([size=smallthis], [size=smallthis].getCustomNameTag());

      Du coup, je suis aller à l'emplacement de displayGUIMerchant, ce qui me mène dans EntityPlayer à la ligne :
      ```java
      **[size=smallpublic]** **[size=smallvoid]** displayGUIMerchant(IMerchant [size=smallp_71030_1_], String [size=smallp_71030_2_]) {}
      ```.
      Mais je ne trouve pas où est dit que displayGUIMerchant doit afficher le GUI GuiMerchant. Du coup, je ne peux pas l'utiliser.
      
      Ca se trouve, la réponse est toute simple, mais je ne trouve pas.
      
      Merci d'avance
      
      PS : Si quelqu'un saurait comment faire pour que mon mob ne fasse de demande qu'une par une (par exemple s'il demande une pomme, on ne pourra pas lui donner autre chose tant qu'on lui a pas donner de pomme), je suis preneur.
      1 réponse Dernière réponse Répondre Citer 0
      • DeletedD Hors-ligne
        Deleted
        dernière édition par

        Déjà tu n’as pas besoin de créer d’instance IMerchant nan, il te suffit d’implémenter ton mob qui affiche le gui, de l’interface IMerchant. Après le extends EntityCreature (ou autre chose, je sais pas) rajoute implement IMerchant et ainsi ta fonction qui appelle l’affichage du gui ressemblera à ça :

        FMLClientHandler.instance().displayGuiScreen(player, new GuiMerchant(player.inventory, this, worldObj, I18n.format(“entity.MOB.name”, new Object[0])));
        Ensuite vérifies bien avant d’appeller cette méthode que tu te trouve bien QUE et je dis bien QUE sur le Side Client, sinon crash assuré en multi. Pour ce faire rajoute ceci
        if(world.isRemote)
        FMLClientHandler.instance().displayGuiScreen(player, new GuiMerchant(player.inventory, this, worldObj, I18n.format(“entity.MOB.name”, new Object[0])));

        Je crois que c’est tout. Et juste pour te préciser sur le point des Entity / TileEntity qui affiche un gui, tu n’as pas besoin de créer un GuiHandler si tu n’as pas de TileEntity qui affice un gui
        Pour finir, je n’ai pas compris ta deuxième question (celle du PS).

        1 réponse Dernière réponse Répondre Citer 0
        • robin4002R Hors-ligne
          robin4002 Moddeurs confirmés Rédacteurs Administrateurs
          dernière édition par

          Salut,
          Pour ajouter un gui sur une entité le mieux est d’utiliser l’id d’openGui pour savoir de quelle entité ça vient et utiliser le x pour l’id de l’entité. (le y et le z reste inutilisé).
          Voici un petit exemple.

          • la fonction interact de mon entité :
             @Override
             public boolean interactFirst(EntityPlayer player)
             {
                 if(!player.worldObj.isRemote)
                 {
          
                     player.openGui(ExampleMod.instance, <l'id que="" tu="" veux,="" qui="" n'est="" pas="" utilisé="" dans="" un="" autre="" opengui="" de="" ton="" mod="">, player.worldObj, this.getEntityId(), 0, 0);
                 }
                 return true;
             }
          

          et le gui handler :

          public class ExampleGuiHandler implements IGuiHandler
          {
             @Override
             public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
             {
          
                 if(ID == <l'id voulu="">)
                 {
                     EntityExample entity = (EntityExample)world.getEntityByID(x); // on recup l'entité
                     return new ContainerExample(player.inventory, world, entity);
                 }
                 return null;
             }
          
             @Override
             public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
             {
                 if(ID == <l'id voulu="">)
                 {
                     EntityExample entity = (EntityExample)world.getEntityByID(x); // on recup l'entité
                     return new GuiExample(player.inventory, world, entity);
                 }
                 return null;
             }
          }
          ```</l'id></l'id></l'id>
          1 réponse Dernière réponse Répondre Citer 0
          • AxaurusA Hors-ligne
            Axaurus
            dernière édition par

            Salut, désolé du temps de la réponse
            Ca marche parfaitement, merci à vous deux 🙂

            Pour ma deuxième question, je voudrais que si mon mob demande un objet A, on ne pourra rien lui donner d’autre tant qu’on ne lui a pas donner A. Par exemple, si il demande une pomme et qu’on veut lui donner une ender pearl, il n’en voudra pas et ça fera rien, il faut lui donner une pomme.
            Je ne sais pas si c’est clair, je ne sais pas bien expliquer 😕

            A mon avis, il faut utiliser des NBT Tags, mais je ne suis pas sûr

            1 réponse Dernière réponse Répondre Citer 0
            • DeletedD Hors-ligne
              Deleted
              dernière édition par

              Est-ce que ta liste sera prédéfinie et fixe, du genre après la pomme, y’a le blé et ensuite la carotte, etc…Ou est-ce qu’elle variera d’un mob à l’autre ? Si elle est fixe, utilise un tableau d’Item pour stocker tous ces items dans le bon ordre, sinon si cette ensemble peut varier, utilise une ArrayList d’Item. Ensuite dans la fonction interact tu ajouteras une condition qui vérifie si l’item tenu du joueur est égal à tel index du tableau ou de la liste et si oui, tu mets ton code (n’oublie pas le null-check de l’itemstack : getHeldItem(), sinon CRASH !). Et oui évidemment, tu dois sauvegarder le tout (la progression des items donnés à l’Entity) dans ses NBT, mais ça je pense que tu sais le faire 😉

              1 réponse Dernière réponse Répondre Citer 0
              • AxaurusA Hors-ligne
                Axaurus
                dernière édition par

                Salut
                Désolé pour le temps de la réponse.

                J’ai commencé à faire un tableau, et j’ai ensuite réfléchi que ça ferai un peu bizarre. J’ai donc mis comme les villageois, et ça marche.
                Merci 🙂

                1 réponse Dernière réponse Répondre Citer 0
                • 1 / 1
                • Premier message
                  Dernier message
                Design by Woryk
                ContactMentions Légales

                MINECRAFT FORGE FRANCE © 2024

                Powered by NodeBB