Résolu problème avec la modification du MainMenu
-
Bonjour, j’ai modifier le mainmenu de minecraft mais le problème c’est que quand je lance mon jeu je vois le mainmenu de minecraft pendant 1 secondes environ puis le miens s’affiche, j’aimerai savoir comment je pourrais enlever le fait que le mainmenu de minecraft s’affiche svp ?
Classe ClientProxy : ( Il y a des commentaires car j’ai essayer différentes façons)
public class ClientProxy extends CommonProxy { public void registerRender() { System.out.println("Méthode côté client"); Display.setTitle("V1"); FMLCommonHandler.instance().bus().register(this); } @SubscribeEvent @SideOnly(Side.CLIENT) public void onTickClient(TickEvent.ClientTickEvent event) { Minecraft mc = FMLClientHandler.instance().getClient(); if ((mc.currentScreen != null) && (mc.currentScreen.getClass().equals(GuiMainMenu.class))) { mc.displayGuiScreen(new GuiCustomMainMenu()); } if ((mc.currentScreen != null) && (mc.currentScreen.getClass().equals(GuiIngameMenu.class))) { mc.displayGuiScreen(new GuiCustomInGameMenu()); } /*if (event.phase == Phase.START) { Minecraft mc = Minecraft.getMinecraft(); GuiScreen currentScreen = mc.currentScreen; GuiCustomMainMenu customMenu = new GuiCustomMainMenu(); GuiCustomInGameMenu ingameMenu = new GuiCustomInGameMenu(); if (currentScreen instanceof GuiMainMenu && !currentScreen.equals(customMenu)) { mc.displayGuiScreen(customMenu); } if (currentScreen instanceof GuiIngameMenu && !currentScreen.equals(ingameMenu)) { mc.displayGuiScreen(ingameMenu); } }*/ } /* public void changeGui (GuiOpenEvent e){ Minecraft mc = Minecraft.getMinecraft(); GuiScreen currentScreen = mc.currentScreen; GuiCustomMainMenu customMenu = new GuiCustomMainMenu(); GuiCustomInGameMenu ingameMenu = new GuiCustomInGameMenu(); if (currentScreen instanceof GuiMainMenu && !currentScreen.equals(customMenu)) { mc.displayGuiScreen(customMenu); } if (currentScreen instanceof GuiIngameMenu && !currentScreen.equals(ingameMenu)) { mc.displayGuiScreen(ingameMenu); } }*/ }
-
Il faut comparer par rapport à e.gui et non mc.currentScreen car le gui n’est pas encore ouvert lors du check.
if (e.gui.getClass().equals(GuiMainMenu.class)) { e.gui = new GuiCustomMainMenu(); }
-
Bonsoir,
La façon la plus réactif de faire est avec GuiOpenEvent, par contre ton code commenté n’est pas bon, il ne faut pas rouvrir un autre gui mais modifier le gui qui va être ouvert en faisant
event.gui = nouveauGui;
. -
Merci, j’ai fait sa, mais sa ne fonctionne dans aucun des cas, peux-tu me dire comment je peux faire stp car je ne vois pas ?
Merci
public class ClientProxy extends CommonProxy { public void registerRender() { System.out.println("Méthode côté client"); Display.setTitle("V1"); FMLCommonHandler.instance().bus().register(this); } @SubscribeEvent @SideOnly(Side.CLIENT) public void changeGui (GuiOpenEvent e){ Minecraft mc = Minecraft.getMinecraft(); GuiScreen currentScreen = mc.currentScreen; GuiCustomMainMenu customMenu = new GuiCustomMainMenu(); GuiCustomInGameMenu ingameMenu = new GuiCustomInGameMenu(); if (currentScreen instanceof GuiMainMenu && !currentScreen.equals(customMenu)) { e.gui = customMenu; } if (currentScreen instanceof GuiIngameMenu && !currentScreen.equals(ingameMenu)) { e.gui = ingameMenu; } } /*public void changeGui (GuiOpenEvent e){ Minecraft mc = FMLClientHandler.instance().getClient(); if ((mc.currentScreen != null) && (mc.currentScreen.getClass().equals(GuiMainMenu.class))) { e.gui = new GuiCustomMainMenu(); } if ((mc.currentScreen != null) && (mc.currentScreen.getClass().equals(GuiMainMenu.class))) { e.gui = new GuiCustomInGameMenu(); } }*/ }
-
Il faut enregistrer la classe d’event avec
MinecraftForge.EVENT_BUS.register(this);
et non avecFMLCommonHandler.instance().bus().register(this);
pour cette event. -
Merci Robin, sa ne m’affiche toujours pas mon main-menu personnaliser, est-ce que tu vois ou est l’erreur stp ?
public class ClientProxy extends CommonProxy { public void registerRender() { System.out.println("Méthode côté client"); Display.setTitle("V1"); MinecraftForge.EVENT_BUS.register(this); } @SubscribeEvent @SideOnly(Side.CLIENT) /*public void changeGui (GuiOpenEvent e){ Minecraft mc = Minecraft.getMinecraft(); GuiScreen currentScreen = mc.currentScreen; GuiCustomMainMenu customMenu = new GuiCustomMainMenu(); GuiCustomInGameMenu ingameMenu = new GuiCustomInGameMenu(); if (currentScreen instanceof GuiMainMenu && !currentScreen.equals(customMenu)) { e.gui = customMenu; } if (currentScreen instanceof GuiIngameMenu && !currentScreen.equals(ingameMenu)) { e.gui = ingameMenu; } }*/ public void changeGui (GuiOpenEvent e){ Minecraft mc = Minecraft.getMinecraft(); if ((mc.currentScreen != null) && (mc.currentScreen.getClass().equals(GuiMainMenu.class))) { e.gui = new GuiCustomMainMenu(); } if ((mc.currentScreen != null) && (mc.currentScreen.getClass().equals(GuiMainMenu.class))) { e.gui = new GuiCustomInGameMenu(); } } }
-
Il manque
@SubscribeEvent
au-dessus de ta fonction d’event. -
Merci, Sa ne m’affiche toujours pas mon main-menu(Le nom de la fenêtre mis plus haut fonctionne)
public class ClientProxy extends CommonProxy { public void registerRender() { System.out.println("Méthode côté client"); Display.setTitle("V1"); MinecraftForge.EVENT_BUS.register(this); } /*public void changeGui (GuiOpenEvent e){ Minecraft mc = Minecraft.getMinecraft(); GuiScreen currentScreen = mc.currentScreen; GuiCustomMainMenu customMenu = new GuiCustomMainMenu(); GuiCustomInGameMenu ingameMenu = new GuiCustomInGameMenu(); if (currentScreen instanceof GuiMainMenu && !currentScreen.equals(customMenu)) { e.gui = customMenu; } if (currentScreen instanceof GuiIngameMenu && !currentScreen.equals(ingameMenu)) { e.gui = ingameMenu; } }*/ @SubscribeEvent @SideOnly(Side.CLIENT) public void changeGui (GuiOpenEvent e){ Minecraft mc = Minecraft.getMinecraft(); if ((mc.currentScreen != null) && (mc.currentScreen.getClass().equals(GuiMainMenu.class))) { e.gui = new GuiCustomMainMenu(); } if ((mc.currentScreen != null) && (mc.currentScreen.getClass().equals(GuiMainMenu.class))) { e.gui = new GuiCustomInGameMenu(); } } }
-
Il faut comparer par rapport à e.gui et non mc.currentScreen car le gui n’est pas encore ouvert lors du check.
if (e.gui.getClass().equals(GuiMainMenu.class)) { e.gui = new GuiCustomMainMenu(); }
-
Merci mon main-menu s’affiche maintenant , mais quand je vais dans un monde solo mon jeu crash, j’ai compris où se trouve l’erreur mais je ne vois ce qu’elle est , peut-tu m’aider stp ?
CrashReport(j’ai pas trouvé la bonne balise) : https://pastebin.com/M6TFXmNC
Classe Client :
public class ClientProxy extends CommonProxy { public void registerRender() { System.out.println("Méthode côté client"); Display.setTitle("V1"); MinecraftForge.EVENT_BUS.register(this); } @SubscribeEvent @SideOnly(Side.CLIENT) public void changeGui (GuiOpenEvent e){ if (e.gui.getClass().equals(GuiMainMenu.class)) { e.gui = new GuiCustomMainMenu(); } if (e.gui.getClass().equals(GuiIngameMenu.class)) { e.gui = new GuiCustomInGameMenu(); } } }
-
Hum tu as modifié le code depuis le rapport de crash, donc les numéros de ligne ne correspondent pas.
Mais à mon avis ajouter un null check devrait être suffisant :
if (e.gui != null && e.gui.getClass().equals(GuiMainMenu.class)) {
-
Merci tout fonctionne bien