-
J’ai une petite idée de comment faire. En gros ce qui se passe normalement, c’est que le container envoie à tous ces listeners le contenu de l’inventaire. Parmi ses listeners, il y a le joueur qui va envoyer le contenu du container par un Packet au client. Le client utilise alors la fonction PacketBuffer.readItemStackFromBuffer qui pose problème. Une solution possible est donc d’enlever le joueurs des listeners et de mettre ton propre listener à la place qui va envoyer un packet custom au client.
-
Ah ce serai une possibilité, mais en faisant cela j’aurais pas énormément de chose à refaire notamment sur la gestion des slots, des clicks etc… ?
-
Non, tu as juste à recoder un listener custom (qui fait juste envoyer des packets) et les packets qui font comme les packets originaux, donc tu peux sûrement ne pas recoder ça, mais juste appeler les fonctions que les packets originaux appellent.
-
D’accord merci, je verrais ça demain et je tiendrais ce post au courant
-
Ok alors j’ai réussi quelques trucs mais je sens que j’approche de la fin, cependant j’aurais besoin d’aide concernant la synchronisation du client au serveur.
Donc j’ai recoder 2-3 méthodes (notamment le openGui) et ainsi j’ai pu modifier certains packets.
Actuellement qu’est ce que j’ai fait ? :
openGui -> au lieu d’ajouter le entityPlayer en listener j’ai ajouté mon propre joueur implémentant IContainerListener et ainsi pouvoir accéder aux méthodes #sendAllContent, etc…
Depuis ces méthodes j’ai pu faire mes packets pour envoyer les données du contenu au client avec en prime la refonte du PacketBuffer pour augmenter la taille d’envoie des Items (donc jusqu’à la tout marche).Problème : Quand j’ouvre l’inventaire, je vois bien tous les items avec la bonne taille, cependant, quand je clique sur les Items supérieur à 127 de quantité, ils disparaissent et repop en cliquant et autre part, DE PLUS, j’ai beau changé les items de place, ils ne s’updatent pas, (donc surement un packet à envoyer au serveur mais cela risque de faire une faille et un ajout important d’item sur le serveur juste en hackant le client ?)
Du coup est-ce que j’ai mal saisit un truc que tu m’avais dit plus haut ou j’ai fait des choses inutiles que j’aurais pu éviter ? Et je ne vois pas comment update le serveur lors du changement de slot avec une faille de ce packet.
-
Je ne comprends ps ce que tu veux dire par “j’ai beau changé les items de place, ils ne s’updatent pas”.
Pour ce que tu as dit avant, ça doit juste être un problème de rendu, minecraft doit sûrement vérifier que la quantité d’item est normal avant de l’afficher sur la souris. -
En gros pour : “j’ai beau changé les items de place, ils ne s’updatent pas”, quand je souhaite les changer de slot, ça ne marche (suite à un manque de packet côté client surement) ils restent à leur place d’origine.
Concernant le rendu je vais vérifier cela, merci. -
Donc j’ai réussi à sauvegarder le nouvel emplacements des items avec le client et serveur (y’avait pas besoin de packet, c’est juste moi qui ai oublié de sauvegarder l’inventaire ahah)
Cependant j’ai toujours ce problème de disparation des items, voici un gif :
https://gyazo.com/e66d0aefa0dc74f5076be6d2c2681162
A la fin du gif bien évidemment quand je ferme l’inventaire, les items disparues réapparaissent et le changement de slot est effectif lui aussi.
Concernant le problème de rendu je n’ai rien trouvé dans la classe ItemRenderer ou encore dans le GuiContainer, cependant j’ai une petite idée, dans le drawScreen l’inventaire de minecraft est utilisé, je me dis donc que cette limite peut être prise en compte, sauf que celui-ci est limité à 64 et pas à 127, donc tous les items supérieur à 64 devrait disparaitre, non ? enfin bon je suis un peu confus moi même, il ne me reste plus que le render et j’ai tout bon x). Si vous avez une idée de quelle classe gère ça je prend. -
Ah, là le problème, c’est peut-être qu’il save les items et n’arrive pas à les load
-
Haaaan, ça expliquerait pourquoi quand je clique sur les items, il me fait comme un " reboot " de l’inventaire, du coup j’ai un problème dans le packet d’envoie ou juste dans le la lecture de l’inventaire/container ?
-
Plutôt un problème de saveToNBT et loadFromNBT de l’inventory (Enfin le nom des méthodes c’est probablement pas ça, mais tu vois ce que je veux dire)
-
Non j’ai essayé ça ne vient pas de là, tout est bon de ce côté :/, en revanche j’ai trouvé le " handleWindowClick " donc je pense que ça vient de là, car à un moment il renvoie du contenue et vu qu’il repasse par un packet ou y’a le byte je me dis que c’est ça. Donc je suis en train de refaire 2-3 packets ahahahah (tuez moi)
-
Bon j’ai enfin réussi ! Tout marche (enfin juste des problèmes style quand on double click pour tout ramener ou encore quand on split l’item en plusieurs slot)
Je te remercie beaucoup LeBossMax2 (Le problème venait bien qu’il manquait un packet pour confirmer la transaction, a moi à le sécuriser maintenant).
Merci beaucoup ahah!