9 mai 2015, 22:10

Modifier à sa guise le menu F3

-[INTRODUCTION]-

Salut tout le monde, c’est mon premier tutoriel et je vais vous montrer comme créer votre propre menu F3. Vous pourrez ajouter/enlever n’importe quelles valeurs afin de garder les plus essentielles, telles que les fps, le biome où vous vous trouvez, etc…

-[REQUIS]-

→ Avoir quelque bases en Java au niveau de la POO
→ Avoir créer au préalable toutes les classes nécessaire : Classe Principale Client Proxy & CommonProxy

-[SOMMAIRE]-

1) Créations des events
2) Enregistrement de l’ EventHandler

▬▬▬ BONUS ▬▬▬

- Insérer une image

1] Création de l’ EventHandler

Tout d’abord créer une classe que vous appellerez comme vous voudrez, le plus pro et le plus commun à tous les mods, je trouve est : EventHandler. Une fois cela fait rendez vous y et nous allons y ajouter les 2 méthodes suivantes :

@SideOnly(SIDE.CLIENT)
@SubscribeEvent
public void onRenderPre(RenderGameOverlayEvent.Pre event)
{
}

public void drawString(FontRenderer par1FontRenderer, String par2Str, int par3, int par4, int par5)
{
    par1FontRenderer.drawStringWithShadow(par2Str, par3, par4, par5);
}

Maintenant je vais vous expliquer bien gentiment tout ce code. Notre première méthode est précédée de deux annotations :

  • SideOnly(SIDE.CLIENT) permet de faire en sorte que la méthode ne soit exécutée qu’en Client et non sur les 2 Sides.
  • SubscribeEvent, qui permet au jeu de savoir que la méthode qui suit est une méthode d’un event.

C’est dans cette méthode que nous allons ajouter tout ce qui concerne le nouvel F3. J’ai ajouté une deuxième méthode qui elle ne sera utilisée que dans la suite de ce tutoriel. Maintenant si vous placez directement tout votre code dedans il y aura un énorme bug d’affichage et tout l’HUD disparaîtra. Pour mieux comprendre veuillez ajouter cette petite (mais très importante ^^) condition à la suite de la méthode onRenderPre :

if(event.type == RenderGameOverlayEvent.ElementType.DEBUG)
{
    event.setCanceled(true);
}

En fait l’event RenderGameOverlay modifiera tout ce qui doit être affiché à l’écran du joueur, donc si vous ne filtrez pas ce qui doit être modifié tout disparaîtra ! C’est pourquoi vous être obligé de placer cette condition. Par-exemple, si vous souhaitez modifier la barre de faim, il faudra remplacer DEBUG par FOOD.

Petite astuce : Si faites ctrl + barre espace tout en ayant sélectionné FOOD, vous pourrez alors voir tout ce qui est modifiable à l’HUD. La méthode setCanceled(boolean isCanceled) permet de supprimer le résultat de l’event.

Trêves de bavardages, reprenons le fil du tuto ! La suite est à placer dans la condition, il s’agit de tout ce qui composera votre nouveau F3.
Je vais vous montrer plusieurs codes : Afficher le nombre de fps, le biome dans lequel le joueur se trouve et enfin la direction dans lequel le joueur regarde.

Pour ce qui est des fps il va vous falloir avoir une instance de la classe Minecraft à l’aide d’une des deux méthodes suivantes : Minecraft.getMinecraft() ou FMLClientHandler.instance().getClient()

Une fois cette variable inscrite voici le code permettant de récupérer le nombre de fps : mc.debug.split(“,”, 2)[0];
Une fois cela fait vous pourrez alors l’afficher à l’écran via la deuxième méthode que je vous ai montrée au début de ce tutoriel :
this.drawString(Minecraft.getMinecraft().fontRenderer, fpsString, 10, 50, 14737632);

Le premier argument est la police de l’écriture, le deuxième est le texte à afficher, le 3ème est la position x, le 4ème est la position y, puis enfin le dernier est la couleur.
En revanche on peut aussi colorer le texte en se servant de la classe EnumChatFormatting.

Pour ce qui est des biomes voici la méthode : mc.theWorld.getBiomeGenForCoords(x, z).biomeName;

Enfin voici le code pour get la direction :

int var1 = MathHelper.floor_double((double) (event.entityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
directions = Direction.directions[var1];

Voilà c’est tout pour cette première partie, passons désormais à l’enregistrement 😃

2] Enregistrement de l’ EventHandler

Pour enregistrer une classe possédant des events, rien de plus simple, ajoutez cette ligne dans votre méthode init de votre classe principale : MinecraftForge.EVENT_BUS.register(new EventHandler());
L’event RenderGameOverlay et un event forge et non FML, c’est pour cela que nous choisissons cette méthode. Ma classe s’appelle EventHandler, en revanche si la votre est différente, changez.

▬▬▬ IMAGE ▬▬▬