[Inventaire personnalisé] Par ou commencer
-
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.
-
Car tu dois avoir un NBTList au lieu d’un NBTBase, donc tu dois faire compound.getTagList(tagName, 10)
-
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é
-
Qu’est-ce qui n’est pas utilisé ?
-
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()”
-
hein ? Tu as copié des mods avec des noms obfusqués ?
-
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
-
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
-
@‘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
-
-
@‘SCAREX’:
https://www.minecraftforgefrance.fr/showthread.php?tid=2082
https://www.minecraftforgefrance.fr/showthread.php?tid=2017Ah 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/E8cZ6WegMerci d’avance !
-
Quelle est la version de minecraft d’où vient ce code ?
-
@‘SCAREX’:
Quelle est la version de minecraft d’où vient ce code ?
1.7.10
-
Essaie avec cette méthode pour les paquets : https://www.minecraftforgefrance.fr/showthread.php?tid=1118
-
@‘SCAREX’:
Essaie avec cette méthode pour les paquets : https://www.minecraftforgefrance.fr/showthread.php?tid=1118
Mais du coup pourquoi tout refaire ? Peut etre que c’est juste un petit truc qui bloque quoi
Edit : j’ai trouvé les deux lignes qui posent problème :
Dans ma classe qui principale de l’inventaire :
@Mod.EventHandler public void init(FMLInitializationEvent event) { proxy.registerRender(); PacketPipeline.initialise(); MinecraftForge.EVENT_BUS.register(new DCEDOEventHandler()); FMLCommonHandler.instance().bus().register(new DCEDOEventHandler()); NetworkRegistry.INSTANCE.registerGuiHandler(this, new DCEDOCommonProxy()); } la ligne : PacketPipeline.initialise();Dans ma classe PacketPipeline :
public void initialise() { this.channels = NetworkRegistry.INSTANCE.newChannel("DCEDOInventory", new ChannelHandler[] { this }); registerPackets(); } la ligne : this.channels = NetworkRegistry.INSTANCE.newChannel("DCEDOInventory", new ChannelHandler[] { this });Je sais que c’est elle qui posent problème car dans la console lors du crash est affiché :
at fr.shyfe.dcedo.common.PacketPipeline.initialise(PacketPipeline.java:94) ~[bin/:?]
at fr.shyfe.dcedo.common.DCEDOInventory.init(DCEDOInventory.java:38) ~[bin/:?]
Et ce sont les seuls qui viennent de moi.
-
Pourquoi tout refaire ?
Car ce système de paquet cause une fuite de mémoire.
Il est mal conçu. -
@‘robin4002’:
Pourquoi tout refaire ?
Car ce système de paquet cause une fuite de mémoire.
Il est mal conçu.Oui je vois, je vais essayer alors
-
J’ai plusieurs problèmes avec mon inventaire personnalisé:
-Quand on clique sur un items pour le déplacer, il est directement remis à sa place donc impossible de déplacer les items et si on fais clique molette et qu’on met un objet dans un autre slot et puis qu’on clique dessus, il disparait
-Quand j’arrive à mettre un item dans un de mes slots perso, quand je ferme l’inventaire il est droppéMerci d’avance
