Obtenir les informations d'un serveur



  • Bonjour à tous !

    Je viens vers vous aujourd'hui car j'ai un petit problème.
    J'ai suivie tout le tutoriel concernant la personnalisation du menu principal, qui est au passage excellent 🙂

    Toutefois, je n'arrive pas à obtenir les informations de mon serveur : ni motd, ni nombre de joueurs, ...
    J'ai pourtant même été copier-coller le code de Minecraft Vanilla, passé des heures à comprendre quelle fonction fait quoi mais en vain.

    Voici donc la fonction qui rafraîchi les informations serveur (avec ses variables les plus importantes) :

    private static final ThreadPoolExecutor EXECUTOR = new ScheduledThreadPoolExecutor(5, (new ThreadFactoryBuilder()).setNameFormat("Server Pinger #%d").setDaemon(true).build());
    private ServerData dcserver = new ServerData("Dofuscraft", "xxx.xxx.xxx.xxx:xxxxx", false); // IP et port masqué pour le forum
    
        private void pingServer()
        {
            // Display Dofuscraft server information
            if (!this.dcserver.pinged)
            {
                this.dcserver.pinged = true;
                this.dcserver.pingToServer = -2L;
                this.dcserver.serverMOTD = "";
                this.dcserver.populationInfo = "";
                EXECUTOR.submit(new Runnable()
                {
                    public void run()
                    {
                        try
                        {
                            GuiDofusCraftMainMenu.this.serverPinger.ping(GuiDofusCraftMainMenu.this.dcserver);
                        }
                        catch (UnknownHostException var2)
                        {
                            GuiDofusCraftMainMenu.this.dcserver.pingToServer = -1L;
                            GuiDofusCraftMainMenu.this.dcserver.serverMOTD = TextFormatting.DARK_RED + I18n.format("multiplayer.status.cannot_resolve");
                        }
                        catch (Exception var3)
                        {
                            GuiDofusCraftMainMenu.this.dcserver.pingToServer = -1L;
                            GuiDofusCraftMainMenu.this.dcserver.serverMOTD = TextFormatting.DARK_RED + I18n.format("multiplayer.status.cannot_connect");
                        }
                    }
                });
            }
        }
    

    Je précise que les informations s'affiche bien, ce n'est pas un oublie d'affichage.
    Car le plus étrange c’est que si je met l'IP d'un serveur de mini-jeux connu, ça fonctionne !
    Je me suis dit que c’est un problème de port/IP mais pourquoi alors dans le menu multijoueur Vanilla ça fonctionne et pas sur mon menu principal ? Étrange non ?

    Merci d'avance de votre aide !


  • Administrateurs



  • Je l'ai effectivement bien lu, c'est ça le soucis c'est que ça ne fonctionne pas même en mettant le même code 😞


  • Administrateurs

    Il doit avoir un problème avec l'adresse que tu as mis alors ...



  • Certainement mais pourquoi le GUIMultiplayer de base affiche tout correctement ?
    J'ai vu que si j'allais sur le GUIMultiplayer et que je revenais sur le menu principal, cela fonctionnais, même en actualisant.
    J'en ai donc déduis que le GUIMultiplayer fait quelque chose en plus qui fait que ça fonctionne, mais quoi...


  • Administrateurs

    Hum là je ne serai pas dire 😕



  • Bon bah je vais continuer à chercher de mon côté, mais si quelqu'un à une idée je prend 🙂



  • Après des heures de recherches et de tests, j'ai trouvé une alternative !

    En effet, plutôt que de passer par la voie habituelle, je passe par la Query du serveur. Bien sûr pour que cela fonctionne il faut que le serveur est cette fonctionnalité d'activée ainsi que le port correctement configuré !

    Je vous met le lien de la classe ainsi que la doc qui permet de le faire simplement (y a pas mal d'autres langage possible comme le php et le javascript si ça peut intéresser) :
    https://github.com/ldilley/minestat

    Je passe en résolu, et peut-être que ça servira à d'autres 🙂

    Jerem'


Log in to reply