Ce tutoriel est également disponible en vidéo.
Sommaire
Introduction
Vous voulez modifier le menu principal de Minecraft et vous n’arrivez pas à le faire correctement ? Voici un tutoriel qui vous montrera comment le faire proprement.
Pré-requis
Code
ClientProxy :
package fr.scarex.tutorialmod.client;
import java.awt.Desktop;
import java.net.URI;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiMainMenu;
import net.minecraft.client.gui.GuiOptions;
import net.minecraft.client.gui.GuiScreenResourcePacks;
import net.minecraftforge.client.event.GuiOpenEvent;
import net.minecraftforge.client.event.GuiScreenEvent.ActionPerformedEvent;
import net.minecraftforge.client.event.GuiScreenEvent.InitGuiEvent;
import net.minecraftforge.common.MinecraftForge;
import cpw.mods.fml.common.ObfuscationReflectionHelper;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import fr.scarex.tutorialmod.CommonProxy;
import fr.scarex.tutorialmod.TutorialMod;
/**
* @author SCAREX
*
*/
public class ClientProxy extends CommonProxy
{
public ClientProxy() {
// registering the PROXY to use events from MinecraftForge
MinecraftForge.EVENT_BUS.register(this);
}
/**
* This function is called when the init method of a GuiScreen is called and
* modify the current buttons and the splash text
*/
@SubscribeEvent
public void onInitGuiEvent(InitGuiEvent.Post event) {
if (event.gui instanceof GuiMainMenu) { // On regarde si le gui est bien le menu principal
for (Object b : event.buttonList) { // On parcourt la liste des boutons
if (((GuiButton) b).id == 14) { // Si c'est le bouton "Minecraft Realms" (qui a l'ID 14)
((GuiButton) b).visible = false; // On ne l'affiche plus
}
}
int i = event.gui.height / 4 + 48; // On définit une variable pour simplifier le code (elle est utilisée par Minecraft)
event.buttonList.add(new GuiButton(30, event.gui.width / 2 - 100, i + 24 * 2, 100, 20, "Teamspeak") { // On crée un bouton avec l'ID 30 de 100 de large et 20 de large appelé "Teamspeak"
@Override
public void mouseReleased(int x, int y) { // Lorsque l'on clique
if (Desktop.isDesktopSupported()) { // Si on peut utiliser des URIs
try {
Desktop.getDesktop().browse(new URI("ts3server://ts.minecraftforgefrance.fr?port=9987")); // On essaye de lancer TeamSpeak
} catch (Exception e) {
TutorialMod.LOGGER.warn("Douldn't open teamspeak", e);
}
}
}
});
ObfuscationReflectionHelper.setPrivateValue(GuiMainMenu.class, (GuiMainMenu) event.gui, "Bienvenue dans ce tutoriel", "splashText", "field_73975_c"); // On modifie le SplashText
}
}
/**
* This event is called when an action is performed
* This method avoid opening the resource packs GUI
*/
@SubscribeEvent
public void onActionPerformed(ActionPerformedEvent.Pre event) {
if (event.gui instanceof GuiOptions && event.button.id == 105) event.setCanceled(true); // Si l'ID est 100 (le bouton des Resource Packs), on annule
}
/**
* This event is called when a GUI is opened
* This method avoid opening the resource packs GUI
*/
@SubscribeEvent
public void onGuiOpen(GuiOpenEvent event) {
if (event.gui instanceof GuiScreenResourcePacks) event.setCanceled(true); // Même chose, si on essaye d'ouvrir les Resource Packs, on annule
}
}
Si vous toutes ces fonctionnalités ne suffisent pas, vous pouvez rediriger vers un autre GUI en utilisant le GuiOpenEvent et changer la variable event.gui en lui associant un GUI comme ceci :
@SubscribeEvent
public void onGuiOpen(GuiOpenEvent event) {
if (event.gui instanceof LeGuiVoulut) event.gui = new VotreGui();
}
NOTE : j’ai enlevé des boutons de Minecraft et bloqué certaines fonctionnalités, il est déconseillé de faire çà pour votre mod, je l’ai fait uniquement pour vous montrer comment faire.
ATTENTION : il ne faut pas oublier de rajouter “field_73975_c” dans la liste de reflection (se reporter au code modifié) pour faire fonctionner le mod dans un environnement obfusqué (une fois le mod exporté)
Résultat
Liste des commits GitHub :
Commit initial
Correction d’un bug lors de l’exportation du mod
Les commits sur github montrent clairement où ont été placés les fichiers, ainsi que ce qui a été ajouté et retiré dans le fichier.
En vidéo
https://www.youtube.com/watch?v=hv0HJDuzu9k
Crédits
Rédaction :
- SCAREX
Correction :
Ce tutoriel de SCAREX publié sur Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International