• Donc voilà j’ai créé un menu custom avec la base de celui de Robin mais le soucis est que j’ai créé un bouton qui me connecte directement à mon serveur mais j’aimerai afficher le nombre de joueurs connectés et si le serveur est ouvert ou fermé à côté de ce bouton et je ne sais pas du tout comment faire, je penses qu’avec les paquets cela doit être fesable sauf que je ne les ai jamais utilisés et je ne sais pas du tout comment les utiliser.

  • Administrateurs Rédacteurs Moddeurs confirmés


  • Merci bien.

    EDIT: J’ai donc tout suivi à la lettre sauf que mon bouton n’apparait pas.

    Mes modifications:

    Dans la classe du GuiMainMenuCustom

    
    private ApiInfo info;
    
    public void initGui()
    {
    
    this.info = new ApiInfo("play.minefus.fr.25565");
    this.info.getInfo();
    }
    
    public void drawScreen(int x, int y, float partialTick)
    {
    int a = 10;
    
    this.info.drawIcon(this.width / 2 - 100 + a, 60 + y + a + 20);
    
    this.drawString(this.fontRendererObj, this.info.getMOTD(), 10, 20, 0xffffff);
    this.drawString(this.fontRendererObj, this.info.getIP(), 10, 30, 0xffffff);
    this.drawString(this.fontRendererObj, this.info.getVersion(), 10, 40, 0xffffff);
    this.drawString(this.fontRendererObj, String.valueOf(this.info.getAcceptTexture()), 10, 50, 0xffffff);
    this.drawString(this.fontRendererObj, String.valueOf(this.info.getPing()), 10, 60, 0xffffff);
    
    

  • this.info = new ApiInfo("play.minefus.fr.25565");
    

    Ce serai pas plutot :

    this.info = new ApiInfo("play.minefus.fr:25565");
    

    Avec les deux points devant le port


  • iFuSion utilité de venir poster cela sur le forum alors que je viens de te dire a l’instant en vocal que ce n’était pas cela!


  • @‘Degraduck’:

    Merci bien.

    EDIT: J’ai donc tout suivi à la lettre sauf que mon bouton n’apparait pas.

    Mes modifications:

    Dans la classe du GuiMainMenuCustom

    
    private ApiInfo info;
    
    public void initGui()
       {
       
        this.info = new ApiInfo("play.minefus.fr.25565");
        this.info.getInfo();
    }
    
    public void drawScreen(int x, int y, float partialTick)
       {
        int a = 10;
       
        this.info.drawIcon(this.width / 2 - 100 + a, 60 + y + a + 20);
       
        this.drawString(this.fontRendererObj, this.info.getMOTD(), 10,  20,  0xffffff);
           this.drawString(this.fontRendererObj, this.info.getIP(), 10,  30,  0xffffff);
           this.drawString(this.fontRendererObj, this.info.getVersion(), 10,  40,  0xffffff);
           this.drawString(this.fontRendererObj, String.valueOf(this.info.getAcceptTexture()), 10,  50,  0xffffff);
           this.drawString(this.fontRendererObj, String.valueOf(this.info.getPing()), 10,  60,  0xffffff);
    
    

    Sans la classe entière, on peut rien faire. (superbe rime)


  • La voilà```java
    package com.degraduck.minefusmainmenu.client;

    import java.awt.Desktop;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.lang.reflect.InvocationTargetException;
    import java.net.URI;
    import java.net.URISyntaxException;
    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.renderer.OpenGlHelper;
    import net.minecraft.client.renderer.Tessellator;
    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.client.ForgeHooksClient;

    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;

    import cpw.mods.fml.client.FMLClientHandler;
    import cpw.mods.fml.client.GuiModList;
    import cpw.mods.fml.common.FMLCommonHandler;
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;

    @SideOnly(Side.CLIENT)

    public class GuiCustomMinefusMainMenu extends GuiScreen implements GuiYesNoCallback
    {
    private ApiInfo info;
    /** Declaration de l’instance de notre Api pour les informations du serveur*/
    private static final Logger logger = LogManager.getLogger();
    /** Le RNG utilisé par l’ écran du menu principal. /
    private static final Random rand = new Random();
    /
    * Compte le nombre de mises à jour d’écran. /
    private float updateCounter;
    /
    * Le message d’accueil . /
    private String splashText;
    private GuiButton buttonResetDemo;
    /
    * Minuterie utilisée pour faire tourner le panorama , augmente chaque tick. /
    private int panoramaTimer;
    /
    *

    • Texture alloué pour la fenêtre courante des panoramas de fond du menu principal.
      /
      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”);
      /
      * Un tableau de tous les chemins d’accès aux photos panoramiques. */
      private static final ResourceLocation[] titlePanoramaPaths = new ResourceLocation[] {new ResourceLocation(“textures/gui/title/background/panorama_0.png”), new ResourceLocation(“textures/gui/title/background/panorama_1.png”), new ResourceLocation(“textures/gui/title/background/panorama_2.png”), new ResourceLocation(“textures/gui/title/background/panorama_3.png”), new ResourceLocation(“textures/gui/title/background/panorama_4.png”), new ResourceLocation(“textures/gui/title/background/panorama_5.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 GuiCustomMinefusMainMenu()
    {
    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.func_153193_b())
    {
    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”;
    }
    }

    /**

    • Appelé par la boucle principale du jeu de mettre à jour l’écran.
      */
      public void updateScreen()
      {
      ++this.panoramaTimer;
      }

    /**

    • Renvoie true si cette interface graphique devrait faire une pause le jeu quand il est affiché dans solo
      */
      public boolean doesGuiPauseGame()
      {
      return false;
      }

    /**

    • Déclenché quand une clé est tapé . Ce est l’équivalent de KeyListener.keyTyped(KeyEvent e).
      */
      protected void keyTyped(char p_73869_1_, int p_73869_2_)
      {}

    /**

    • Ajouts des boutons
      */
      public void initGui()
      {
      /*Initialisation de notre Gui/
      this.info = new ApiInfo(“play.minefus.fr.25565”);
      this.info.getInfo();

    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;
    }
    }

    /**

    • Ajoute monojoueur et le multijoueur boutons de menu principal pour les joueurs qui ont acheté le jeu .
      */
      private void addSingleplayerMultiplayerButtons(int x, int y)
      {
      int a = 10;

    this.buttonList.add(new GuiButton(1, this.width / 2 - 50, 108 + a, 98, 20, “\u00A77Singleplayer”));
    this.buttonList.add(new GuiButton(2, this.width / 2 - 50, 133 + a, 98, 20, “\u00A7fPuLse \u00A74Gaming”));
    this.buttonList.add(new GuiButton(20, this.width / 2 - 100, 60 + y + a, “\u00A7aServeur Minefus”));
    this.buttonList.add(new GuiButton(25, this.width / 2 - 100, 160 + a, 200, 20, “\u00A76Boutique”));
    GuiButton webSiteButton = new GuiButton(21, this.width / 2 - 200, 122 + a, 98, 20, " \u00A7bSite");
    GuiButton fmlModButton = new GuiButton(6, this.width / 2 - 200, 122 + a, 98, 20, “\u00A7cTeamspeak”);
    fmlModButton.xPosition = this.width / 2 + 100;
    webSiteButton.width = 98;
    fmlModButton.width = 98;
    this.buttonList.add(webSiteButton);
    this.buttonList.add(fmlModButton);

    }

    /**

    • Ajoute les boutons de démonstration dans le menu principal pour les joueurs qui jouent Démo .
      */
      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)
    {
    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://pulse-gaming.gg”)});
    }
    catch(Throwable throwable)
    {
    logger.error(“Couldn’t open link”, throwable);
    }
    }

    if(button.id == 4)
    {
    this.mc.shutdown();
    }

    if(button.id == 6)
    {
    String ipts3 = “ts.minefus.fr”; // address serveur ts 3
    int portTs3 = 9987; //port ts 3 celui est par defaut
    URI uri = URI.create(“ts3server://”+ ipts3 +"?port="+ portTs3);
    try { Desktop.getDesktop().browse(uri);
    }

    catch (IOException e) {
    // TODO Auto-generated catch block e.printStackTrace(); } }
    }
    }

    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.minefus.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://minefus.fr”)});
    }
    catch(Throwable throwable)
    {
    logger.error(“Couldn’t open link”, throwable);
    }

    }

    if(button.id == 25)
    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://minefus.fr/boutique/”)});
    }
    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);
    }
    }

    /**

    • Dessine le menu principal panorama.
      */
      private void drawPanorama(int x, int y, float partialTick)
      {
      Tessellator tessellator = Tessellator.instance;
      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[l]);
    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.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);
    }

    /**

    • Rotation et brouille la vue skybox dans le menu principal
      */
      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);
      Tessellator tessellator = Tessellator.instance;
      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.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);
      Tessellator tessellator = Tessellator.instance;
      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.draw();
      }

    /**

    • Dessine l’écran et tous les composants en elle.
      */
      public void drawScreen(int x, int y, float partialTick)
      {
      int a = 20;

    this.info.drawIcon(this.width / 2 - 100 + a, 60 + y + a + 20);

    this.drawString(this.fontRendererObj, this.info.getMOTD(), 10, 20, 0xffffff);
    this.drawString(this.fontRendererObj, this.info.getIP(), 10, 30, 0xffffff);
    this.drawString(this.fontRendererObj, this.info.getVersion(), 10, 40, 0xffffff);
    this.drawString(this.fontRendererObj, String.valueOf(this.info.getAcceptTexture()), 10, 50, 0xffffff);
    this.drawString(this.fontRendererObj, String.valueOf(this.info.getPing()), 10, 60, 0xffffff);

    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!”;
    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);
    }

    /**

    • Appelé lorsque la souris est cliquée .
      */
      protected void mouseClicked(int p_73864_1_, int p_73864_2_, int p_73864_3_)
      {
      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.func_146358_g();
    this.mc.displayGuiScreen(guiconfirmopenlink);
    }
    }
    }
    }


  • @‘Degraduck’:

    La voilà

    package com.degraduck.minefusmainmenu.client;
    
    import java.awt.Desktop;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.lang.reflect.InvocationTargetException;
    import java.net.URI;
    import java.net.URISyntaxException;
    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.renderer.OpenGlHelper;
    import net.minecraft.client.renderer.Tessellator;
    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.client.ForgeHooksClient;
    
    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;
    
    import cpw.mods.fml.client.FMLClientHandler;
    import cpw.mods.fml.client.GuiModList;
    import cpw.mods.fml.common.FMLCommonHandler;
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    
    @SideOnly(Side.CLIENT)
    
    public class GuiCustomMinefusMainMenu extends GuiScreen implements GuiYesNoCallback
    {
    private ApiInfo info;
    /** Declaration de l'instance de notre Api pour les informations du serveur*/
    private static final Logger logger = LogManager.getLogger();
       /** Le RNG utilisé par l' écran du menu principal. */
       private static final Random rand = new Random();
       /** Compte le nombre de mises à jour d'écran. */
       private float updateCounter;
       /** Le message d'accueil . */
       private String splashText;
       private GuiButton buttonResetDemo;
       /** Minuterie utilisée pour faire tourner le panorama , augmente chaque tick. */
       private int panoramaTimer;
       /**
        * Texture alloué pour la fenêtre courante des panoramas de fond du menu principal.
        */
       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");
       /** Un tableau de tous les chemins d'accès aux photos panoramiques. */
       private static final ResourceLocation[] titlePanoramaPaths = new ResourceLocation[] {new ResourceLocation("textures/gui/title/background/panorama_0.png"), new ResourceLocation("textures/gui/title/background/panorama_1.png"), new ResourceLocation("textures/gui/title/background/panorama_2.png"), new ResourceLocation("textures/gui/title/background/panorama_3.png"), new ResourceLocation("textures/gui/title/background/panorama_4.png"), new ResourceLocation("textures/gui/title/background/panorama_5.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 GuiCustomMinefusMainMenu()
       {
           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.func_153193_b())
           {
               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";
           }
       }
    
       /**
        * Appelé par la boucle principale du jeu de mettre à jour l'écran.
        */
       public void updateScreen()
       {
           ++this.panoramaTimer;
       }
    
       /**
        * Renvoie true si cette interface graphique devrait faire une pause le jeu quand il est affiché dans solo
        */
       public boolean doesGuiPauseGame()
       {
           return false;
       }
    
       /**
        * Déclenché quand une clé est tapé . Ce est l'équivalent de KeyListener.keyTyped(KeyEvent e).
        */
       protected void keyTyped(char p_73869_1_, int p_73869_2_)
       {}
    
       /**
        * Ajouts des boutons
        */
       public void initGui()
       {
        /**Initialisation de notre Gui*/
        this.info = new ApiInfo("play.minefus.fr.25565");
        this.info.getInfo();
       
           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;
           }
       }
    
       /**
        * Ajoute monojoueur et le multijoueur boutons de menu principal pour les joueurs qui ont acheté le jeu .
        */
       private void addSingleplayerMultiplayerButtons(int x, int y)
       {
        int a = 10;
       
        this.buttonList.add(new GuiButton(1, this.width / 2 - 50, 108 + a, 98, 20, "\u00A77Singleplayer"));
           this.buttonList.add(new GuiButton(2, this.width / 2 - 50, 133 + a, 98, 20, "\u00A7fPuLse \u00A74Gaming"));
           this.buttonList.add(new GuiButton(20, this.width / 2 - 100, 60 + y + a, "\u00A7aServeur Minefus"));
           this.buttonList.add(new GuiButton(25, this.width / 2 - 100, 160 + a, 200, 20, "\u00A76Boutique"));
           GuiButton webSiteButton = new GuiButton(21, this.width / 2 - 200, 122 + a, 98, 20, " \u00A7bSite");
           GuiButton fmlModButton = new GuiButton(6, this.width /  2 - 200, 122 + a, 98, 20, "\u00A7cTeamspeak");
           fmlModButton.xPosition = this.width / 2 + 100;
           webSiteButton.width = 98;
           fmlModButton.width = 98;
           this.buttonList.add(webSiteButton);
           this.buttonList.add(fmlModButton);
           
       }
    
       /**
        * Ajoute les boutons de démonstration dans le menu principal pour les joueurs qui jouent Démo .
        */
       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)
           {
            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://pulse-gaming.gg")});
               }
               catch(Throwable throwable)
               {
                   logger.error("Couldn\'t open link", throwable);
               }
           }
    
           if(button.id == 4)
           {
               this.mc.shutdown();
           }
    
           if(button.id == 6)
           {
            String ipts3 = "ts.minefus.fr"; // address serveur ts 3
               int portTs3 = 9987; //port ts 3 celui est par defaut
               URI uri = URI.create("ts3server://"+ ipts3 +"?port="+ portTs3);
               try { Desktop.getDesktop().browse(uri);
               }
               
               catch (IOException e) {
                   // TODO Auto-generated catch block e.printStackTrace(); } }
           }
           }
    
           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.minefus.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://minefus.fr")});
               }
               catch(Throwable throwable)
               {
                   logger.error("Couldn\'t open link", throwable);
               }
               
               
               
           }
           
           if(button.id == 25)
            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://minefus.fr/boutique/")});
           }
           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);
           }
       }
    
       /**
        * Dessine le menu principal panorama.
        */
       private void drawPanorama(int x, int y, float partialTick)
       {
           Tessellator tessellator = Tessellator.instance;
           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[l]);
                   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.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);
       }
    
       /**
        * Rotation et brouille la vue skybox dans le menu principal
        */
       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);
           Tessellator tessellator = Tessellator.instance;
           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.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);
           Tessellator tessellator = Tessellator.instance;
           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.draw();
       }
    
       /**
        * Dessine l'écran et tous les composants en elle.
        */
       public void drawScreen(int x, int y, float partialTick)
       {
        int a = 20;
       
        this.info.drawIcon(this.width / 2 - 100 + a, 60 + y + a + 20);
       
        this.drawString(this.fontRendererObj, this.info.getMOTD(), 10,  20,  0xffffff);
           this.drawString(this.fontRendererObj, this.info.getIP(), 10,  30,  0xffffff);
           this.drawString(this.fontRendererObj, this.info.getVersion(), 10,  40,  0xffffff);
           this.drawString(this.fontRendererObj, String.valueOf(this.info.getAcceptTexture()), 10,  50,  0xffffff);
           this.drawString(this.fontRendererObj, String.valueOf(this.info.getPing()), 10,  60,  0xffffff);
       
       
           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!";
           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);
       }
    
       /**
        * Appelé lorsque la souris est cliquée .
        */
       protected void mouseClicked(int p_73864_1_, int p_73864_2_, int p_73864_3_)
       {
           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.func_146358_g();
                   this.mc.displayGuiScreen(guiconfirmopenlink);
               }
           }
       }
    }
    
    ```</string>
    

    Mets un logger.info(“quelque chose”) dans ton drawScreen ou ton initGui parce que je vois pas d’où ça vient : tes boutons sont déclarés et tu as bien le super.drawScreen.


  • Je ne suis pas chez moi je test des que je rentre et je te redis.

    EDIT: Alors quand je met le logger dans initGui il apparait bien une fois mais quand je le met dans le drawScreen ça me spam la console.

  • Administrateurs Rédacteurs Moddeurs confirmés

    iFuSion34 t’as dit où est le problème …
    @‘iFuSion34’:

    this.info = new ApiInfo("play.minefus.fr.25565");
    

    Ce serai pas plutot :

    this.info = new ApiInfo("play.minefus.fr:25565");
    

    Avec les deux points devant le port


  • Non j’ai essayer avec les points cela ne change rien.


  • @‘Degraduck’:

    Non j’ai essayer avec les points cela ne change rien.

    Il faut mettre “:” et non “.” …


  • Je pense qu’il faudrait surrement mieux mettre l’ip en Chiffre et non en lettre

    comme ceci :

    111.111.25.35:25565


  • Mais dans mon code j’ai modifié et mis les " : " et cela ne change rien et pour l’ip chiffré je viens de tester et aucun changement.


  • @‘Degraduck’:

    Mais dans mon code j’ai modifié et mis les " : " et cela ne change rien et pour l’ip chiffré je viens de tester et aucun changement.

    C’est-à-dire “aucun chargement” ?


  • bah que je mettes un " . " ou " : " ou alors en chiffre ou avec la redirection minefus.fr cela fais le même résultat.

  • Administrateurs Rédacteurs Moddeurs confirmés

    Mets  :, ça doit être un double point.
    Si ça ne fonctionne toujours pas, il y a un autre problème.


  • j’ai mis un double point et cela ne fonctionne toujours pas.

  • Administrateurs Rédacteurs Moddeurs confirmés

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


  • Edit : je t’envoie les sources en MP même si cela ne me dérange pas forcèrent