MFF

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

    [Inventaire personnalisé] Par ou commencer

    Planifier Épinglé Verrouillé Déplacé Sans suite
    1.7.10
    27 Messages 5 Publieurs 6.5k 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.
    • DeletedD Hors-ligne
      Deleted
      dernière édition par

      Salut,
      pense à changer la balise sur ton topic précédent si il est selon toi, résolu.

      Ensuite une petite remarque, si tu viens poster dans support pour les moddeurs, c’est dans le but que plusieurs membres viennent t’aider afin de trouver et poster la solution. Donc par ailleurs, il est inutile de demander de l’aide par MP, car cela ne ferait ni profiter la future communauté de MFF (j’entends par là les futurs moddeurs butant sur le même problème que toi), à moins que tu postes dans un message clair et détaillé la solution, et cela ne permettrait pas aux autres helpers de pouvoir interagir si on avait décidé de commencer à résoudre ce problème sur une discussion skype. Comprends-tu ce que je veux dire ^^ ?

      Après si je peux te mener sur une piste, je dirai de check dans un event tické, et côté client (ClientTickEvent irait à merveille) quel est le container actuellement ouvert par le joueur, et à condition qu’il ne soit pas null (Minecraft.getMinecraft ().thePlayer.openContainer, je crois), et qu’il instanceof InventoryPlayer. Si toutes ces conditions sont réunies, alors tu peux ouvrir ton nouveau inventaire par-dessus le vanilla.
      Est-ce claire ? Si oui, c’est cool, si non continue tes recherches, sur le fofo, cette question a déjà été postée plusieurs fois. Et si tu n’y arrives toujours pas, reviens nous voir 😉

      EDIT = J’avais presque oublié mais n’oublie pas de renseigner la balise de version.

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

        @‘Plaigon’:

        Salut,
        pense à changer la balise sur ton topic précédent si il est selon toi, résolu.

        Ensuite une petite remarque, si tu viens poster dans support pour les moddeurs, c’est dans le but que plusieurs membres viennent t’aider afin de trouver et poster la solution. Donc par ailleurs, il est inutile de demander de l’aide par MP, car cela ne ferait ni profiter la future communauté de MFF (j’entends par là les futurs moddeurs butant sur le même problème que toi), à moins que tu postes dans un message clair et détaillé la solution, et cela ne permettrait pas aux autres helpers de pouvoir interagir si on avait décidé de commencer à résoudre ce problème sur une discussion skype. Comprends-tu ce que je veux dire ^^ ?

        Après si je peux te mener sur une piste, je dirai de check dans un event tické, et côté client (ClientTickEvent irait à merveille) quel est le container actuellement ouvert par le joueur, et à condition qu’il ne soit pas null (Minecraft.getMinecraft ().thePlayer.openContainer, je crois), et qu’il instanceof InventoryPlayer. Si toutes ces conditions sont réunies, alors tu peux ouvrir ton nouveau inventaire par-dessus le vanilla.
        Est-ce claire ? Si oui, c’est cool, si non continue tes recherches, sur le fofo, cette question a déjà été postée plusieurs fois. Et si tu n’y arrives toujours pas, reviens nous voir 😉

        Mon topic précédent n’est pas encore résolu (aucun moddeur ne m’a contacté c’est pour ça aussi que je me suis lancé dans le Java).

        Je suis d’accord avec ta deuxième partie mais je parlait du privé pour montrer les sources du mod prêté (je me vois pas afficher ici tout ca alors que je ne sait pas de quoi les helpeurs vont avoir besoin). Après effectivement le but est que tout le monde en profite.

        Je vais aller check ces events tickés en espérant que ce soit fructueux, et justement j’ai fait une recherche sur le Forum sans succès c’est pour ça que je suis ici.

        Merci de ta réponse, j’actualiserai le post !

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

          Je parlais de ton topic traitant du problème suivant : “Texture armure inchangée”

          1 seule recherche google, t’as pas dû saisir les bons mots-clés….
          https://www.minecraftforgefrance.fr/showthread.php?tid=2864
          Oups…celui n’était pas terrible en fait :x
          https://www.minecraftforgefrance.fr/showthread.php?tid=3070

          1 réponse Dernière réponse Répondre Citer 1
          • DCEDOD Hors-ligne
            DCEDO
            dernière édition par

            @‘Plaigon’:

            Je parlais de ton topic traitant du problème suivant : “Texture armure inchangée”

            1 seule recherche google, t’as pas dû saisir les bons mots-clés….
            https://www.minecraftforgefrance.fr/showthread.php?tid=2864

            J’ai toujours le problème mais j’approfondirai plus tard, c’est plus une prio je vais le mettre en résolu en attendant.

            Je vais regarder le post, merci

            EDIT : En fait il y a plusieurs parties, le container, le gui en lui même, l’appel pour déclencher ce GUI, mais comme je dois reprendre des codes existants je sais pas trop par ou commencer.

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

              J’ai eu le temps de pas mal chercher du coup, et je me suis rendu compte qu’il y avait plus de travail que ce que je pensais. Du coup je pense qu’il faudrait commencer par le commencement, quelles classes sont à créé pour créer une inventaire basique sur lequel on peut ajouter des slots d’amure ?

              Pour ceux qui auraient le même soucis que moi je vais faire ça sous forme de liste que vous m’aiderez, je l’espère, à compléter.

              Ce que je vais dire ci-dessous est probablement faux, je le corrigerai avec votre aide.

              1. Inventory : la classe de base qui relie les divers autres classes.
              2. GuiInventory : permet de définir l’interface de l’inventaire, elle est la forme.
              3. Container : rend utilisable les slots d’inventaires du joueur, c’est le fond.
              4. KeyHandler : événement qui fait que lorsqu’on appui sur une touche, l’inventaire s’ouvre.
                ? 5) Packets : transit des actions effectuées dans l’inventaire (je ne suis pas sûr).
              5. ? A vous de me le dire !

              Du coup, ces cinq points suffisent-ils à faire ce que je veux ? Que faut-il ajouter ? Et une fois que je connaîtrai chacune des classes à créer je pourrais me documenter précisément.

              EDIT : Du coup, j’ai encore avancé mais je suis pas sûr. J’ai pris comme exemple “InventoryBasic” dans .net.minecraft.inventory/InventoryBasic est ce que celui-ci correspond à ce que je cherche ?

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

                Tiens voici un lien qui devrait t’aider (je parle surtout du github)

                Je récupère mon PC ce soir, je pourrai donc t’aider en détail !

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

                  Du coup, j’ai réussi à “recréer” InventoryBasic seulement comment l’ouvrir ou qu’est ce qui lui manque ? Voici mon code entier :

                  :::

                  package fr.shyfe.dcedo.common;
                  
                  import java.util.ArrayList;
                  import java.util.List;
                  
                  import net.minecraft.entity.player.EntityPlayer;
                  import net.minecraft.inventory.IInvBasic;
                  import net.minecraft.inventory.IInventory;
                  import net.minecraft.item.ItemStack;
                  
                  public class DCEDOInventory implements IInventory
                  {
                     //Title
                     private String DCEDOInventory;
                     //Nombre de slot
                     private int slotsCount;
                     //Contenu de l'inventaire
                     private ItemStack[] inventoryContents;
                     //?
                     private List list;
                     //Inventaire nommé ou non
                     private boolean inventoryNamed;
                     //?
                     //private static final String = "Inconnu";
                  
                     public DCEDOInventory(String Title,boolean Named, int slotsCount)
                     {
                         this.DCEDOInventory = Title;
                         this.inventoryNamed = Named;
                         this.slotsCount = slotsCount;
                         this.inventoryContents = new ItemStack[slotsCount];
                     }
                  
                     public void onInventoryChanged(IInvBasic p_110134_1_)
                     {
                         if (this.list == null)
                         {
                             this.list = new ArrayList();
                         }
                  
                         this.list.add(p_110134_1_);
                     }
                  
                     public ItemStack getStackInSlot(int i)
                     {
                         return i >= 0 && i < this.inventoryContents.length ? this.inventoryContents* : null;
                     }
                  
                     public ItemStack decrStackSize(int invSlot1, int invSlot2)
                     {
                         if (this.inventoryContents[invSlot1] != null)
                         {
                             ItemStack itemstack;
                  
                             if (this.inventoryContents[invSlot1].stackSize <= invSlot2)
                             {
                                 itemstack = this.inventoryContents[invSlot1];
                                 this.inventoryContents[invSlot1] = null;
                                 this.markDirty();
                                 return itemstack;
                             }
                             else
                             {
                                 itemstack = this.inventoryContents[invSlot1].splitStack(invSlot2);
                  
                                 if (this.inventoryContents[invSlot1].stackSize == 0)
                                 {
                                     this.inventoryContents[invSlot1] = null;
                                 }
                  
                                 this.markDirty();
                                 return itemstack;
                             }
                         }
                         else
                         {
                             return null;
                         }
                     }
                  
                     public ItemStack getStackInSlotOnClosing(int closeDrop)
                     {
                         if (this.inventoryContents[closeDrop] != null)
                         {
                             ItemStack itemstack = this.inventoryContents[closeDrop];
                             this.inventoryContents[closeDrop] = null;
                             return itemstack;
                         }
                         else
                         {
                             return null;
                         }
                     }
                  
                     public void setInventorySlotContents(int numberItems, ItemStack ItemGiven)
                     {
                         this.inventoryContents[numberItems] = ItemGiven;
                  
                         if (ItemGiven != null && ItemGiven.stackSize > this.getInventoryStackLimit())
                         {
                             ItemGiven.stackSize = this.getInventoryStackLimit();
                         }
                  
                         this.markDirty();
                     }
                  
                     public int getSizeInventory()
                     {
                         return this.slotsCount;
                     }
                  
                     public String getInventoryName()
                     {
                         return this.DCEDOInventory;
                     }
                  
                     public boolean hasCustomInventoryName()
                     {
                         return this.inventoryNamed;
                     }
                  
                     public void func_110133_a(String name)
                     {
                         this.inventoryNamed = true;
                         this.DCEDOInventory = name;
                     }
                  
                     public int getInventoryStackLimit()
                     {
                         return 64;
                     }
                  
                     public void markDirty()
                     {
                         if (this.list != null)
                         {
                             for (int i = 0; i < this.list.size(); ++i)
                             {
                                 ((IInvBasic)this.list.get(i)).onInventoryChanged(null);
                             }
                         }
                     }
                  
                     public boolean isUseableByPlayer(EntityPlayer player)
                     {
                         return true;
                     }
                  
                     public void openInventory() {}
                  
                     public void closeInventory() {}
                  
                     public boolean isItemValidForSlot(int sizeItem, ItemStack item)
                     {
                         return true;
                     }
                  }
                  
                  

                  :::

                  Je dois créer un raccourci pour l’ouvrir ? Je dois ajouter le système de slot ? Je suis perdu la.

                  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

                    La classe GuiInventory est la partie client du gui, c’est elle qui défini tout ce qui est visuel. Comme la classe hérite de GuiContainer, elle doit être lié a un container et s’occupe automatiquement d’afficher les slots si on passe la souris dessus.

                    La classe du container et commune au client et au serveur. C’est elle qui défini l’emplacement des slots et gère le transferts entre les slots. Il y a dernière des paquets pour gérer la synchro, mais c’est déjà géré par le code existant, rien à faire de ce côté.

                    Le classe d’inventaire implémente l’interface IInventory qui défini comment interagir avec ce dernier. Celle classe contient aussi en général le tableau d’itemstack qui correspond au item se trouvant dans l’inventaire. Ce tableau d’item stack est sauvegarder dans le tag NBT du joueur. Pour sauvegarder des slots supplémentaire tu aura besoin d’un Extended Entity Properties

                    Comme tu veux remplacer un container/gui existant tu vas aussi d’avoir besoin d’événements pour détecter quand remplacer ce dernier (ou alors utiliser une nouvelle touche avec un second inventaire en gardant le premier, ou en empêchant de l’ouvrir).
                    Il faut aussi gérer le ramassage d’item et le drop des derniers lors de la mort (à nouveau, via des événements).

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

                      Waw, merci donc si je résume :

                      Je créé une classe GuiInventory similaire à celle de minecraft, une classe container qui gérera le contenu de l’inventaire et une classe Inventaire basée sur IInventory ?

                      Pour l’ouverture, une nouvelle touche + un blocage de l’ancien inventaire seront parfaits.

                      Je me pose quand même la question de l’utilité de ce que je viens de faire du coup ? Enfin l’utilité de “InventoryBasic”

                      EDIT : J’ai suivi le tutoriel que tu m’as envoyé (Plaigon) et merci mais … J’ai des erreurs et arrivé à l’étape 4.1 ou l’auteur n’explique plus vraiment ça devient très complexe. Je suis de nouveau bloqué …  😕


                      Du coup j’ai réussi à résoudre quelques erreurs mais je suis bloqué sur une partie de ma classe InventoryCustom qui reprend les propriétés de l’inventaire.

                      public void readFromNBT(NBTTagCompound compound)
                         {
                             NBTBase items = compound.getTag(tagName);
                      
                             for (int i = 0; i < items.tagCount(); ++i)
                             {
                                 NBTTagCompound item = (NBTTagCompound) items.tagAt(i);
                                 byte slot = item.getByte("Slot");
                      
                                 if (slot >= 0 && slot < getSizeInventory()) {
                                     inventory[slot] = ItemStack.loadItemStackFromNBT(item);
                                 }
                             }
                         }
                      

                      J’ai deux erreurs : la première pour tagCount() et la seconde pour tagAt, les erreurs sont “The method tagCount() is undefined for the type NBTBase” et “The method tagAt(int) is undefined for the type NBTBase”, je ne comprend vraiment pas d’ou ça peut venir.

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

                        Car tu dois avoir un NBTList au lieu d’un NBTBase, donc tu dois faire compound.getTagList(tagName, 10)

                        Site web contenant mes scripts : http://SCAREXgaming.github.io

                        Pas de demandes de support par MP ni par skype SVP.
                        Je n'accepte sur skype que l…

                        1 réponse Dernière réponse Répondre Citer 1
                        • DCEDOD Hors-ligne
                          DCEDO
                          dernière édition par

                          J’arrive à quelque chose comme ça du tout mais ca me semble faux :

                          public void readFromNBT(NBTTagCompound compound)
                             {
                                 NBTTagList items = compound.getTagList(tagName, 10);
                          
                                 for (int i = 0; i < items.tagCount(); ++i)
                                 {
                                     NBTTagCompound item = (NBTTagCompound) items.getCompoundTagAt(i);
                                     byte slot = item.getByte("Slot");
                          
                                     if (slot >= 0 && slot < getSizeInventory()) {
                                         inventory[slot] = ItemStack.loadItemStackFromNBT(item);
                                     }
                                 }
                             }
                          

                          Je n’ai plus l’erreur au tagCount, même si eclipse me dit qu’elle n’est pas utilisée, je vois pas trop ce que j’ai loupé

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

                            Qu’est-ce qui n’est pas utilisé ?

                            Site web contenant mes scripts : http://SCAREXgaming.github.io

                            Pas de demandes de support par MP ni par skype SVP.
                            Je n'accepte sur skype que l…

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

                              Trop de choses que je comprend pas dans le tutoriel que j’ai suivi, de plus il est en 1.6.4, je reprend tout et je ferais une liste de ce qui me bloque ou ce que je comprend pas…

                              Et c’était tagCount qui n’était pas utilisé

                              Ok du coup je reprend tout à partir des classes de bases et en m’aidant d’un mod existant mais quelqu’un sait ou je peux trouver des exemples sans les func_16424_d (exemple), car je ne sait pas trop quoi mettre dans ma fonction “markDirty()”

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

                                hein ? Tu as copié des mods avec des noms obfusqués ?

                                Site web contenant mes scripts : http://SCAREXgaming.github.io

                                Pas de demandes de support par MP ni par skype SVP.
                                Je n'accepte sur skype que l…

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

                                  Bah j’ai demandé a un mec le mod qu’il utilisait sur son ancien serveur pour voir à quoi il ressemblait et il me l’a filé mais sous forme de mod, du coup il m’a conseillé d’utiliser jd-gui pour le lire.

                                  EDIT : Je cherche donc toujours une fonction de base markDirty() que je pourrais modifier pour qu’elle corresponde à ce que je cherche et je n’ai toujours pas trouvé de solution pour le “tagAt” :

                                  public void readFromNBT(NBTTagCompound compound)
                                     {
                                       NBTTagList items = compound.func_150295_c("CustomInvTag", compound.tagAt());
                                       for (int i = 0; i < items.tagCount(); i++)
                                       {
                                         NBTTagCompound item = items.tagAt(i);
                                         byte slot = item.getByte("Slot");
                                         if ((slot >= 0) && (slot < getSizeInventory ())) {
                                           this.inventory[slot] = ItemStack.loadItemStackFromNBT(item);
                                         }
                                       }
                                     }
                                  

                                  L’erreur : The method tagAt() is undefined for the type NBTTagCompound

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

                                    Pour retrouver les bons noms, tu peux utiliser BON2 (disponible sur github).

                                    Regarde plutôt les tutoriels disponibles sur le forum pour ce genre de choses car ils sont mieux faits ici

                                    Site web contenant mes scripts : http://SCAREXgaming.github.io

                                    Pas de demandes de support par MP ni par skype SVP.
                                    Je n'accepte sur skype que l…

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

                                      @‘SCAREX’:

                                      Pour retrouver les bons noms, tu peux utiliser BON2 (disponible sur github).

                                      Regarde plutôt les tutoriels disponibles sur le forum pour ce genre de choses car ils sont mieux faits ici

                                      Je vais voir ça, je n’ai pas trouvé de tutoriel pour ça mais je vais re-chercher

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

                                        https://www.minecraftforgefrance.fr/showthread.php?tid=2082
                                        https://www.minecraftforgefrance.fr/showthread.php?tid=2017

                                        Site web contenant mes scripts : http://SCAREXgaming.github.io

                                        Pas de demandes de support par MP ni par skype SVP.
                                        Je n'accepte sur skype que l…

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

                                          @‘SCAREX’:

                                          https://www.minecraftforgefrance.fr/showthread.php?tid=2082
                                          https://www.minecraftforgefrance.fr/showthread.php?tid=2017

                                          Ah oui je les avaient vus mais ils correspondent pas vraiment à ce que je veux.

                                          Sinon entre temps j’ai repris tout le code qu’on m’avait donné grâce à BON2 en le modifiant à ma sauve mais j’ai des erreurs au lancement que je comprend pas trop, si quelqu’un veut bien se dévouer pour me les “traduire”, ce serait super gentil.

                                          http://pastebin.com/5r9iVABN     (sous pastebin car c’est long)

                                          J’ai vu que ca avait l’air de planter avec les ChannelPipeline (un doublon ? je n’en ai pas vu) voici donc le code de PacketPipeline : http://pastebin.com/4FySm6x7

                                          Je ne sait pas si cela peut aider mais j’ai aussi AbstractPacket pour les Packets donc voici son code (d’ailleurs, dans Eclipse dans mon Package Explorer, à gauche j’ai un petit A en haut à droite de la feuille de code) 
                                          http://pastebin.com/E8cZ6Weg

                                          Merci d’avance !

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

                                            Quelle est la version de minecraft d’où vient ce code ?

                                            Site web contenant mes scripts : http://SCAREXgaming.github.io

                                            Pas de demandes de support par MP ni par skype SVP.
                                            Je n'accepte sur skype que l…

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

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB