Résolu Minecraft et les threads
-
Bonsoir,
Je cherche un event qui est déclenché sur le client lorsqu’il rejoint le server et un autre quand il le quitte.
Pour ça, pas de problème, il y a par exemple : ClientConnectedToServerEvent et c’est ce que j’ai utilisé :@SubscribeEvent public void onClientJoin (ClientConnectedToServerEvent event){ ClientDatabase.onClientJoin (); }
Donc tout va bien… excepté le fait que cette méthode n’est pas appelée sur le Client thread mais sur le thread Netty Client IO. :troll: (nan sérieusement, j’ai vraiment l’impression que Minecraft me troll).
Mais du coup comment je fait pour appeler ClientDatabase.onClientJoin (); (ClientDatabase est un objet que j’ai créé) sur le Client thread ?Existe-t-il un event similaire mais qui est déclanché sur le Client thread ? (J’en doute vu que j’ai scruter avec espérance la liste des events.)
Puis-je appeler ClientDatabase.onClientJoin (); depuis le thread Netty Client IO sur le Client thread ? (Je ne pense pas que Java permette de faire ça.)
Puis-je envoyer un packet depuis le thread Netty Client IO sur le Client thread ? (Un packet client à client me parait bizarre et encore faudrait-il récupérer le EntityPlayerMP pour pouvoir l’envoyer.)Bref, je m’en remet à vous car là je ne vois aucune solution.
Ha, et au passage, c’est quoi le thread Netty Client IO ? À quoi il sert ? -
Salut, pour ce genre de problème, il faut utiliser les Tasks. Coté client ça donne ça :
Minecraft.getMinecraft().addScheduledTask(new Runnable() { @Override public void run() { ClientDatabase.onClientJoin (); } });
-
Ce qu’a donné LeBossMax2 est la solution, mais pourquoi tu ne peux pas appeler cette fonction à partir d’un autre thread que celui client ? J’ai pas compris X)
Sinon tous les thread netty servent à la réception et l’envoi des packets.
-
Il est globalement mieux de passer par le thread de mc plutôt que celui de netty pour faire les actions.
Il y a des situations où le faire dans le thread de netty cause des erreurs. -
Merci pour l’aide, ça fonctionne plutôt bien !