Extended Entity Properties


  • Correcteurs

    Bonjour,

    J'ai commencé dans la shoutbox, mais j'ai décidé de créer un topic pour.

    Donc, j'ai créé une entité que est un pnj qui ouvre un menu, bref le problème est que en créant un EEP pour définir le menu à ouvrir, je me suis retrouvé avec la méthode sync() qui synchronise serveur+client. Jusque là ça va, mais sync() utilise un packet qui est envoyé au client pour synchroniser comme je l'ai dit mais on ne peut pas envoyer de packet à une entité omme un pnj et la même chose, la classe packet fait un ctx.getServerHandler().playerEntity pour récupérer le props donc ça ne fonctionne pas.

    Je me suis dit que logiquement le serveur récupère le props de l'entité et l'envoir au client du joueur mais le problème est qu'on ne peut pas envoyer un objet comme une entité dans un packet. Bref, je suis un peu mindfuck.

    Merci de votre aide! 😉



  • Ouh là. Alors plusieurs choses me semblent bizarres dans ce que tu dis. On peut très bien envoyer un packet à une entity. Ensuite la variable ctx.getServerHandler().playerEntity retourne un EntityPlayerMP, pas ton ExtendedEntityProperties. Logiquement si tu veux avoir une instance de ce dernier, tu as la méthode get(EntityPlayer p).
    Pour finir, tu peux sauvegarder une entity dans un packet en te servant par-exemple de son id. Ensuite je ne vois pas pourquoi tu as besoin d'un ExtendedEntityProperties dans ce cas là. Tu souhaites juste faire ouvrir un gui à un pnj, c'est ça ? Pourquoi t'embêter avec le NBTTagCompound du joueur ? Peut-être que j'ai mal compris après…


  • Administrateurs

    Tu cherches à faire quoi exactement ?


  • Correcteurs

    Je cherche en fait à faire des PNJs, mais pour pouvoir les customiser un peu, je dois avoir un minimum de configuration possible donc ce que j'essaye de faire c'est d'utiliser les EEP pour le nom de la texture, le gui à ouvrir, etc. Le seul problème c'est que ce ne sont pas des joueurs et on ne peut pas envoyer de paquet à une entity, j'avais essayer avant de post.

    @Julot10085 Je sais que pour avoir l'instance d'un EEP il faut faire un get(entity) mais je ne peux pas le faire si je n'ai pas l'instance de l'entité. Sinon, je pourrais me servir de l'id. Pour l'envoie de Packet à une entité, c'est possible si l'entité est un joueur, seulement, dans mon cas l'entité n'est pas nécessairement un joueur. De toutes façon evoyer un packet à une entité serait complètement inutile car le but d'un packet est d'envoyer des données Client/Serveur et inversement donc un joueur est un client, oui mais pas une entité.

    EDIT: J'ai fait beaucoup de tests mais rien de concluant, je poste mes code demain.


  • Administrateurs

    Utilises des data watcher. C'est fait pour ça.
    L'EEP n'a pas du tout besoin d'être utilisé dans ce cas.



  • Qu'est ce que tu dis par "on ne peut pas envoyer de packet à une entity ?"
    Tu peux très bien envoyer un packet à une entity, dans une de ses méthodes. On peut envoyer n'importe quand et n'importe comment des packets à une entity…


  • Administrateurs

    @'Julot10085':

    Qu'est ce que tu dis par "on ne peut pas envoyer de packet à une entity ?"
    Tu peux très bien envoyer un packet à une entity, dans une de ses méthodes. On peut envoyer n'importe quand et n'importe comment des packets à une entity…

    Heu ??? Non.
    Un paquet c'est quelque chose qui va d'un client à un serveur ou l'inverse.



  • @'robin4002':

    @'Julot10085':

    Qu'est ce que tu dis par "on ne peut pas envoyer de packet à une entity ?"
    Tu peux très bien envoyer un packet à une entity, dans une de ses méthodes. On peut envoyer n'importe quand et n'importe comment des packets à une entity…

    Heu ??? Non.
    Un paquet c'est quelque chose qui va d'un client à un serveur ou l'inverse.

    Ah oui je comprends mieux. Je croyais qu'il disait qu'il ne pouvait pas envoyer de packet depuis une classe d'Entity
    Enfin bref…
    Au passage DiabolicaTrix, un p'tit tuto si tu en as besoin sur les Datawatcher =)
    http://www.minecraftforge.net/wiki/Datawatcher


  • Correcteurs

    Ah merci je connaissais pas les datawatcher.

    J'ai essayé et quand je ferme le serveur (mon monde) et que je reviens, rien n'est sauvegardé même pas sur le serveur.



  • Les data watchers ne sont pas enregistrés il me semble, il faut passer par les nbt après


  • Correcteurs

    Ah les nbt… Honnêtement je ne comprend pas vraiment le nbt donc je vais chercher un tuto.

    EDIT: J'ai même pas eu besoin d'un tuto, ça fonctionne! Merci pour votre aide!



  • Il me semblait que les Datawatcher étaient enregistrés…


  • Correcteurs

    Non, mais c'est très simple à enregistré, 3 lignes.