Résolu Boutons personnalisés dans le menu principal.
-
Bonjour, mon titre est assez explicite mais je vais tout de même vous expliquez.
Je suis entrain de créer un mod qui créer un mod qui change le menu principal, néanmoins mes boutons personnalisez ne s’affiche pas dans le menu.
Voici mes classes:Class du bouton en question:
public class LaunchButton extends GuiButton { public LaunchButton(int id, int x, int y) { super(id, x, y, 100, 100, ""); //Taille de 100 par 100 pas de nom. } public void drawButton(Minecraft mc, int mouseX, int mouseY) { this.visible = true; if(this.visible) { boolean mouseHover = mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height; mc.getTextureManager().bindTexture(ResourcesManager.getResource("lancer")); Gui.func_152125_a(this.xPosition, this.yPosition, 0, 0, 128, 128, 100, 100, 128, 128); } } }
Class principal:
public class ModMenu { @Instance("modmenu") public static ModMenu instance; public static final String MODID = "modmenu"; @SidedProxy(clientSide = "fr.pikacube.menu.proxy.ClientProxy", serverSide = "fr.pikacube.menu.proxy.CommonProxy") public static ClientProxy proxy; @EventHandler public void preInit(FMLPreInitializationEvent event) { } @EventHandler public void init(FMLInitializationEvent event) { MinecraftForge.EVENT_BUS.register(new Events()); } @EventHandler public void postInit(FMLPostInitializationEvent event) { } }
Et enfin la class avec le menu personnalisé:
@SideOnly(Side.CLIENT) public class UnicornMainMenu extends GuiScreen { protected void actionPerformed(GuiButton button) { } @Override public void initGui() { LaunchButton launchbutton = new LaunchButton(21, 100, 100); this.buttonList.add(launchbutton); } /** * Draws the screen and all the components in it. */ private void renderBackGround() { GL11.glViewport(0, 0, 256, 256); this.mc.getTextureManager().bindTexture(ResourcesManager.getResource("background")); GL11.glDisable(GL11.GL_TEXTURE_2D); GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glViewport(0, 0, this.mc.displayWidth, this.mc.displayHeight); Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); 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); tessellator.setColorRGBA_F(1.0F, 1.0F, 1.0F, 1.0F); int k = this.width; int l = this.height; tessellator.addVertexWithUV(0, 0, this.zLevel, 0, 0); tessellator.addVertexWithUV(0, l, this.zLevel, 0, 1); tessellator.addVertexWithUV(k, l, this.zLevel, 1, 1); tessellator.addVertexWithUV(k, 0, this.zLevel, 1, 0); tessellator.draw(); } public void drawScreen(int p_73863_1_, int p_73863_2_, float p_73863_3_) { renderBackGround(); this.mc.getTextureManager().bindTexture(ResourcesManager.getResource("logo")); GL11.glEnable(GL11.GL_BLEND); Gui.func_152125_a(this.width-180, 8, 0, 0, 1, 1, 471/3, 105/3, 1, 1); GL11.glDisable(GL11.GL_BLEND); } }
Je précise que mon menu s’affiche bien à la place du menu du jeu lors du lancement, mais c’est juste le bouton qui ne s’affiche pas. (Je dois certainement oublié quelque chose, quelque part mais ça fait 2 heures que je cherche quoi et je ne trouve pas).
Merci d’avance pour toute aide et sachez que je ne veut pas d’un code tout fait, je voudrais si possible des explications et éventuellement le code qui va avec.
-
yo, dans la fonction drawScreen tu n’a pas appelé le super.drawScreen(…);
public void drawScreen(int p_73863_1_, int p_73863_2_, float p_73863_3_) { renderBackGround(); super.drawScreen(p_73863_1_, p_73863_2_, p_73863_3_); this.mc.getTextureManager().bindTexture(ResourcesManager.getResource("logo")); GL11.glEnable(GL11.GL_BLEND); Gui.func_152125_a(this.width-180, 8, 0, 0, 1, 1, 471/3, 105/3, 1, 1); GL11.glDisable(GL11.GL_BLEND); }
=> la fonction drawScreen s’occupe de rendre les boutons mais si tu appel pas cette fonction dans la superclass<GuiScreen> alors le code de cette fonction dans la class GuiScreen ne sera pas a appelé
-
@spyman a dit dans Boutons personnalisés dans le menu principal. :
yo, dans la fonction drawScreen tu n’a pas appelé le super.drawScreen(…);
public void drawScreen(int p_73863_1_, int p_73863_2_, float p_73863_3_) { renderBackGround(); super.drawScreen(p_73863_1_, p_73863_2_, p_73863_3_); this.mc.getTextureManager().bindTexture(ResourcesManager.getResource("logo")); GL11.glEnable(GL11.GL_BLEND); Gui.func_152125_a(this.width-180, 8, 0, 0, 1, 1, 471/3, 105/3, 1, 1); GL11.glDisable(GL11.GL_BLEND); }
=> la fonction drawScreen s’occupe de rendre les boutons mais si tu appel pas cette fonction dans la superclass<GuiScreen> alors le code de cette fonction dans la class GuiScreen ne sera pas a appelé
Merci, sa fonctionne, je met en résolu ^^