Modifier boutons
-
package fr.minecraftforgefrance.custommenu; import java.util.Arrays; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.TickRegistry; import cpw.mods.fml.relauncher.Side; @Mod(modid = "CustomMenu", name = "Custom Menu", version = "1.0.0") public class ModCustomMenu { @EventHandler public void init(FMLInitializationEvent event) { if(event.getSide().isClient()) TickRegistry.registerTickHandler(new TickHandlerClient(), Side.CLIENT); } }package fr.minecraftforgefrance.custommenu; import java.util.EnumSet; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiMainMenu; import net.minecraft.client.gui.GuiScreen; import cpw.mods.fml.common.ITickHandler; import cpw.mods.fml.common.TickType; public class TickHandlerClient implements ITickHandler { @Override public void tickStart(EnumSet <ticktype>type, Object… tickData) { } @Override public void tickEnd(EnumSet <ticktype>type, Object... tickData) { if(type.equals(EnumSet.of(TickType.CLIENT))) { Minecraft mc = Minecraft.getMinecraft(); GuiScreen currentScreen = mc.currentScreen; GuiCustomMainMenu customMenu = new GuiCustomMainMenu(); if(currentScreen instanceof GuiMainMenu && !currentScreen.equals(customMenu)) { mc.displayGuiScreen(customMenu); } } } @Override public EnumSet <ticktype>ticks() { return EnumSet.of(TickType.CLIENT); } @Override public String getLabel() { return "Client Menu Tick Handler"; } }Ensuite tu créé ta classe GuiCustomMainMenu, tu copie colle GuiMainMenu dedans en changeant tout les GuiMainMenu par GuiCustomMainMenu, et tu adapte la classe comme tu le souhaite.
Pour finir, tu compile le mod comme un mod normal, et tu en fais un .zip que tu mets dans le dossier mods.</ticktype></ticktype></ticktype>
-
Merci merci !
par contre, j’ai un souci, j’ai une erreur dans cette fonction :
private void func_130022_h() { this.minecraftRealmsButton.drawButton = true; fmlModButton.width = 98; fmlModButton.xPosition = this.width / 2 + 2; }Il me met l’erreur au niveau du .width en me disant qu’elle n’est pas public mais elle fait référence à une classe que je touche pas…
-
Supprime cette ligne, elle ne sert qu’à activer le bouton “Minecraft realms”, qui est completement inutile sur un launcher personnel.
(il faut aussi que tu supprime la ligne ou la méthode est appelé). -
Impecc, j’ai plus d’erreurs, mais par contre, mon menu n’apparait pas… (je vois juste le menu d’origine apparaitre un quart de seconde et tout s’efface, il ne me reste plus que les boutons option et quit game…
-
Il y a des erreurs dans la console ?
-
Je n’en vois pas…
nov. 13, 2013 9:23:03 PM net.minecraft.launchwrapper.LogWrapper log INFO: Loading tweak class name cpw.mods.fml.common.launcher.FMLTweaker nov. 13, 2013 9:23:03 PM net.minecraft.launchwrapper.LogWrapper log INFO: Using primary tweak class name cpw.mods.fml.common.launcher.FMLTweaker nov. 13, 2013 9:23:03 PM net.minecraft.launchwrapper.LogWrapper log INFO: Calling tweak class cpw.mods.fml.common.launcher.FMLTweaker 2013-11-13 21:23:03 [INFO] [ForgeModLoader] Forge Mod Loader version 6.4.3.883 for Minecraft 1.6.4 loading 2013-11-13 21:23:03 [INFO] [ForgeModLoader] Java is Java HotSpot(TM) 64-Bit Server VM, version 1.7.0_25, running on Windows 7:amd64:6.1, installed at C:\Program Files\Java\jre7 2013-11-13 21:23:03 [INFO] [ForgeModLoader] Managed to load a deobfuscated Minecraft name- we are in a deobfuscated environment. Skipping runtime deobfuscation 2013-11-13 21:23:04 [INFO] [STDOUT] Loaded 40 rules from AccessTransformer config file fml_at.cfg 2013-11-13 21:23:04 [INFO] [STDOUT] Loaded 109 rules from AccessTransformer config file forge_at.cfg 2013-11-13 21:23:04 [SEVERE] [ForgeModLoader] The binary patch set is missing. Either you are in a development environment, or things are not going to work! 2013-11-13 21:23:05 [INFO] [ForgeModLoader] Launching wrapped minecraft {net.minecraft.client.main.Main} 2013-11-13 21:23:06 [INFO] [Minecraft-Client] Setting user: Player606 2013-11-13 21:23:06 [INFO] [Minecraft-Client] (Session ID is null) 2013-11-13 21:23:07 [INFO] [Minecraft-Client] LWJGL Version: 2.9.0 2013-11-13 21:23:07 [INFO] [Minecraft-Client] Reloading ResourceManager: Default 2013-11-13 21:23:08 [INFO] [STDOUT] 2013-11-13 21:23:08 [INFO] [STDOUT] Starting up SoundSystem… 2013-11-13 21:23:08 [INFO] [MinecraftForge] Attempting early MinecraftForge initialization 2013-11-13 21:23:08 [INFO] [STDOUT] MinecraftForge v9.11.0.883 Initialized 2013-11-13 21:23:08 [INFO] [ForgeModLoader] MinecraftForge v9.11.0.883 Initialized 2013-11-13 21:23:08 [INFO] [STDOUT] Initializing LWJGL OpenAL 2013-11-13 21:23:08 [INFO] [STDOUT] (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org) 2013-11-13 21:23:08 [INFO] [STDOUT] OpenAL initialized. 2013-11-13 21:23:08 [INFO] [STDOUT] Replaced 101 ore recipies 2013-11-13 21:23:08 [INFO] [MinecraftForge] Completed early MinecraftForge initialization 2013-11-13 21:23:08 [INFO] [ForgeModLoader] Reading custom logging properties from C:\Users\Kévin\Desktop\forge1\mcp\jars\config\logging.properties 2013-11-13 21:23:08 [OFF] [ForgeModLoader] Logging level for ForgeModLoader logging is set to ALL 2013-11-13 21:23:08 [INFO] [ForgeModLoader] Searching C:\Users\Kévin\Desktop\forge1\mcp\jars\mods for mods 2013-11-13 21:23:08 [INFO] [STDOUT] 2013-11-13 21:23:10 [INFO] [ForgeModLoader] Forge Mod Loader has identified 4 mods to load 2013-11-13 21:23:10 [INFO] [mcp] Activating mod mcp 2013-11-13 21:23:10 [INFO] [FML] Activating mod FML 2013-11-13 21:23:10 [INFO] [Forge] Activating mod Forge 2013-11-13 21:23:10 [INFO] [CustomMenu] Activating mod CustomMenu 2013-11-13 21:23:10 [WARNING] [Forge Mod Loader] Mod Forge Mod Loader is missing a pack.mcmeta file, things may not work well 2013-11-13 21:23:10 [WARNING] [Minecraft Forge] Mod Minecraft Forge is missing a pack.mcmeta file, things may not work well 2013-11-13 21:23:10 [WARNING] [Custom Menu] Mod Custom Menu is missing a pack.mcmeta file, things may not work well 2013-11-13 21:23:10 [INFO] [Minecraft-Client] Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge, FMLFileResourcePack:Custom Menu 2013-11-13 21:23:10 [INFO] [STDOUT] 2013-11-13 21:23:10 [INFO] [STDOUT] SoundSystem shutting down… 2013-11-13 21:23:10 [INFO] [STDOUT] Author: Paul Lamb, www.paulscode.com 2013-11-13 21:23:10 [INFO] [STDOUT] 2013-11-13 21:23:10 [INFO] [STDOUT] 2013-11-13 21:23:10 [INFO] [STDOUT] Starting up SoundSystem… 2013-11-13 21:23:11 [INFO] [ForgeModLoader] Registering Forge Packet Handler 2013-11-13 21:23:11 [INFO] [ForgeModLoader] Succeeded registering Forge Packet Handler 2013-11-13 21:23:11 [INFO] [ForgeModLoader] Configured a dormant chunk cache size of 0 2013-11-13 21:23:11 [INFO] [STDOUT] Initializing LWJGL OpenAL 2013-11-13 21:23:11 [INFO] [STDOUT] (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org) 2013-11-13 21:23:11 [INFO] [STDOUT] OpenAL initialized. 2013-11-13 21:23:11 [INFO] [STDOUT] 2013-11-13 21:23:12 [INFO] [ForgeModLoader] Forge Mod Loader has successfully loaded 4 mods 2013-11-13 21:23:12 [WARNING] [Forge Mod Loader] Mod Forge Mod Loader is missing a pack.mcmeta file, things may not work well 2013-11-13 21:23:12 [WARNING] [Minecraft Forge] Mod Minecraft Forge is missing a pack.mcmeta file, things may not work well 2013-11-13 21:23:12 [WARNING] [Custom Menu] Mod Custom Menu is missing a pack.mcmeta file, things may not work well 2013-11-13 21:23:12 [INFO] [Minecraft-Client] Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge, FMLFileResourcePack:Custom Menu 2013-11-13 21:23:12 [INFO] [STDOUT] 2013-11-13 21:23:12 [INFO] [STDOUT] SoundSystem shutting down… 2013-11-13 21:23:12 [INFO] [STDOUT] Author: Paul Lamb, www.paulscode.com 2013-11-13 21:23:12 [INFO] [STDOUT] 2013-11-13 21:23:12 [INFO] [STDOUT] 2013-11-13 21:23:12 [INFO] [STDOUT] Starting up SoundSystem… 2013-11-13 21:23:13 [INFO] [STDOUT] Initializing LWJGL OpenAL 2013-11-13 21:23:13 [INFO] [STDOUT] (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org) 2013-11-13 21:23:13 [INFO] [STDOUT] OpenAL initialized. 2013-11-13 21:23:13 [INFO] [STDOUT] 2013-11-13 21:23:14 [SEVERE] [Minecraft-Client] Realms: Invalid session id 2013-11-13 21:23:14 [SEVERE] [Minecraft-Client] Realms: Invalid session idEdit :
Autant pour moi, j’avais viré un paragraphe qu’il ne fallait pas virer >< !
par contre, pour modifier le menu en jeux et le menu d’option, je ne peux pas les ajouter comme ca, mais il faut que je les ajoute dans le tickhandlerclient ou bien il faut que j’en refasse un de la meme manière ?
-
Base toi sur ça :
http://dl.mcnanotech.fr/robin4002/mods/Sources/CustomMenu-src.zip -
C’est bon pour le menu principal et pour le menu en jeu, par contre pour la page des options, c’est un peu particulier il me semble, non ?
ca crash dès que je vais sur la page…

j’ai mit ca comme code dans la classe tickHandlerClient :
GuiCustomOptions customOptions = new GuiCustomOptions(currentScreen, null); if(currentScreen instanceof GuiOptions && !currentScreen.equals(customOptions)) { mc.displayGuiScreen(customOptions); }Et je voudrai aussi savoir si quand le serveur devient down, il est possible de retourner à l’écran principal plutôt que de tomber sur la page de sélection du serveur multijoueur ?
-
@‘roideseaux’:
C’est bon pour le menu principal et pour le menu en jeu, par contre pour la page des options, c’est un peu particulier il me semble, non ?
ca crash dès que je vais sur la page…

j’ai mit ca comme code dans la classe tickHandlerClient :
GuiCustomOptions customOptions = new GuiCustomOptions(currentScreen, null); if(currentScreen instanceof GuiOptions && !currentScreen.equals(customOptions)) { mc.displayGuiScreen(customOptions); }Et je voudrai aussi savoir si quand le serveur devient down, il est possible de retourner à l’écran principal plutôt que de tomber sur la page de sélection du serveur multijoueur ?
GuiCustomOptions customOptions = new GuiCustomOptions(currentScreen, mc.gameSettings); if(currentScreen instanceof GuiOptions && !currentScreen.equals(customOptions)) { mc.displayGuiScreen(customOptions); }Tu ne peux pas déclare ta gui avec un paramètre null dans le constructeur, sinon c’est normal que ça crash avec un NPE

Pour le retour sur le menu, tu as utilisé cette fonction pour la connexion ? :
this.mc.displayGuiScreen(new GuiConnecting(this, this.mc, "ip", port));Le premier this dans le constructeur correspond au gui actuelle (donc ton menu custom), GuiConnecting ouvre se gui si la connexion échoue.
Si c’est pas bon comme ça, c’est que l’action après avoir perdu la connexion n’ouvre pas se gui, donc dans se cas je sais pas comment faire pour changer mettre ton menu lors de la déco du serveur.
Ça doit être quand même faisable avec quelques conditions, il faudrait que je prenne le temps de regarder plus en détail. -
Oui effectivement, ça fonctionne mieux, je me doutait bien que le constructeur ne pouvais pas être null mais je ne savais pas le quel mettre !
par contre, j’ai un bug, quand je clic sur done, ca ne revient pas à l’écran précédent

pourtant dans la class tickHandlerClient, j’ai bien appelé ma gui avec currentScreen en constructeur
Et pour l’autre question, j’ai déjà définit ainsi mon bouton de connexion donc effectivement, si la connexion échoue, je suis renvoyé au menu principal, mais par contre quand le serveur crash pour une raison ou pour une autre, je ratterris à la page de sélection de serveur multi !
-
Étrange, regarde ce que fais le bouton done.
Pour le retour sur le menu, je crains que ça va pas être possible, au pire si tu as supprimé le bouton multiplayer sur ton menu, tu peux faire que si le menu multiplayer est ouvert, ça ouvre le menu principale modifié. -
le bouton done fait ça :
if (par1GuiButton.id == 200) { this.mc.gameSettings.saveOptions(); this.mc.displayGuiScreen(this.parentScreen); }plus haut, il y a :
public GuiCustomOptions(GuiScreen par1GuiScreen, GameSettings par2GameSettings) { this.parentScreen = par1GuiScreen; this.options = par2GameSettings; }et j’appelle la classe avec :
GuiCustomOptions customOptions = new GuiCustomOptions(currentScreen, mc.gameSettings); if(currentScreen instanceof GuiOptions && !currentScreen.equals(customOptions)) { mc.displayGuiScreen(customOptions); }pour moi, il n’y a rien qui cloche !
-
Je vois le problème, quand tu clic sur le GuiOptions, il ouvre GuiCustomOptions, mais le currentScreen correspond à GuiOptions. Donc quand tu clic sur done, ça ouvre GuiOptions, et le tickhandler ouvre à nouveau GuiCustomOptions, ce qui fait une boucle infini.
Plutôt que passer par le TickHandler, il faudrait modifier dans le menu Custom le gui ouvert lorsqu’on clic sur option, même chose pour GuiInGame (Forge permet de changer GuiInGame facilement). -
Ok, merci beaucoup !
je pense que je n’ai plus de souci

impec pour le menu multijoueur, dès que la page est chargée, ca me swich direct sur mon menu principal

-
Petite question, c’est le même principe pour la modification de l’inventaire ?
J’ai voulu essayer mais malheureusement dans le constructeur de ma class GuiCustomInventory il me demande EntityPlayer par1EntityPlayer.
public GuiCustomInventory(EntityPlayer par1EntityPlayer) { super(par1EntityPlayer.inventoryContainer); this.allowUserInput = true; par1EntityPlayer.addStat(AchievementList.openInventory, 1); }du coups dans mon TickHandlerInventory il me le réclame:
@Override public void tickEnd(EnumSet <ticktype>type, Object… tickData){ if(type.equals(EnumSet.of(TickType.CLIENT))){ Minecraft mc = Minecraft.getMinecraft(); GuiScreen currentScreen = mc.currentScreen; List players = mc.theWorld.playerEntities; GuiCustomInventory customInventory = new GuiCustomInventory(..); //ici if(currentScreen instanceof GuiInventory && !currentScreen.equals(customInventory)) mc.displayGuiScreen(customInventory); } }J’ai essayer de plusieurs façon différente d’aller le rechercher mais malheureusement à chaque fois il me retourne null…
Merci d’avance :P</ticktype>
-
Il te faut le joueur en paramètre, je partirais plutôt sur un tickhandler de type player.
-
C’est pas con, j’ai pas spécialement pensé à regarder la documentation (Dans les commentaires du code c’est marqué que pour serveur le type PLAYER…).
Maintenant il veut bien compiler mais par contre il rentre pas dans le if
if(type.equals(EnumSet.of(TickType.PLAYER))) { }@Override public void tickEnd(EnumSet <ticktype>type, Object… tickData){ if(type.equals(EnumSet.of(TickType.PLAYER))){ Minecraft mc = Minecraft.getMinecraft(); GuiScreen currentScreen = mc.currentScreen; GuiCustomInventory customInventory = new GuiCustomInventory((EntityPlayer) tickData[0]); System.out.println("TESTTTTTTTTTTTTT"); if(currentScreen instanceof GuiInventory && !currentScreen.equals(customInventory)) mc.displayGuiScreen(customInventory); } else System.out.println("FAILLLLLLLLLLLLLLLLLLLLLLL"); }Petite info sur la documentation :
PLAYER public static final TickType PLAYER client and server side. Fired whenever the players update loop runs. arg 0 : the player arg 1 : the world the player is in ```</ticktype> -
Oui, car mc.currentScreen retourne GuiForgeInGame
Cette fonction donne le Screen ouvert, le menu de minecraft qui tourne. Elle ne renvoie pas les gui de bloc, entity, etc …
Il faudrait plutot utiliser GuiOpenEvent pour ça, mais tu n’as pas player en argument. Donc je pense pas que ce soit faisable.