1. Le forum de Minecraft-France va définitivement fermer ses portes. Celui-ci restera en lecture seule mais vous ne pourrez plus y apporter de nouveaux topics. Nous vous invitons à nous rejoindre sur le Discord de Minecraft-France qui permet de présenter vos projets, discuter avec la communauté etc.. Merci à tous d'avoir fait vivre ce forum de nombreuses années. Pour nous rejoindre sur Discord, Cliquez ici

Demande d'aide pour créer un mod pour changer l'apparence du client...

Discussion dans 'Aide à la création de mod' créé par roideseaux, 29 Juil 2014.

  1. roideseaux

    roideseaux Nouveau

    Inscrit:
    9 Sept 2013
    Messages:
    9
    Points:
    32
    Sexe:
    Homme
    Bonjour à tous,

    je suis un débutant dans l'univers du modding de minecraft avec tout de même quelques bases en Java !

    Je souhaite modifier le noms des boutons, leurs emplacements, leurs taille, etc... dans les menus de minecraft en 1.7.2 avec Forge (dans un premier temps !) mais je bloque au niveau des tick...
    J'ai déjà réalisé un launcher qui charge tout seul les mods !
    J'ai pas mal cherché sur internet mais je n'ai pas trouvé mon bonheur !

    Donc pour le moment, j'ai quelques classes en regroupant plusieurs choses trouvées ci et là mais je ne suis pas sur du tout de ce que j'ai fait (d'ailleurs j'ai une erreur !) :
    - package fr.mondomaine.launcher.common
    - classe Modlauncher
    Code (cpp):
    package fr.mondomaine.launcher.common;

    import fr.mondomaine.launcher.proxy.CommonProxy;

    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.EventHandler;
    import cpw.mods.fml.common.Mod.Instance;
    import cpw.mods.fml.common.SidedProxy;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.event.FMLPostInitializationEvent;
    import cpw.mods.fml.common.event.FMLPreInitializationEvent;

    @Mod(modid = "modlauncher", name = "Mod Interface", version = "1.0.0")

    public class ModLauncher
    {
        @Instance("modlauncher")
        public static ModLauncher instance;
        public static final String MODID = "modlauncher";
        @SidedProxy(clientSide = "fr.mondomaine.launcher.proxy.ClientProxy", serverSide = "fr.mondomaine.launcher.proxy.CommonProxy")
        public static CommonProxy proxy;

        @EventHandler
        public void preInit(FMLPreInitializationEvent event)
        {
       
        }
       
        @EventHandler
        public void init(FMLInitializationEvent event)
        {
            proxy.registerRender();
        }
       
        @EventHandler
        public void postInit(FMLPostInitializationEvent event)
        {
       
        }
    }
    - package fr.mondomaine.launcher.proxy
    - classe Clientproxy
    Code (cpp):
    package fr.mondomaine.launcher.proxy;

    import net.minecraftforge.common.MinecraftForge;

    public class ClientProxy extends CommonProxy
    {
        @Override
        public void registerRender ()
        {
            System.out.println("méthode côté serveur/client");
            MinecraftForge.EVENT_BUS.register(MyTickHandlerClient());
        }
    }
     
    Ici, la méthode MyTickHandlerClient n'est pas trouvée !

    - classe CommonProxy
    Code (cpp):
    package fr.mondomaine.launcher.proxy;

    public class CommonProxy
    {
        public void registerRender()
        {
            System.out.println("méthode côté serveur/client");
        }
    }
     
    - classe MyTickHandlerClient
    Code (cpp):
    package fr.mondomaine.launcher.proxy;

    import net.minecraft.client.Minecraft;
    import net.minecraft.client.gui.GuiIngameMenu;
    import net.minecraft.client.gui.GuiScreen;
    import cpw.mods.fml.client.FMLClientHandler;
    import cpw.mods.fml.common.eventhandler.SubscribeEvent;
    import cpw.mods.fml.common.gameevent.TickEvent;

    public class MyTickHandlerClient
    {
          @SubscribeEvent
          public void onTick(TickEvent.ClientTickEvent event)
          {
                 if (event.phase == TickEvent.Phase.END)
                 {
                         Minecraft mc = FMLClientHandler.instance().getClient();
                         GuiScreen guiscreen = mc.currentScreen;
                         GuiCustomInGameMenu monMenu = new GuiCustomInGameMenu();

                         if (guiscreen instanceof GuiIngameMenu && guiscreen != monMenu)
                                 mc.displayGuiScreen(monMenu);
                 }
          }
    }
    Je ne vous donne pas la méthode GuiCustomInGmaeMenu car pour le moment, elle n'est pas modifiée (c'est la même que celle d'origine !)

    Voilà mes codes !
    Merci à ceux qui m'aideront et à ceux qui m'ont lu :)
     
  2. pifou92000

    pifou92000 Mineur de Diamants

    Inscrit:
    23 Juin 2011
    Messages:
    2 690
    Points:
    195
    Sexe:
    Homme
    Pour ton erreur le problème est que tu as oublié "new" en enregistrant le TickHandler :
    Code (cpp):
    MinecraftForge.EVENT_BUS.register(new MyTickHandlerClient());
    Et il me semble que pour un TickHandler, il faut utiliser FMLCommonHandler.instance().bus().register( ... ), mais je peux me tromper. Essaie si ça ne marche pas avec MinecraftForge.EVENT_BUS.
     
    • J'approuve J'approuve x 1
  3. roideseaux

    roideseaux Nouveau

    Inscrit:
    9 Sept 2013
    Messages:
    9
    Points:
    32
    Sexe:
    Homme
    effectivement, avec le new, ça fonctionne mieux ^^

    par contre, lorsque je copie/colle une classe d'origine dans a classe guicustom, je me retrouve avec pleins d'erreurs :/
     
  4. pifou92000

    pifou92000 Mineur de Diamants

    Inscrit:
    23 Juin 2011
    Messages:
    2 690
    Points:
    195
    Sexe:
    Homme
    J'ai quasiment jamais touché aux GUIs donc je peux pas t'aider avec ça. :/
     
  5. roideseaux

    roideseaux Nouveau

    Inscrit:
    9 Sept 2013
    Messages:
    9
    Points:
    32
    Sexe:
    Homme
    ok, mais t'inquiète, tu m'as déjà aidé ^^
    d'ailleurs, merci :)
    (mais toi qui passe par ici et qui lit un "merci", non, mon problème n'est pas encore totalement résolu ^^)
     
    #5 roideseaux, 29 Juil 2014
    Dernière édition: 29 Juil 2014
  6. robin4002

    robin4002 Support Technique
    Staff

    Inscrit:
    17 Août 2012
    Messages:
    5 478
    Points:
    229
    Sexe:
    Homme
    Pour faire un menu custom, une fois que tu as copié tout le contenue de GuiMainMenu dans ta classe custom, il faut virer tout ce qui concerne Minecraft Reamls car ça cause des erreurs.
     
  7. roideseaux

    roideseaux Nouveau

    Inscrit:
    9 Sept 2013
    Messages:
    9
    Points:
    32
    Sexe:
    Homme
    Ok ok, j'ai viré tout ce que j'étais sûr (ou presque) qui concernait minecraft realms mais il me reste une erreur et je ne sais pas si en fait partie ou pas...
    Code (cpp):
    package fr.mondomaine.launcher.proxy;

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.URI;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.List;
    import java.util.Random;
    import java.util.concurrent.atomic.AtomicInteger;

    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.GuiMainMenu;
    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.mco.ExceptionRetryCall;
    import net.minecraft.client.mco.McoClient;
    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.util.Session;
    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.util.glu.Project;

    import com.google.common.base.Strings;
    import com.google.common.collect.Lists;

    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 GuiCustomMainMenu extends GuiScreen
    {
        private static final AtomicInteger field_146973_f = new AtomicInteger(0);
        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 boolean field_96141_q = true;
        private static boolean field_96140_r;
        private static boolean field_96139_s;
        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[] {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";

        private GuiButton fmlModButton = null;

        public GuiCustomMainMenu()
        {
            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 (!OpenGlHelper.openGL21)
            {
                this.field_92025_p = "Old graphics card detected; this may prevent you from";
                this.field_146972_A = "playing in the far future as OpenGL 2.1 will be required.";
                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 par1, int par2) {}

        /**
         * 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 par1, int par2)
        {
            this.buttonList.add(new GuiButton(1, this.width / 2 - 100, par1, I18n.format("caca", new Object[0])));
            //this.buttonList.add(new GuiButton(1, this.width / 2 - 100, par1, I18n.format("menu.singleplayer", new Object[0])));
            this.buttonList.add(new GuiButton(2, this.width / 2 - 100, par1 + par2 * 1, I18n.format("menu.multiplayer", new Object[0])));
            fmlModButton = new GuiButton(6, this.width / 2 - 100, par1 + par2 * 2, "Mods");
            this.buttonList.add(fmlModButton);
        }

        /**
         * Adds Demo buttons on Main Menu for players who are playing Demo.
         */

        private void addDemoButtons(int par1, int par2)
        {
            this.buttonList.add(new GuiButton(11, this.width / 2 - 100, par1, I18n.format("menu.playdemo", new Object[0])));
            this.buttonList.add(this.buttonResetDemo = new GuiButton(12, this.width / 2 - 100, par1 + par2 * 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 p_146284_1_)
        {
            if (p_146284_1_.id == 0)
            {
                this.mc.displayGuiScreen(new GuiOptions(this, this.mc.gameSettings));
            }

            if (p_146284_1_.id == 5)
            {
                this.mc.displayGuiScreen(new GuiLanguage(this, this.mc.gameSettings, this.mc.getLanguageManager()));
            }

            if (p_146284_1_.id == 1)
            {
                this.mc.displayGuiScreen(new GuiSelectWorld(this));
            }

            if (p_146284_1_.id == 2)
            {
                this.mc.displayGuiScreen(new GuiMultiplayer(this));
            }

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

            if (p_146284_1_.id == 6)
            {
                this.mc.displayGuiScreen(new GuiModList(this));
            }

            if (p_146284_1_.id == 11)
            {
                this.mc.launchIntegratedServer("Demo_World", "Demo_World", DemoWorldServer.demoWorldSettings);
            }

            if (p_146284_1_.id == 12)
            {
                ISaveFormat isaveformat = this.mc.getSaveLoader();
                WorldInfo worldinfo = isaveformat.getWorldInfo("Demo_World");

                if (worldinfo != null)
                {
                    GuiYesNo guiyesno = GuiSelectWorld.func_146623_a(this, worldinfo.getWorldName(), 12);
                    this.mc.displayGuiScreen(guiyesno);
                }
            }
        }


        public void confirmClicked(boolean par1, int par2)
        {
            if (par1 && par2 == 12)
            {
                ISaveFormat isaveformat = this.mc.getSaveLoader();
                isaveformat.flushCache();
                isaveformat.deleteWorldDirectory("Demo_World");
                this.mc.displayGuiScreen(this);
            }
            else if (par2 == 13)
            {
                if (par1)
                {
                    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 par1, int par2, float par3)
        {
            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 + par3) / 400.0F) * 25.0F + 20.0F, 1.0F, 0.0F, 0.0F);
                GL11.glRotatef(-((float)this.panoramaTimer + par3) * 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);
        }

        /**
         * Rotate and blurs the skybox view in the main menu
         */

        private void rotateAndBlurSkybox(float par1)
        {
            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 par1, int par2, float par3)
        {
            this.mc.getFramebuffer().unbindFramebuffer();
            GL11.glViewport(0, 0, 256, 256);
            this.drawPanorama(par1, par2, par3);
            this.rotateAndBlurSkybox(par3);
            this.rotateAndBlurSkybox(par3);
            this.rotateAndBlurSkybox(par3);
            this.rotateAndBlurSkybox(par3);
            this.rotateAndBlurSkybox(par3);
            this.rotateAndBlurSkybox(par3);
            this.rotateAndBlurSkybox(par3);
            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();
        }

        /**
         * Draws the screen and all the components in it.
         */

           
        public void drawScreen(int par1, int par2, float par3)
        {
            GL11.glDisable(GL11.GL_ALPHA_TEST);
            this.renderSkybox(par1, par2, par3);
            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.2";

            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);
                }
            }
            ForgeHooksClient.renderMainMenu(this, fontRendererObj, width, height);
            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(par1, par2, par3);
        }

        /**
         * Called when the mouse is clicked.
         */

        protected void mouseClicked(int par1, int par2, int par3)
        {
            super.mouseClicked(par1, par2, par3);
            Object object = this.field_104025_t;

            synchronized (this.field_104025_t)
            {
                if (this.field_92025_p.length() > 0 && par1 >= this.field_92022_t && par1 <= this.field_92020_v && par2 >= this.field_92021_u && par2 <= this.field_92019_w)
                {
                    GuiConfirmOpenLink guiconfirmopenlink = new GuiConfirmOpenLink(this, this.field_104024_v, 13, true);
                    guiconfirmopenlink.func_146358_g();
                    this.mc.displayGuiScreen(guiconfirmopenlink);
                }
            }
        }
    }
    Voilà ma classe complète (j'ai juste modifié le nom d'un bouton pour le moment, c'est juste pour tester...) et mon erreur est dans la méthode
    à la ligne
    sur le rendermainmenu.
    J'ai essayé en virant carrément la ligne, ça fonctionne mais du coup, je ne sais pas si cette ligne sert à quelque chose ou pas ?
     
  8. robin4002

    robin4002 Support Technique
    Staff

    Inscrit:
    17 Août 2012
    Messages:
    5 478
    Points:
    229
    Sexe:
    Homme
    Elle sert a afficher les mises à jour de forge. Si tu ne veux pas le message, vire le code.
    Sinon remplaces
    public class GuiCustomMainMenu extends GuiScreen
    Par
    public class GuiCustomMainMenu extends GuiMainMenu
     
  9. roideseaux

    roideseaux Nouveau

    Inscrit:
    9 Sept 2013
    Messages:
    9
    Points:
    32
    Sexe:
    Homme
    Ok, je vais virer le code parce que quand je met extend GuiMainMenu, ca crash !!

    Merci :)

    Juste une petite question, dans le menu principal, l'image de fond est floutée, je ne sais pas trop ou je m'engage, mais j'aimerais déplacer les boutons et mettre une image qui ne serait du coup pas floutée, c'est possible ?
     
  10. robin4002

    robin4002 Support Technique
    Staff

    Inscrit:
    17 Août 2012
    Messages:
    5 478
    Points:
    229
    Sexe:
    Homme
    Oui c'est possible mais il faut changer tout le drawScreen (il faut viré ce qui concerne le panorama).
    Tu peux regarder dans le code des autres gui de minecraft pour trouver le code pour une image fixe.
     
  11. roideseaux

    roideseaux Nouveau

    Inscrit:
    9 Sept 2013
    Messages:
    9
    Points:
    32
    Sexe:
    Homme
    ok, je vais regarder ca...
    Merci :)
     
  12. roideseaux

    roideseaux Nouveau

    Inscrit:
    9 Sept 2013
    Messages:
    9
    Points:
    32
    Sexe:
    Homme
    Mon projet avance... :)
    Par contre, je me pose une question (et je pense que c'est possible...) comment faire pour lancer une commande en jeu à partir d'un bouton ?
    par exemple cliquer sur un bouton pour mettre le gm1 ?

    edit :
    et est-ce qu'il est possible de modifier les images du ressource pack de base de forge pour voir ce que donnerai mon trafic avec mon texture pack ?
     
  13. robin4002

    robin4002 Support Technique
    Staff

    Inscrit:
    17 Août 2012
    Messages:
    5 478
    Points:
    229
    Sexe:
    Homme
    Oui ça doit être possible, mais je ne sais pas comment faire, désolé :/

    Pour ta deuxième question, il faut mettre ton resourcepack dans le dossier forge/eclipse/resourcepacks/
     
  14. roideseaux

    roideseaux Nouveau

    Inscrit:
    9 Sept 2013
    Messages:
    9
    Points:
    32
    Sexe:
    Homme
    Lol...
    Je l'avais déjà mit dedans mais j'avais oublié de le sélectionner une fois le jeu lancé ^^
    Je vais chercher pour les commandes en jeu...
    Merci :)
     
  15. roideseaux

    roideseaux Nouveau

    Inscrit:
    9 Sept 2013
    Messages:
    9
    Points:
    32
    Sexe:
    Homme
    J'ai trouvé :)
    Code (cpp):
    mc.thePlayer.sendChatMessage((new StringBuilder()).append("/gm").toString());
    Par contre, est-ce qu'il est possible de récupérer des informations du jeu, comme par exemple le fait qu'un joueur est op ou non ?
     

Partager cette page