Extended Entity Properties
-
Bonjour,
Je n’ai jamais eu de problèmes avec les Extended Entity Properties (aka EEP), mais bizarrement, ils ne fonctionnent plus. En fait, j’ai mis plein de sysout et ils m’indiquent que tout est chargé. Sauf que, les valeurs sont toutes à 0. Je me suis alors dit que c’était surement un problème de synchronisation, mais pourtant, les packets sont reçus (J’ai, d’ailleurs, un NPE sur le joueur). Ça fait quelques jours que je travaille là-dessus et que je n’arrive pas à le faire fonctionner.
Mes event handler: https://github.com/DiabolicaTrix/MinecraftLifeRPG/tree/master/src/main/java/me/diabolicatrix/events
Mes EEP (j’ai essayé de les séparer mais aucun résultat): https://github.com/DiabolicaTrix/MinecraftLifeRPG/tree/master/src/main/java/me/diabolicatrix/other
Mes Packets: https://github.com/DiabolicaTrix/MinecraftLifeRPG/tree/master/src/main/java/me/diabolicatrix/packets (ceux avec le tag EEP à la fin) -
Salut,
Utilises PlayerEvent.PlayerLoggedInEvent plutôt que EntityJoinWorldEvent pour envoyer les paquets. Ça évite le npe. -
Salut, je n’ai plus de NPE, par contre, quand je meurt, ce n’est toujours pas sauvegardé. Sauf que le packet de synchronisation est envoyé car j’ai les sysout dans la console.
[11:26:06] [Server thread/INFO] [STDOUT]: [me.diabolicatrix.packets.PacketPermEEP:toBytes:56]: License Packet Save
[11:26:06] [Netty Local Client IO #2/INFO] [STDOUT]: [me.diabolicatrix.packets.PacketPermEEP:fromBytes:42]: License Packet Load -
Plusieurs EEP c’est pas un super bonne idée. Tu peux mettre plusieurs variable dans le même EEP sans soucis.
Ajoute du debug au niveau des fonctions read et write NBT -
Le problème, c’est qu’ils ne sont pas sauvegardés de la même façon. Les licenses doivent être permanentes, le “side” doit être persistant après la mort mais pas à la déconnexion. Et éventutellement, la banque devra être permanente et l’argent perdu après la mort mais sauvergardé à la déconnexion. Donc je ne vois pas comment faire ça en un seul EEP.
-
Lorsque le joueur se déconnecte tu lui remet une valeur par défaut pour le side, pour l’argent qui doit être perdu à la mort du joueur tu utilise l’event LivingDeathEvent par exemple
-
J’y avais pensé entre temps, pour ça , ça va, mais ça ne sauvegarde toujours pas (j’ai refait un commit sur github)
EDIT: J’ai remarqué un truc: en supprimant le EntityJoinWorld, quand le joueur respawn, l’event n’est pas appelé. Je vais donc juste mettre un null check.
EDIT2: Après quelques tests, j’ai remarqué que les données sont bien sauvegardées à la connexion, mais pas à la mort.
EDIT3: Ça fait quelques heures que je travailles là-dessus et rien à faire, quand on respawn, ça reset.
EDIT4: Je viens de remarquer que le serveur a la bonne valuer mais rien à faire pour le client, il ne veut pas sync malgré les nombreux sync que j’ai fait.
-
J’avais eu un problème de non synchro d’ExtProp qui ressemble un peu au tient. Voici le
-
Donc, après avoir complètement recommencé, j’ai remarqué que quand j’appelle la méthode sync depuis un event, ça ne fonctionne pas. Par contre, quand je l’appelle depuis un bloc (onRightClick), ça synchronise bien avec le client.
PS: J’ai update mes codes sur github (mêmes liens)
-
http://www.minecraftforgefrance.fr/forge-events.php -> PlayerEvent.PlayerLoggedInEvent -> FMLCommonHandler.bus()
Enregistre ton CommonEventHandler avec FML aussi :FMLCommonHandler.instance().bus().register(new CommonEventHandler());
-
Il est en 1.8.9, donc plus besoin de se soucier de ça.
-
Ah, my bad alors
-
Donc, petite mise à jour, j’ai complètement supprimé et réécrit mon EEP. Le EEP est sauvegardé côté serveur seulement, pourtant, dans mon event player clone, je fais un sync et je vois dans la console qu’il est bien exécuté. J’ai donc utilisé mon itemDebug pour essayer de sync après le respawn et ça fonctionne, le problème est que je voudrais qu’il soit sync automatiquement…
-
T’as regardé le lien que je t’ai passé ? J’ai crée 2 handlers différents dans mon packet, qui est donc enregistré sur les 2 sides. Sa m’avait résolu le problème de synchro (le client ne connaissait pas la valeur de mon ExtProp alors que le serveur l’avait). Après je sais pas si t’as EXACTEMENT le même problème, et puis entre la 1.8.9 et la 1.7.10, y’a peut-être d’autres modifs à effectuer…
-
J’avais essayé les 2 handlers, mais ça n’avait rien changé. Je vais quand même réessayer avec mon nouveau code.
EDIT: J’ai essayé et ça n’a rien changé.
-
Je viens de remarquer que Extended Entity Properties est “deprecated” pour le nouveau système de “capabilities”. On peut donc mettre ce sujet dans sans suite.
Pour information, mon problème venait du fait que je ne faisait pas de scheduled task dans mon packet pour intéragir avec les objets de Minecraft. De plus, le sync doit être fait dans l’event PlayerRespawnEvent et non PlayerEvent.Clone.