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.


  • Administrateurs

    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 !