Résolu GuiMainMenu custom 1.8
-
Version : 1.8
*Code : *package fr.mineria.pichot; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiMainMenu; import net.minecraftforge.fml.client.FMLClientHandler; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @Mod(modid = "custommenu", name = "CMenu", version = "1.1.0") public class Main { @EventHandler public void init(FMLInitializationEvent event) { if(event.getSide().isClient()) { FMLCommonHandler.instance().bus().register(this); } } @SubscribeEvent @SideOnly(Side.CLIENT) public void onTick(TickEvent.ClientTickEvent event) { Minecraft mc = FMLClientHandler.instance().getClient(); if(mc.currentScreen != null && mc.currentScreen.getClass().equals(GuiMainMenu.class)) { mc.displayGuiScreen(new GuiMenu()); } } }
package fr.mineria.pichot; import com.google.common.collect.Lists; 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.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.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.GlStateManager; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.WorldRenderer; import net.minecraft.client.renderer.texture.DynamicTexture; import net.minecraft.client.resources.I18n; import net.minecraft.realms.RealmsBridge; 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 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; public class GuiMenu extends GuiScreen implements GuiYesNoCallback { private static final AtomicInteger field_175373_f = new AtomicInteger(0); private static final Logger logger = LogManager.getLogger(); private static final Random field_175374_h = 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_175375_v = true; 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 GuiButton field_175372_K; private static final String __OBFID = "CL_00001154"; public GuiMenu() { this.field_146972_A = field_96138_a; this.splashText = "missingno"; BufferedReader var1 = null; try { ArrayList var2 = Lists.newArrayList(); var1 = new BufferedReader(new InputStreamReader(Minecraft.getMinecraft().getResourceManager().getResource(splashTexts).getInputStream(), Charsets.UTF_8)); String var3; while ((var3 = var1.readLine()) != null) { var3 = var3.trim(); if (!var3.isEmpty()) { var2.add(var3); } } if (!var2.isEmpty()) { do { this.splashText = (String)var2.get(field_175374_h.nextInt(var2.size())); } while (this.splashText.hashCode() == 125780783); } } catch (IOException var12) { ; } finally { if (var1 != null) { try { var1.close(); } catch (IOException var11) { ; } } } this.updateCounter = field_175374_h.nextFloat(); this.field_92025_p = ""; if (!GLContext.getCapabilities().OpenGL20 && !OpenGlHelper.areShadersSupported()) { this.field_92025_p = I18n.format("title.oldgl1", new Object[0]); this.field_146972_A = I18n.format("title.oldgl2", new Object[0]); this.field_104024_v = "https://help.mojang.com/customer/portal/articles/325948?ref=game"; } } /** * Called from the main game loop to update the screen. */ public void updateScreen() { ++this.panoramaTimer; } /** * Returns true if this GUI should pause the game when it is displayed in single-player */ public boolean doesGuiPauseGame() { return false; } /** * Fired when a key is typed (except F11 who toggle full screen). This is the equivalent of * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) */ protected void keyTyped(char typedChar, int keyCode) throws IOException {} /** * 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 var1 = Calendar.getInstance(); var1.setTime(new Date()); if (var1.get(2) + 1 == 11 && var1.get(5) == 9) { this.splashText = "Happy birthday, ez!"; } else if (var1.get(2) + 1 == 6 && var1.get(5) == 1) { this.splashText = "Happy birthday, Notch!"; } else if (var1.get(2) + 1 == 12 && var1.get(5) == 24) { this.splashText = "Merry X-mas!"; } else if (var1.get(2) + 1 == 1 && var1.get(5) == 1) { this.splashText = "Happy new year!"; } else if (var1.get(2) + 1 == 10 && var1.get(5) == 31) { this.splashText = "OOoooOOOoooo! Spooky!"; } boolean var2 = true; int var3 = this.height / 4 + 48; if (this.mc.isDemo()) { this.addDemoButtons(var3, 24); } else { this.addSingleplayerMultiplayerButtons(var3, 24); } this.buttonList.add(new GuiButton(0, this.width / 2 - 100, var3 + 72 + 12, 98, 20, I18n.format("menu.options", new Object[0]))); this.buttonList.add(new GuiButton(4, this.width / 2 + 2, var3 + 72 + 12, 98, 20, I18n.format("menu.quit", new Object[0]))); this.buttonList.add(new GuiButtonLanguage(5, this.width / 2 - 124, var3 + 72 + 12)); Object var4 = 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 var5 = Math.max(this.field_92023_s, this.field_92024_r); this.field_92022_t = (this.width - var5) / 2; this.field_92021_u = ((GuiButton)this.buttonList.get(0)).yPosition - 24; this.field_92020_v = this.field_92022_t + var5; 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 p_73969_1_, int p_73969_2_) { this.buttonList.add(new GuiButton(1, this.width / 2 - 100, p_73969_1_, I18n.format("menu.singleplayer", new Object[0]))); this.buttonList.add(new GuiButton(2, this.width / 2 - 100, p_73969_1_ + p_73969_2_ * 1, I18n.format("menu.multiplayer", new Object[0]))); this.buttonList.add(this.field_175372_K = new GuiButton(14, this.width / 2 - 100, p_73969_1_ + p_73969_2_ * 2, I18n.format("menu.online", new Object[0]))); } /** * Adds Demo buttons on Main Menu for players who are playing Demo. */ private void addDemoButtons(int p_73972_1_, int p_73972_2_) { this.buttonList.add(new GuiButton(11, this.width / 2 - 100, p_73972_1_, I18n.format("menu.playdemo", new Object[0]))); this.buttonList.add(this.buttonResetDemo = new GuiButton(12, this.width / 2 - 100, p_73972_1_ + p_73972_2_ * 1, I18n.format("menu.resetdemo", new Object[0]))); ISaveFormat var3 = this.mc.getSaveLoader(); WorldInfo var4 = var3.getWorldInfo("Demo_World"); if (var4 == null) { this.buttonResetDemo.enabled = false; } } protected void actionPerformed(GuiButton button) throws IOException { if (button.id == 0) { this.mc.displayGuiScreen(new GuiOptions(this, this.mc.gameSettings)); } if (button.id == 5) { this.mc.displayGuiScreen(new GuiLanguage(this, this.mc.gameSettings, this.mc.getLanguageManager())); } if (button.id == 1) { this.mc.displayGuiScreen(new GuiSelectWorld(this)); } if (button.id == 2) { this.mc.displayGuiScreen(new GuiMultiplayer(this)); } if (button.id == 14 && this.field_175372_K.visible) { this.switchToRealms(); } if (button.id == 4) { this.mc.shutdown(); } if (button.id == 11) { this.mc.launchIntegratedServer("Demo_World", "Demo_World", DemoWorldServer.demoWorldSettings); } if (button.id == 12) { ISaveFormat var2 = this.mc.getSaveLoader(); WorldInfo var3 = var2.getWorldInfo("Demo_World"); if (var3 != null) { GuiYesNo var4 = GuiSelectWorld.func_152129_a(this, var3.getWorldName(), 12); this.mc.displayGuiScreen(var4); } } } private void switchToRealms() { RealmsBridge var1 = new RealmsBridge(); var1.switchToRealms(this); } public void confirmClicked(boolean result, int id) { if (result && id == 12) { ISaveFormat var6 = this.mc.getSaveLoader(); var6.flushCache(); var6.deleteWorldDirectory("Demo_World"); this.mc.displayGuiScreen(this); } else if (id == 13) { if (result) { try { Class var3 = Class.forName("java.awt.Desktop"); Object var4 = var3.getMethod("getDesktop", new Class[0]).invoke((Object)null, new Object[0]); var3.getMethod("browse", new Class[] {URI.class}).invoke(var4, new Object[] {new URI(this.field_104024_v)}); } catch (Throwable var5) { logger.error("Couldn\'t open link", var5); } } this.mc.displayGuiScreen(this); } } /** * Draws the main menu panorama */ private void drawPanorama(int p_73970_1_, int p_73970_2_, float p_73970_3_) { Tessellator var4 = Tessellator.getInstance(); WorldRenderer var5 = var4.getWorldRenderer(); GlStateManager.matrixMode(5889); GlStateManager.pushMatrix(); GlStateManager.loadIdentity(); Project.gluPerspective(120.0F, 1.0F, 0.05F, 10.0F); GlStateManager.matrixMode(5888); GlStateManager.pushMatrix(); GlStateManager.loadIdentity(); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); GlStateManager.rotate(180.0F, 1.0F, 0.0F, 0.0F); GlStateManager.rotate(90.0F, 0.0F, 0.0F, 1.0F); GlStateManager.enableBlend(); GlStateManager.disableAlpha(); GlStateManager.disableCull(); GlStateManager.depthMask(false); GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); byte var6 = 8; for (int var7 = 0; var7 < var6 * var6; ++var7) { GlStateManager.pushMatrix(); float var8 = ((float)(var7 % var6) / (float)var6 - 0.5F) / 64.0F; float var9 = ((float)(var7 / var6) / (float)var6 - 0.5F) / 64.0F; float var10 = 0.0F; GlStateManager.translate(var8, var9, var10); GlStateManager.rotate(MathHelper.sin(((float)this.panoramaTimer + p_73970_3_) / 400.0F) * 25.0F + 20.0F, 1.0F, 0.0F, 0.0F); GlStateManager.rotate(-((float)this.panoramaTimer + p_73970_3_) * 0.1F, 0.0F, 1.0F, 0.0F); for (int var11 = 0; var11 < 6; ++var11) { GlStateManager.pushMatrix(); if (var11 == 1) { GlStateManager.rotate(90.0F, 0.0F, 1.0F, 0.0F); } if (var11 == 2) { GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F); } if (var11 == 3) { GlStateManager.rotate(-90.0F, 0.0F, 1.0F, 0.0F); } if (var11 == 4) { GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F); } if (var11 == 5) { GlStateManager.rotate(-90.0F, 1.0F, 0.0F, 0.0F); } this.mc.getTextureManager().bindTexture(titlePanoramaPaths[var11]); var5.startDrawingQuads(); var5.setColorRGBA_I(16777215, 255 / (var7 + 1)); float var12 = 0.0F; var5.addVertexWithUV(-1.0D, -1.0D, 1.0D, (double)(0.0F + var12), (double)(0.0F + var12)); var5.addVertexWithUV(1.0D, -1.0D, 1.0D, (double)(1.0F - var12), (double)(0.0F + var12)); var5.addVertexWithUV(1.0D, 1.0D, 1.0D, (double)(1.0F - var12), (double)(1.0F - var12)); var5.addVertexWithUV(-1.0D, 1.0D, 1.0D, (double)(0.0F + var12), (double)(1.0F - var12)); var4.draw(); GlStateManager.popMatrix(); } GlStateManager.popMatrix(); GlStateManager.colorMask(true, true, true, false); } var5.setTranslation(0.0D, 0.0D, 0.0D); GlStateManager.colorMask(true, true, true, true); GlStateManager.matrixMode(5889); GlStateManager.popMatrix(); GlStateManager.matrixMode(5888); GlStateManager.popMatrix(); GlStateManager.depthMask(true); GlStateManager.enableCull(); GlStateManager.enableDepth(); } /** * Rotate and blurs the skybox view in the main menu */ private void rotateAndBlurSkybox(float p_73968_1_) { 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); GlStateManager.enableBlend(); GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); GlStateManager.colorMask(true, true, true, false); Tessellator var2 = Tessellator.getInstance(); WorldRenderer var3 = var2.getWorldRenderer(); var3.startDrawingQuads(); GlStateManager.disableAlpha(); byte var4 = 3; for (int var5 = 0; var5 < var4; ++var5) { var3.setColorRGBA_F(1.0F, 1.0F, 1.0F, 1.0F / (float)(var5 + 1)); int var6 = this.width; int var7 = this.height; float var8 = (float)(var5 - var4 / 2) / 256.0F; var3.addVertexWithUV((double)var6, (double)var7, (double)this.zLevel, (double)(0.0F + var8), 1.0D); var3.addVertexWithUV((double)var6, 0.0D, (double)this.zLevel, (double)(1.0F + var8), 1.0D); var3.addVertexWithUV(0.0D, 0.0D, (double)this.zLevel, (double)(1.0F + var8), 0.0D); var3.addVertexWithUV(0.0D, (double)var7, (double)this.zLevel, (double)(0.0F + var8), 0.0D); } var2.draw(); GlStateManager.enableAlpha(); GlStateManager.colorMask(true, true, true, true); } /** * Renders the skybox in the main menu */ private void renderSkybox(int p_73971_1_, int p_73971_2_, float p_73971_3_) { this.mc.getFramebuffer().unbindFramebuffer(); GlStateManager.viewport(0, 0, 256, 256); this.drawPanorama(p_73971_1_, p_73971_2_, p_73971_3_); this.rotateAndBlurSkybox(p_73971_3_); this.rotateAndBlurSkybox(p_73971_3_); this.rotateAndBlurSkybox(p_73971_3_); this.rotateAndBlurSkybox(p_73971_3_); this.rotateAndBlurSkybox(p_73971_3_); this.rotateAndBlurSkybox(p_73971_3_); this.rotateAndBlurSkybox(p_73971_3_); this.mc.getFramebuffer().bindFramebuffer(true); GlStateManager.viewport(0, 0, this.mc.displayWidth, this.mc.displayHeight); Tessellator var4 = Tessellator.getInstance(); WorldRenderer var5 = var4.getWorldRenderer(); var5.startDrawingQuads(); float var6 = this.width > this.height ? 120.0F / (float)this.width : 120.0F / (float)this.height; float var7 = (float)this.height * var6 / 256.0F; float var8 = (float)this.width * var6 / 256.0F; var5.setColorRGBA_F(1.0F, 1.0F, 1.0F, 1.0F); int var9 = this.width; int var10 = this.height; var5.addVertexWithUV(0.0D, (double)var10, (double)this.zLevel, (double)(0.5F - var7), (double)(0.5F + var8)); var5.addVertexWithUV((double)var9, (double)var10, (double)this.zLevel, (double)(0.5F - var7), (double)(0.5F - var8)); var5.addVertexWithUV((double)var9, 0.0D, (double)this.zLevel, (double)(0.5F + var7), (double)(0.5F - var8)); var5.addVertexWithUV(0.0D, 0.0D, (double)this.zLevel, (double)(0.5F + var7), (double)(0.5F + var8)); var4.draw(); } /** * Draws the screen and all the components in it. Args : mouseX, mouseY, renderPartialTicks */ public void drawScreen(int mouseX, int mouseY, float partialTicks) { GlStateManager.disableAlpha(); this.renderSkybox(mouseX, mouseY, partialTicks); GlStateManager.enableAlpha(); Tessellator var4 = Tessellator.getInstance(); WorldRenderer var5 = var4.getWorldRenderer(); short var6 = 274; int var7 = this.width / 2 - var6 / 2; byte var8 = 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); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); if ((double)this.updateCounter < 1.0E-4D) { this.drawTexturedModalRect(var7 + 0, var8 + 0, 0, 0, 99, 44); this.drawTexturedModalRect(var7 + 99, var8 + 0, 129, 0, 27, 44); this.drawTexturedModalRect(var7 + 99 + 26, var8 + 0, 126, 0, 3, 44); this.drawTexturedModalRect(var7 + 99 + 26 + 3, var8 + 0, 99, 0, 26, 44); this.drawTexturedModalRect(var7 + 155, var8 + 0, 0, 45, 155, 44); } else { this.drawTexturedModalRect(var7 + 0, var8 + 0, 0, 0, 155, 44); this.drawTexturedModalRect(var7 + 155, var8 + 0, 0, 45, 155, 44); } var5.setColorOpaque_I(-1); GlStateManager.pushMatrix(); GlStateManager.translate((float)(this.width / 2 + 90), 70.0F, 0.0F); GlStateManager.rotate(-20.0F, 0.0F, 0.0F, 1.0F); float var9 = 1.8F - MathHelper.abs(MathHelper.sin((float)(Minecraft.getSystemTime() % 1000L) / 1000.0F * (float)Math.PI * 2.0F) * 0.1F); var9 = var9 * 100.0F / (float)(this.fontRendererObj.getStringWidth(this.splashText) + 32); GlStateManager.scale(var9, var9, var9); this.drawCenteredString(this.fontRendererObj, this.splashText, 0, -8, -256); GlStateManager.popMatrix(); String var10 = "Minecraft 1.8"; if (this.mc.isDemo()) { var10 = var10 + " Demo"; } this.drawString(this.fontRendererObj, var10, 2, this.height - 10, -1); String var11 = "Copyright Mojang AB. Do not distribute!"; this.drawString(this.fontRendererObj, var11, this.width - this.fontRendererObj.getStringWidth(var11) - 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(mouseX, mouseY, partialTicks); } /** * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton */ protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException { super.mouseClicked(mouseX, mouseY, mouseButton); Object var4 = this.field_104025_t; synchronized (this.field_104025_t) { if (this.field_92025_p.length() > 0 && mouseX >= this.field_92022_t && mouseX <= this.field_92020_v && mouseY >= this.field_92021_u && mouseY <= this.field_92019_w) { GuiConfirmOpenLink var5 = new GuiConfirmOpenLink(this, this.field_104024_v, 13, true); var5.disableSecurityWarning(); this.mc.displayGuiScreen(var5); } } } }
Erreur lors du lancement :
–-- Minecraft Crash Report ---- // Oh - I know what I did wrong! Time: 18/06/15 13:53 Description: Unexpected error java.lang.NoSuchFieldError: currentScreen at fr.mineria.pichot.MineriaMain.onTick(MineriaMain.java:32) at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_6_MineriaMain_onTick_ClientTickEvent.invoke(.dynamic) at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:55) at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:138) at net.minecraftforge.fml.common.FMLCommonHandler.onPreClientTick(FMLCommonHandler.java:366) at net.minecraft.client.Minecraft.func_71407_l(Minecraft.java:1617) at net.minecraft.client.Minecraft.func_71411_J(Minecraft.java:1028) at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:345) at net.minecraft.client.main.Main.main(SourceFile:120) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- System Details -- Details: Minecraft Version: 1.8 Operating System: Windows 7 (amd64) version 6.1 Java Version: 1.8.0_25, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 56250448 bytes (53 MB) / 423710720 bytes (404 MB) up to 3207856128 bytes (3059 MB) JVM Flags: 6 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xmx3G -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:-UseAdaptiveSizePolicy -Xmn128M IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 FML: MCP v9.10 FML v8.0.99.99 Minecraft Forge 11.14.3.1446 4 mods loaded, 4 mods active mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available FML{8.0.99.99} [Forge Mod Loader] (forge-1.8-11.14.3.1446.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available Forge{11.14.3.1446} [Minecraft Forge] (forge-1.8-11.14.3.1446.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available mineriamenu{1.1.0} [Mineria Menu] (MineriaMenu.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available Loaded coremods (and transformers): GL info: ' Vendor: 'ATI Technologies Inc.' Version: '4.4.13283 Compatibility Profile Context 14.501.1003.0' Renderer: 'AMD Radeon R9 200 Series' Launched Version: 1.8-Forge11.14.3.1446 LWJGL: 2.9.1 OpenGL: AMD Radeon R9 200 Series GL version 4.4.13283 Compatibility Profile Context 14.501.1003.0, ATI Technologies Inc. GL Caps: Using GL 1.3 multitexturing. Using GL 1.3 texture combiners. Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported. Shaders are available because OpenGL 2.1 is supported. VBOs are available because OpenGL 1.5 is supported. Using VBOs: No Is Modded: Definitely; Client brand changed to 'fml,forge' Type: Client (map_client.txt) Resource Packs: [#MasterPack V4.zip] Current Language: English (US) Profiler Position: N/A (disabled)
-
il trouve pas le field currentScreen
-
Pourquoi tout le monde utilise des tick event pour faire apparaître des Gui ? Il y a un événement pour çà : l’InitGuiEvent avec dedans un Gui, tu regarde si le Gui est instanceof GuiMainMenu et voilà.
-
Pourriez-vous me montrer comment faire ?
-
Tu l’enregistres avec MinecraftForge.EVENT_BUS.register(new TaClasse()).
Et tu mets çà dans ta classe par exemple :
@SubscribeEvent public void onInitGuiEvent(final InitGuiEvent.Post event) { ST18.log.debug("initGuiEvent called"); if (event.gui instanceof GuiMainMenu) { event.buttonList.add(new GuiButton(22, event.gui.width / 2 + 108, event.gui.height / 4 + 132, 64, 32, "") { protected final ResourceLocation buttonTexture = new ResourceLocation(ST18.MODID, "textures/gui/boutique.png"); @Override public void drawButton(Minecraft mc, int mouseX, int mouseY) { if (this.visible) { mc.getTextureManager().bindTexture(buttonTexture); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); boolean flag = mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height; int k = 0; if (flag) k += this.height; this.drawTexturedModalRect(this.xPosition, this.yPosition, 0, k, this.width, this.height); } } }); } }
-
ST18 je trouve pas
-
ST18 c’est le nom de mon mod et le nom de ma classe principale, le code que je t’ai donné viens de ce mod. Il vaut mieux comprendre ce que fait le code avant de le copier.
-
@SCAREX, si il veut changer tout le gui le code de remplacement reste mieux.
@MyStaiR je suppose que tu ne rencontre pas ce problème lorsque tu test sur eclipse mais uniquement lorsque tu lances le jeu une fois le mod installé, non ?
Si oui, tu as mal exporté le mod, il ne faut pas utiliser l’option d’eclipse mais faire un gradlew build (de la même manière que pour setup forge) puis récupérer le fichier .jar dans le dossier forge/build/libs/, il est nommé modid-1.0.jar par défaut. -
Je parle juste de l’event, car dans l’InitGuiEvent, il y a une variable contenant le Gui ce qui évite les NPEs.
Il suffit juste de faire çà :if (event.gui instanceof GuiMainMenu) {Minecraft.getMinecraft().displayGuiScreen(new TonScreen())}
-
En effet, c’est même plus optimisé que vérifier à chaque tick.
-
Désormais je lance plus d’erreurs cependant le Gui ne s’affiche pas.
Je débute actuellement en modding forge et j’essaye de comprendre comment tout fonctionne je mod principalement en vanilla ^^
-
Le problème est que tu enregistres l’événement avec l’event bus de fml, or il faut celui de forge : MinecraftForge.EVENT_BUS.register(this).
-
J’ai fais je pense comme tu m’as dis qu’ai-je oublié ?
-
Apprends à utiliser les événements d’abord. Un EventBus sert à enregistrer une classe, au moment où tu l’enregistres, il récupère toutes les méthodes avec l’annotation @EventHandler (pour forge) ou @SubscribeEvent (pour fml il me semble, à vérifier). Or ici tu enregistres une classe qui n’as pas de méthode avec l’annotation SubscribeEvent.
-
SubscribeEvent pour les event forge et fml.
EventHandler c’est pour les stades d’initialisation du mod.
-
Je pige pas x), ce que je dois faire sur la class
-
-
Remplacer new GuiMain() par this …