Récupéré le nombre de joueurs sur un serveur



  • Bonjours/Bonjoirs, je viens ici car je ne trouve pas comment faire pour affiché le nombre de joueurs sur la abrre de connection pour mon serveur voici le code utilisé :

    
    //FrenchAltis
    ServerData s = new ServerData("GloryCraft", "****:****");
    
    //Color c = new Color(150,150,255);
    
    //FMLClientHandler.instance().beginServerLoading(s.);
    this.buttonList.add(new GuiButton(33, this.width / 2 - 100, i, 200, 20, "GloryCraft (" + s.field_147412_i + ")" /* EnumChatFormatting.AQUA +"F" + EnumChatFormatting.BLACK + "r" + EnumChatFormatting.BLUE + "e" + EnumChatFormatting.BOLD + "n" + EnumChatFormatting.DARK_AQUA + "c" + EnumChatFormatting.DARK_BLUE + "h" + EnumChatFormatting.DARK_GRAY + "Altis"*/));
    
    

    Merci de votre généreuse aide.


  • Administrateurs

    serverData.populationInfo.
    Seulement cette valeur ne vaut rien par défaut, il faut envoyer un ping au serveur pour qu'elle prenne une valeur
    Regardes la classe ServerListEntryNormal.



  • Bonjours, j'ai suivit vos conseil et j'ai ajouté sa :

               ServerData s = new ServerData("GloryCraft", "****:****");
               GuiMultiplayer m = new GuiMultiplayer(this.mc.currentScreen);
    
               OldServerPinger o = new OldServerPinger();
               try {
    m.func_146789_i().func_147224_a(s);
    o.func_147224_a(s);
    } catch (UnknownHostException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    

    Sauf que sa me return toujours null, ou me suis-je trompée? Ou alors je n'est pas bien suivi le code de votre class?


  • Administrateurs

    Pourquoi tu as que des func_xxxx ?
    Chez moi la fonction s'appelle ping au lieu de func_147224_a.
    Mais sinon ça me semble bon, c'est étrange.



  • Quand je vais voir la class en question, au lieux de ping (que j'ai vue dans la version 1.8) j'ai cette fonction j'ai oublié de vous précié que j'était en 1.7.10 désoler, c'est un détail important je pense.



  • Bonjours, je me permet de faire un petit up car je n'est toujours pas trouvée la solutions qqn puorrait il m'aidé?



  • Comme a dit robin je te conseille de regarder comment Minecraft arrive à prendre cette donnée sur le menu multijoueur sinon fais un packet qui demande le nombre de joueurs sur le serveur c'est pas compliqué 😉


  • Administrateurs

    Normalement

    OldServerPinger pinger = new OldServerPinger();
    pinger.func_147224_a(s);
    

    Mit dans un thread à part devrait être suffisant comme c'est la fonction func_147224_a qui s'occupe de tout.
    Tu peux envoyer ton code complet ?



  • Voici mon code : (je pense que l'erreur veins du Thread, vue que je les directement inséré avant que le bouton de connecté soit crée)

    package com.example.examplemod;
    
    import java.awt.Desktop;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.URI;
    import java.net.UnknownHostException;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.List;
    import java.util.Random;
    
    import net.minecraft.client.Minecraft;
    import net.minecraft.client.gui.GuiButton;
    import net.minecraft.client.gui.GuiButtonLanguage;
    import net.minecraft.client.gui.GuiConfirmOpenLink;
    import net.minecraft.client.gui.GuiLanguage;
    import net.minecraft.client.gui.GuiMultiplayer;
    import net.minecraft.client.gui.GuiOptions;
    import net.minecraft.client.gui.GuiScreen;
    import net.minecraft.client.gui.GuiSelectWorld;
    import net.minecraft.client.gui.GuiYesNo;
    import net.minecraft.client.gui.GuiYesNoCallback;
    import net.minecraft.client.multiplayer.ServerData;
    import net.minecraft.client.network.OldServerPinger;
    import net.minecraft.client.renderer.OpenGlHelper;
    import net.minecraft.client.renderer.Tessellator;
    import net.minecraft.client.renderer.WorldRenderer;
    import net.minecraft.client.renderer.texture.DynamicTexture;
    import net.minecraft.client.resources.I18n;
    import net.minecraft.util.EnumChatFormatting;
    import net.minecraft.util.MathHelper;
    import net.minecraft.util.ResourceLocation;
    import net.minecraft.world.demo.DemoWorldServer;
    import net.minecraft.world.storage.ISaveFormat;
    import net.minecraft.world.storage.WorldInfo;
    import net.minecraftforge.fml.client.FMLClientHandler;
    import net.minecraftforge.fml.client.GuiModList;
    import net.minecraftforge.fml.common.FMLCommonHandler;
    import net.minecraftforge.fml.relauncher.Side;
    import net.minecraftforge.fml.relauncher.SideOnly;
    
    import org.apache.commons.io.Charsets;
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    import org.lwjgl.opengl.GL11;
    import org.lwjgl.opengl.GLContext;
    import org.lwjgl.util.glu.Project;
    
    import com.google.common.base.Strings;
    import com.google.common.collect.Lists;
    
    @SideOnly(Side.CLIENT)
    public class CustomMainMenu extends GuiScreen implements GuiYesNoCallback
    {
       private static final Logger logger = LogManager.getLogger();
       /** The RNG used by the Main Menu Screen. */
       private static final Random rand = new Random();
       /** Counts the number of screen updates. */
       private float updateCounter;
       /** The splash message. */
       private String splashText;
       private GuiButton buttonResetDemo;
       /** Timer used to rotate the panorama, increases every tick. */
       private int panoramaTimer;
       /**
        * Texture allocated for the current viewport of the main menu's panorama background.
        */
       private DynamicTexture viewportTexture;
       private final Object field_104025_t = new Object();
       private String field_92025_p;
       private String field_146972_A;
       private String field_104024_v;
       private static final ResourceLocation splashTexts = new ResourceLocation("texts/splashes.txt");
       private static final ResourceLocation minecraftTitleTextures = new ResourceLocation("textures/gui/title/minecraft.png");
       /** An array of all the paths to the panorama pictures. */
       private static final ResourceLocation titlePanoramaPaths = new ResourceLocation("guicustom","textures/b.png");  public static final String field_96138_a = "Please click " + EnumChatFormatting.UNDERLINE + "here" + EnumChatFormatting.RESET + " for more information.";
       private int field_92024_r;
       private int field_92023_s;
       private int field_92022_t;
       private int field_92021_u;
       private int field_92020_v;
       private int field_92019_w;
       private ResourceLocation field_110351_G;
       private static final String __OBFID = "CL_00001154";
    
       public CustomMainMenu()
       {
           this.field_146972_A = field_96138_a;
           this.splashText = "missingno";
           BufferedReader bufferedreader = null;
    
           try
           {
               ArrayList arraylist = new ArrayList();
               bufferedreader = new BufferedReader(new InputStreamReader(Minecraft.getMinecraft().getResourceManager().getResource(splashTexts).getInputStream(), Charsets.UTF_8));
               String s;
    
               while((s = bufferedreader.readLine()) != null)
               {
                   s = s.trim();
    
                   if(!s.isEmpty())
                   {
                       arraylist.add(s);
                   }
               }
    
               if(!arraylist.isEmpty())
               {
                   do
                   {
                       this.splashText = (String)arraylist.get(rand.nextInt(arraylist.size()));
                   }
                   while(this.splashText.hashCode() == 125780783);
               }
           }
           catch(IOException ioexception1)
           {
               ;
           }
           finally
           {
               if(bufferedreader != null)
               {
                   try
                   {
                       bufferedreader.close();
                   }
                   catch(IOException ioexception)
                   {
                       ;
                   }
               }
           }
    
           this.updateCounter = rand.nextFloat();
           this.field_92025_p = "";
    
           if(!GLContext.getCapabilities().OpenGL20 && !OpenGlHelper.areShadersSupported())
           {
               this.field_92025_p = I18n.format("title.oldgl1", new Object[0]);
               this.field_146972_A = I18n.format("title.oldgl2", new Object[0]);
               this.field_104024_v = "https://help.mojang.com/customer/portal/articles/325948?ref=game";
           }
       }
    
       /**
        * Called from the main game loop to update the screen.
        */
       public void updateScreen()
       {
           ++this.panoramaTimer;
       }
    
       /**
        * Returns true if this GUI should pause the game when it is displayed in single-player
        */
       public boolean doesGuiPauseGame()
       {
           return false;
       }
    
       /**
        * Fired when a key is typed. This is the equivalent of KeyListener.keyTyped(KeyEvent e).
        */
       protected void keyTyped(char p_73869_1_, int p_73869_2_)
       {}
    
       /**
        * Adds the buttons (and other controls) to the screen in question.
        */
       public void initGui()
       {
           this.viewportTexture = new DynamicTexture(256, 256);
           this.field_110351_G = this.mc.getTextureManager().getDynamicTextureLocation("background", this.viewportTexture);
           Calendar calendar = Calendar.getInstance();
           calendar.setTime(new Date());
    
           if(calendar.get(2) + 1 == 11 && calendar.get(5) == 9)
           {
               this.splashText = "Happy birthday, ez!";
           }
           else if(calendar.get(2) + 1 == 6 && calendar.get(5) == 1)
           {
               this.splashText = "Happy birthday, Notch!";
           }
           else if(calendar.get(2) + 1 == 12 && calendar.get(5) == 24)
           {
               this.splashText = "Merry X-mas!";
           }
           else if(calendar.get(2) + 1 == 1 && calendar.get(5) == 1)
           {
               this.splashText = "Happy new year!";
           }
           else if(calendar.get(2) + 1 == 10 && calendar.get(5) == 31)
           {
               this.splashText = "OOoooOOOoooo! Spooky!";
           }
    
           boolean flag = true;
           int i = this.height / 4 + 48;
    
           if(this.mc.isDemo())
           {
               this.addDemoButtons(i, 24);
           }
           else
           {
               this.addSingleplayerMultiplayerButtons(i, 24);
           }
    
           this.buttonList.add(new GuiButton(0, this.width / 2 - 100, i + 72 + 12, 98, 20, I18n.format("menu.options", new Object[0])));
           this.buttonList.add(new GuiButton(4, this.width / 2 + 2, i + 72 + 12, 98, 20, I18n.format("menu.quit", new Object[0])));
           this.buttonList.add(new GuiButtonLanguage(5, this.width / 2 - 124, i + 72 + 12));
           Object object = this.field_104025_t;
    
           synchronized(this.field_104025_t)
           {
               this.field_92023_s = this.fontRendererObj.getStringWidth(this.field_92025_p);
               this.field_92024_r = this.fontRendererObj.getStringWidth(this.field_146972_A);
               int j = Math.max(this.field_92023_s, this.field_92024_r);
               this.field_92022_t = (this.width - j) / 2;
               this.field_92021_u = ((GuiButton)this.buttonList.get(0)).yPosition - 24;
               this.field_92020_v = this.field_92022_t + j;
               this.field_92019_w = this.field_92021_u + 24;
           }
       }
    
       /**
        * Adds Singleplayer and Multiplayer buttons on Main Menu for players who have bought the game.
        */
       private void addSingleplayerMultiplayerButtons(int x, int y)
       {
          int i = this.height / 4 + 48;
    this.buttonList.add(new GuiButton(30, this.width / 2, i + 24 * 2, 100, 20, "Teamspeak") {
    @Override
    public void mouseReleased(int x, int y) {
    if (Desktop.isDesktopSupported()) {
    try {
    Desktop.getDesktop().browse(new URI("ts3server://ts.glroycraft.fr"));
    } catch (Exception e) {
    ExampleMod.LOGGER.warn("Douldn't open teamspeak", e);
    }
    }
    }
    });
    
    this.buttonList.add(new GuiButton(31, this.width / 2 - 100, i + 24 * 2, 100, 20, "Boutique") {
    @Override
    public void mouseReleased(int x, int y) {
    if (Desktop.isDesktopSupported()) {
    try {
    Desktop.getDesktop().browse(new URI("http://http://glorycraft.fr/boutique"));
    } catch (Exception e) {
    ExampleMod.LOGGER.warn("Douldn't open teamspeak", e);
    }
    }
    }
    });
    
    this.buttonList.add(new GuiButton(32, this.width / 2 - 100, i + 24, 200, 20, "Site") {
    @Override
    public void mouseReleased(int x, int y) {
    if (Desktop.isDesktopSupported()) {
    try {
    Desktop.getDesktop().browse(new URI("http://glorycraft.fr/"));
    } catch (Exception e) {
    ExampleMod.LOGGER.warn("Douldn't open teamspeak", e);
    }
    }
    }
    });
    
    //FrenchAltis
               ServerData s = new ServerData("GloryCraft", "91.121.35.177:25565");
               OldServerPinger o = new OldServerPinger();
               try {
    o.ping(s);
    } catch (UnknownHostException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    
               //Color c = new Color(150,150,255);
    
               //FMLClientHandler.instance().beginServerLoading(s.);
               this.buttonList.add(new GuiButton(33, this.width / 2 - 100, i, 200, 20, "GloryCraft (" +    s.populationInfo   + "/20)" /* EnumChatFormatting.AQUA +"F" + EnumChatFormatting.BLACK + "r" + EnumChatFormatting.BLUE + "e" + EnumChatFormatting.BOLD + "n" + EnumChatFormatting.DARK_AQUA + "c" + EnumChatFormatting.DARK_BLUE + "h" + EnumChatFormatting.DARK_GRAY + "Altis"*/));
    
       }
    
       /**
        * Adds Demo buttons on Main Menu for players who are playing Demo.
        */
       private void addDemoButtons(int x, int y)
       {
           this.buttonList.add(new GuiButton(11, this.width / 2 - 100, x, I18n.format("menu.playdemo", new Object[0])));
           this.buttonList.add(this.buttonResetDemo = new GuiButton(12, this.width / 2 - 100, x + y * 1, I18n.format("menu.resetdemo", new Object[0])));
           ISaveFormat isaveformat = this.mc.getSaveLoader();
           WorldInfo worldinfo = isaveformat.getWorldInfo("Demo_World");
    
           if(worldinfo == null)
           {
               this.buttonResetDemo.enabled = false;
           }
       }
    
       protected void actionPerformed(GuiButton button)
       {
           if(button.id == 0)
           {
               this.mc.displayGuiScreen(new GuiOptions(this, this.mc.gameSettings));
           }
    
           if(button.id == 5)
           {
               this.mc.displayGuiScreen(new GuiLanguage(this, this.mc.gameSettings, this.mc.getLanguageManager()));
           }
    
           if(button.id == 1)
           {
               this.mc.displayGuiScreen(new GuiSelectWorld(this));
           }
    
           if(button.id == 2)
           {
               this.mc.displayGuiScreen(new GuiMultiplayer(this));
           }
    
           if(button.id == 4)
           {
               this.mc.shutdown();
           }
    
           if(button.id == 6)
           {
               this.mc.displayGuiScreen(new GuiModList(this));
           }
    
           if(button.id == 11)
           {
               this.mc.launchIntegratedServer("Demo_World", "Demo_World", DemoWorldServer.demoWorldSettings);
           }
    
           if(button.id == 12)
           {
               ISaveFormat isaveformat = this.mc.getSaveLoader();
               WorldInfo worldinfo = isaveformat.getWorldInfo("Demo_World");
    
               if(worldinfo != null)
               {
                   GuiYesNo guiyesno = GuiSelectWorld.func_152129_a(this, worldinfo.getWorldName(), 12);
                   this.mc.displayGuiScreen(guiyesno);
               }
           }
    
           if(button.id == 20)
           {
               // TODO pour la connexion au serveur
               FMLClientHandler.instance().connectToServerAtStartup("play.glorycraft.fr", 25565); // ip, port
           }
    
           if(button.id == 21)
           {
               try
               {
                   Class oclass = Class.forName("java.awt.Desktop");
                   Object object = oclass.getMethod("getDesktop", new Class[0]).invoke((Object)null, new Object[0]);
                   oclass.getMethod("browse", new Class[] {URI.class}).invoke(object, new Object[] {new URI("http://glorycraft .fr")});
               }
               catch(Throwable throwable)
               {
                   logger.error("Couldn\'t open link", throwable);
               }
           }
       }
    
       public void confirmClicked(boolean p_73878_1_, int id)
       {
           if(p_73878_1_ && id == 12)
           {
               ISaveFormat isaveformat = this.mc.getSaveLoader();
               isaveformat.flushCache();
               isaveformat.deleteWorldDirectory("Demo_World");
               this.mc.displayGuiScreen(this);
           }
           else if(id == 13)
           {
               if(p_73878_1_)
               {
                   try
                   {
                       Class oclass = Class.forName("java.awt.Desktop");
                       Object object = oclass.getMethod("getDesktop", new Class[0]).invoke((Object)null, new Object[0]);
                       oclass.getMethod("browse", new Class[] {URI.class}).invoke(object, new Object[] {new URI(this.field_104024_v)});
                   }
                   catch(Throwable throwable)
                   {
                       logger.error("Couldn\'t open link", throwable);
                   }
               }
    
               this.mc.displayGuiScreen(this);
           }
       }
    
       /**
        * Draws the main menu panorama
        */
       private void drawPanorama(int x, int y, float partialTick)
       {
        WorldRenderer tessellator = Tessellator.getInstance().getWorldRenderer();
           GL11.glMatrixMode(GL11.GL_PROJECTION);
           GL11.glPushMatrix();
           GL11.glLoadIdentity();
           Project.gluPerspective(120.0F, 1.0F, 0.05F, 10.0F);
           GL11.glMatrixMode(GL11.GL_MODELVIEW);
           GL11.glPushMatrix();
           GL11.glLoadIdentity();
           GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
           GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F);
           GL11.glRotatef(90.0F, 0.0F, 0.0F, 1.0F);
           GL11.glEnable(GL11.GL_BLEND);
           GL11.glDisable(GL11.GL_ALPHA_TEST);
           GL11.glDisable(GL11.GL_CULL_FACE);
           GL11.glDepthMask(false);
           OpenGlHelper.glBlendFunc(770, 771, 1, 0);
           byte b0 = 8;
    
           for(int k = 0; k < b0 * b0; ++k)
           {
               GL11.glPushMatrix();
               float f1 = ((float)(k % b0) / (float)b0 - 0.5F) / 64.0F;
               float f2 = ((float)(k / b0) / (float)b0 - 0.5F) / 64.0F;
               float f3 = 0.0F;
               GL11.glTranslatef(f1, f2, f3);
               GL11.glRotatef(MathHelper.sin(((float)this.panoramaTimer + partialTick) / 400.0F) * 25.0F + 20.0F, 1.0F, 0.0F, 0.0F);
               GL11.glRotatef(-((float)this.panoramaTimer + partialTick) * 0.1F, 0.0F, 1.0F, 0.0F);
    
               for(int l = 0; l < 6; ++l)
               {
                   GL11.glPushMatrix();
    
                   if(l == 1)
                   {
                       GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
                   }
    
                   if(l == 2)
                   {
                       GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F);
                   }
    
                   if(l == 3)
                   {
                       GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F);
                   }
    
                   if(l == 4)
                   {
                       GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F);
                   }
    
                   if(l == 5)
                   {
                       GL11.glRotatef(-90.0F, 1.0F, 0.0F, 0.0F);
                   }
    
                   this.mc.getTextureManager().bindTexture(titlePanoramaPaths);
                   tessellator.startDrawingQuads();
                   tessellator.setColorRGBA_I(16777215, 255 / (k + 1));
                   float f4 = 0.0F;
                   tessellator.addVertexWithUV(-1.0D, -1.0D, 1.0D, (double)(0.0F + f4), (double)(0.0F + f4));
                   tessellator.addVertexWithUV(1.0D, -1.0D, 1.0D, (double)(1.0F - f4), (double)(0.0F + f4));
                   tessellator.addVertexWithUV(1.0D, 1.0D, 1.0D, (double)(1.0F - f4), (double)(1.0F - f4));
                   tessellator.addVertexWithUV(-1.0D, 1.0D, 1.0D, (double)(0.0F + f4), (double)(1.0F - f4));
                Tessellator.getInstance().draw();
                   GL11.glPopMatrix();
               }
    
               GL11.glPopMatrix();
               GL11.glColorMask(true, true, true, false);
           }
    
           tessellator.setTranslation(0.0D, 0.0D, 0.0D);
           GL11.glColorMask(true, true, true, true);
           GL11.glMatrixMode(GL11.GL_PROJECTION);
           GL11.glPopMatrix();
           GL11.glMatrixMode(GL11.GL_MODELVIEW);
           GL11.glPopMatrix();
           GL11.glDepthMask(true);
           GL11.glEnable(GL11.GL_CULL_FACE);
           GL11.glEnable(GL11.GL_DEPTH_TEST);
       }
    
       /**
        * Rotate and blurs the skybox view in the main menu
        */
       private void rotateAndBlurSkybox(float partialTick)
       {
           this.mc.getTextureManager().bindTexture(this.field_110351_G);
           GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
           GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
           GL11.glCopyTexSubImage2D(GL11.GL_TEXTURE_2D, 0, 0, 0, 0, 0, 256, 256);
           GL11.glEnable(GL11.GL_BLEND);
           OpenGlHelper.glBlendFunc(770, 771, 1, 0);
           GL11.glColorMask(true, true, true, false);
           WorldRenderer tessellator = Tessellator.getInstance().getWorldRenderer();
           tessellator.startDrawingQuads();
           GL11.glDisable(GL11.GL_ALPHA_TEST);
           byte b0 = 3;
    
           for(int i = 0; i < b0; ++i)
           {
               tessellator.setColorRGBA_F(1.0F, 1.0F, 1.0F, 1.0F / (float)(i + 1));
               int j = this.width;
               int k = this.height;
               float f1 = (float)(i - b0 / 2) / 256.0F;
               tessellator.addVertexWithUV((double)j, (double)k, (double)this.zLevel, (double)(0.0F + f1), 1.0D);
               tessellator.addVertexWithUV((double)j, 0.0D, (double)this.zLevel, (double)(1.0F + f1), 1.0D);
               tessellator.addVertexWithUV(0.0D, 0.0D, (double)this.zLevel, (double)(1.0F + f1), 0.0D);
               tessellator.addVertexWithUV(0.0D, (double)k, (double)this.zLevel, (double)(0.0F + f1), 0.0D);
           }
    
           Tessellator.getInstance().draw();
           GL11.glEnable(GL11.GL_ALPHA_TEST);
           GL11.glColorMask(true, true, true, true);
       }
    
       /**
        * Renders the skybox in the main menu
        */
       private void renderSkybox(int x, int y, float partialTick)
       {
           this.mc.getFramebuffer().unbindFramebuffer();
           GL11.glViewport(0, 0, 256, 256);
           this.drawPanorama(x, y, partialTick);
           this.rotateAndBlurSkybox(partialTick);
           this.rotateAndBlurSkybox(partialTick);
           this.rotateAndBlurSkybox(partialTick);
           this.rotateAndBlurSkybox(partialTick);
           this.rotateAndBlurSkybox(partialTick);
           this.rotateAndBlurSkybox(partialTick);
           this.rotateAndBlurSkybox(partialTick);
           this.mc.getFramebuffer().bindFramebuffer(true);
           GL11.glViewport(0, 0, this.mc.displayWidth, this.mc.displayHeight);
           WorldRenderer tessellator = Tessellator.getInstance().getWorldRenderer();
           tessellator.startDrawingQuads();
           float f1 = this.width > this.height ? 120.0F / (float)this.width : 120.0F / (float)this.height;
           float f2 = (float)this.height * f1 / 256.0F;
           float f3 = (float)this.width * f1 / 256.0F;
           tessellator.setColorRGBA_F(1.0F, 1.0F, 1.0F, 1.0F);
           int k = this.width;
           int l = this.height;
           tessellator.addVertexWithUV(0.0D, (double)l, (double)this.zLevel, (double)(0.5F - f2), (double)(0.5F + f3));
           tessellator.addVertexWithUV((double)k, (double)l, (double)this.zLevel, (double)(0.5F - f2), (double)(0.5F - f3));
           tessellator.addVertexWithUV((double)k, 0.0D, (double)this.zLevel, (double)(0.5F + f2), (double)(0.5F - f3));
           tessellator.addVertexWithUV(0.0D, 0.0D, (double)this.zLevel, (double)(0.5F + f2), (double)(0.5F + f3));
           Tessellator.getInstance().draw();
       }
    
       /**
        * Draws the screen and all the components in it.
        */
       public void drawScreen(int x, int y, float partialTick)
       {
           GL11.glDisable(GL11.GL_ALPHA_TEST);
           this.renderSkybox(x, y, partialTick);
           GL11.glEnable(GL11.GL_ALPHA_TEST);
           WorldRenderer tessellator = Tessellator.getInstance().getWorldRenderer();
           short short1 = 274;
           int k = this.width / 2 - short1 / 2;
           byte b0 = 30;
           this.drawGradientRect(0, 0, this.width, this.height, -2130706433, 16777215);
           this.drawGradientRect(0, 0, this.width, this.height, 0, Integer.MIN_VALUE);
           this.mc.getTextureManager().bindTexture(minecraftTitleTextures);
           GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    
           if((double)this.updateCounter < 1.0E-4D)
           {
               this.drawTexturedModalRect(k + 0, b0 + 0, 0, 0, 99, 44);
               this.drawTexturedModalRect(k + 99, b0 + 0, 129, 0, 27, 44);
               this.drawTexturedModalRect(k + 99 + 26, b0 + 0, 126, 0, 3, 44);
               this.drawTexturedModalRect(k + 99 + 26 + 3, b0 + 0, 99, 0, 26, 44);
               this.drawTexturedModalRect(k + 155, b0 + 0, 0, 45, 155, 44);
           }
           else
           {
               this.drawTexturedModalRect(k + 0, b0 + 0, 0, 0, 155, 44);
               this.drawTexturedModalRect(k + 155, b0 + 0, 0, 45, 155, 44);
           }
    
           tessellator.setColorOpaque_I(-1);
           GL11.glPushMatrix();
           GL11.glTranslatef((float)(this.width / 2 + 90), 70.0F, 0.0F);
           GL11.glRotatef(-20.0F, 0.0F, 0.0F, 1.0F);
           float f1 = 1.8F - MathHelper.abs(MathHelper.sin((float)(Minecraft.getSystemTime() % 1000L) / 1000.0F * (float)Math.PI * 2.0F) * 0.1F);
           f1 = f1 * 100.0F / (float)(this.fontRendererObj.getStringWidth(this.splashText) + 32);
           GL11.glScalef(f1, f1, f1);
           this.drawCenteredString(this.fontRendererObj, this.splashText, 0, -8, -256);
           GL11.glPopMatrix();
           String s = "Minecraft 1.7.10";
    
           if(this.mc.isDemo())
           {
               s = s + " Demo";
           }
    
           List <string>brandings = Lists.reverse(FMLCommonHandler.instance().getBrandings(true));
           for(int i = 0; i < brandings.size(); i++)
           {
               String brd = brandings.get(i);
               if(!Strings.isNullOrEmpty(brd))
               {
                   this.drawString(this.fontRendererObj, brd, 2, this.height - (10 + i * (this.fontRendererObj.FONT_HEIGHT + 1)), 16777215);
               }
           }
           String s1 = "Copyright Mojang AB. Do not distribute!";
           this.drawString(this.fontRendererObj, s1, this.width - this.fontRendererObj.getStringWidth(s1) - 2, this.height - 10, -1);
    
           if(this.field_92025_p != null && this.field_92025_p.length() > 0)
           {
               drawRect(this.field_92022_t - 2, this.field_92021_u - 2, this.field_92020_v + 2, this.field_92019_w - 1, 1428160512);
               this.drawString(this.fontRendererObj, this.field_92025_p, this.field_92022_t, this.field_92021_u, -1);
               this.drawString(this.fontRendererObj, this.field_146972_A, (this.width - this.field_92024_r) / 2, ((GuiButton)this.buttonList.get(0)).yPosition - 12, -1);
           }
    
           super.drawScreen(x, y, partialTick);
       }
    
       /**
        * Called when the mouse is clicked.
        * @throws IOException
        */
       protected void mouseClicked(int p_73864_1_, int p_73864_2_, int p_73864_3_) throws IOException
       {
           super.mouseClicked(p_73864_1_, p_73864_2_, p_73864_3_);
           Object object = this.field_104025_t;
    
           synchronized(this.field_104025_t)
           {
               if(this.field_92025_p.length() > 0 && p_73864_1_ >= this.field_92022_t && p_73864_1_ <= this.field_92020_v && p_73864_2_ >= this.field_92021_u && p_73864_2_ <= this.field_92019_w)
               {
                   GuiConfirmOpenLink guiconfirmopenlink = new GuiConfirmOpenLink(this, this.field_104024_v, 13, true);
                   guiconfirmopenlink.disableSecurityWarning();
                   this.mc.displayGuiScreen(guiconfirmopenlink);
               }
           }
       }
    }
    

    @'Benjamin Loison':

    Comme a dit robin je te conseille de regarder comment Minecraft arrive à prendre cette donnée sur le menu multijoueur sinon fais un packet qui demande le nombre de joueurs sur le serveur c'est pas compliqué 😉

    Sans vouliir te vexée, mais c'est ce que j'ai fait, et comme la dit robin plus haut sa luis semblé étrange car c'était le bon code ;)</string>


  • Administrateurs

    Sérieusement stop les balises code dans une balise spoiler. C'est complètement illisible car pas de formatage + code compacté sur 5 lignes …
    Il suffit de juste mettre la balise java et voila.

    Et en effet comme ça ça ne risque pas de fonctionner, regardes bien dans ServerListEntryNormal il passe par un thread et il faut mettre le code dans une fonction appelé à chaque tick (comme par exemple drawScreen).



  • Bonjours, je vais me sentir nul et je pense que c'est vrais, mais sa me retourne toujours null. voic le code de drawnScreen :

       public void drawScreen(int x, int y, float partialTick)
       {
        field_148302_b.submit(new Runnable()
            {
        public void run() {
                OldServerPinger o = new OldServerPinger();
                   try {
    
        o.func_147224_a(s);
    
        } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
        }
            });
           GL11.glDisable(GL11.GL_ALPHA_TEST);
           this.renderSkybox(x, y, partialTick);
           GL11.glEnable(GL11.GL_ALPHA_TEST);
           Tessellator tessellator = Tessellator.instance;
           short short1 = 274;
           int k = this.width / 2 - short1 / 2;
           byte b0 = 30;
           this.drawGradientRect(0, 0, this.width, this.height, -2130706433, 16777215);
           this.drawGradientRect(0, 0, this.width, this.height, 0, Integer.MIN_VALUE);
           this.mc.getTextureManager().bindTexture(minecraftTitleTextures);
           GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    
           if((double)this.updateCounter < 1.0E-4D)
           {
               this.drawTexturedModalRect(k + 0, b0 + 0, 0, 0, 99, 44);
               this.drawTexturedModalRect(k + 99, b0 + 0, 129, 0, 27, 44);
               this.drawTexturedModalRect(k + 99 + 26, b0 + 0, 126, 0, 3, 44);
               this.drawTexturedModalRect(k + 99 + 26 + 3, b0 + 0, 99, 0, 26, 44);
               this.drawTexturedModalRect(k + 155, b0 + 0, 0, 45, 155, 44);
           }
           else
           {
               this.drawTexturedModalRect(k + 0, b0 + 0, 0, 0, 155, 44);
               this.drawTexturedModalRect(k + 155, b0 + 0, 0, 45, 155, 44);
           }
    
           tessellator.setColorOpaque_I(-1);
           GL11.glPushMatrix();
           GL11.glTranslatef((float)(this.width / 2 + 90), 70.0F, 0.0F);
           GL11.glRotatef(-20.0F, 0.0F, 0.0F, 1.0F);
           float f1 = 1.8F - MathHelper.abs(MathHelper.sin((float)(Minecraft.getSystemTime() % 1000L) / 1000.0F * (float)Math.PI * 2.0F) * 0.1F);
           f1 = f1 * 100.0F / (float)(this.fontRendererObj.getStringWidth(this.splashText) + 32);
           GL11.glScalef(f1, f1, f1);
           this.drawCenteredString(this.fontRendererObj, this.splashText, 0, -8, -256);
           GL11.glPopMatrix();
           String s = "Minecraft 1.7.10";
    
           if(this.mc.isDemo())
           {
               s = s + " Demo";
           }
    
           List <string>brandings = Lists.reverse(FMLCommonHandler.instance().getBrandings(true));
           for(int i = 0; i < brandings.size(); i++)
           {
               String brd = brandings.get(i);
               if(!Strings.isNullOrEmpty(brd))
               {
                   this.drawString(this.fontRendererObj, brd, 2, this.height - (10 + i * (this.fontRendererObj.FONT_HEIGHT + 1)), 16777215);
               }
           }
           String s1 = "Copyright Mojang AB. Do not distribute! Launcher by ph1823";
           this.drawString(this.fontRendererObj, s1, this.width - this.fontRendererObj.getStringWidth(s1) - 2, this.height - 10, -1);
    
           if(this.field_92025_p != null && this.field_92025_p.length() > 0)
           {
               drawRect(this.field_92022_t - 2, this.field_92021_u - 2, this.field_92020_v + 2, this.field_92019_w - 1, 1428160512);
               this.drawString(this.fontRendererObj, this.field_92025_p, this.field_92022_t, this.field_92021_u, -1);
               this.drawString(this.fontRendererObj, this.field_146972_A, (this.width - this.field_92024_r) / 2, ((GuiButton)this.buttonList.get(0)).yPosition - 12, -1);
           }
    
           super.drawScreen(x, y, partialTick);
       }
    

    La variable field_148302_b correspond a celle de ServerListEntryNormal.</string>


  • Administrateurs

    Tu affiches où la population du serveur ?



  • Au moement ou je crée le boutons, ici :

    
    private void addSingleplayerMultiplayerButtons(int x, int y)
    
    

    et voici la fonction pour ajouté le bouton :

    
    this.buttonList.add(new GuiButton(33, this.width / 2 - 100, i, 200, 20, "GloryCraft (" + s.populationInfo + "/25)" /* EnumChatFormatting.AQUA +"F" + EnumChatFormatting.BLACK + "r" + EnumChatFormatting.BLUE + "e" + EnumChatFormatting.BOLD + "n" + EnumChatFormatting.DARK_AQUA + "c" + EnumChatFormatting.DARK_BLUE + "h" + EnumChatFormatting.DARK_GRAY + "Altis"*/));
    
    

  • Administrateurs

    Normal que ça ne fonctionne pas alors.
    Car s.populationInfo ne prend que sa valeur une fois la réponse au paquet reçu.

    Donc il faut utiliser dans une fonction actualité à chaque tick. Le mieux dans ton cas serait de mettre le code directement dans la fonction drawScreen du bouton.



  • Oui, mais la je viens de tentée casiment toutes les fonction, vue que celle qui draw le bouton ne marché pas et se ne marche toujours pas.. Je ne sais pas d'ou viens le problème..


  • Administrateurs

    Envoies moi un zip de ton dossier src je vais regarder de mon côté.




  • Administrateurs

    Bon le résultat n'est pas vraiment concluant. J'ai tenté deux choses même résultat :
    obligé de refresh le menu (ouvrir une menu et revenir) pour voir le nombre de joueur. Je ne sais pas pourquoi 😕



  • Hello, je me permet de faire un petit up pour vous dire que ceci pourrez vous aidé : https://github.com/evilmidget38/MinecraftServerPing