13 juin 2017, 12:51

Je ne voulais pas développer parce que c’est pas ton poste mais je vais le faire alors :


FMLCommonHandler.instance().bus().register(new GuiMainMenuEvent());
MinecraftForge.EVENT_BUS.register(new GuiMainMenuEvent());

Pourquoi enregistrer ta classe d’event sur les deux bus vu que GuiScreenEvent n’est déclenché que sur le le bus Forge ? Ensuite je ne comprend pas pourquoi créer une instance si cela n’est pas nécessaire mais à la limite ça ce n’est pas trop grave. Du coup ce code deviendrais :

MinecraftForge.EVENT_BUS.register(GuiMainMenuEventHandler.class);

Ensuite :


import cpw.mods.fml.client.FMLClientHandler;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import fr.baptiste.notifia.gui.GuiCustomMainMenu;
import net.minecraft.client.gui.GuiMainMenu;
import net.minecraftforge.client.event.GuiScreenEvent;

public class GuiMainMenuEvent
{
@SubscribeEvent
public void onGuiInitPost(GuiScreenEvent.InitGuiEvent.Post event)
{
if(event.gui.getClass().equals(GuiMainMenu.class))
{
FMLClientHandler.instance().getClient().displayGuiScreen(new GuiCustomMainMenu());
}
}
}

Premièrement tu utilises InitGuiEvent.Post, ce qui n’est pas l’event adapter pour remplacer totalement le Gui, il faut utiliser GuiOpenEvent. Tu vérifies si le Gui est GuiMainMenu avec event.gui.getClass().equals(GuiMainMenu.class), or c’est beaucoup plus lent que d’utiliser instanceof. Et utiliser FMLClientHandler.instance().getClient() n’est pas utile, pour la raison qu’en utilisante GuiOpenEvent il suffit de remplacer le Gui qui va s’ouvrir par celui que l’on veut. On a alors :


import net.minecraft.client.gui.GuiMainMenu;
import net.minecraftforge.client.event.GuiOpenEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;

public class GuiMainMenuEventHandler {

@SubscribeEvent
public static void onGuiOpens(GuiOpenEvent event) {
if(event.gui instanceof GuiMainMenu) {
event.gui = new GuiCustomMainMenu();
}
}

}