Afficher un texte à l'écran
-
J’ai un problème il me l’affiche toujours dans le chat :
Class principale ( le this.mcm c’est le GuiIngameForge ) :
GuiIngameForge :
-
Il faut passer par l’event RenderGameOverlay. Isador te l’as déjà dit.
Il ne faut JAMAIS modifier les classes de forge ou mc. -
@EventHandler public void RenderGame(RenderGameOverlayEvent event) { }Je dois ajouter quoi dedans ?, Un truc qui permet de changer la class par une autre ( Fin j’espère que tu m’as compris ) ou ajouté ce que je veux ?
-
Forge te permet de faire tout ce que tu veux sans modifier le code source grâce à un système d’évent
Celui ci est appelé lorsque le rendu ingame est fait
Utilises la class GuilUtils, elle a des fonctions statiques crées par forge pour faire des rendus de Gui (texture, boutons, texte…)
GuilUtils.drawString (…) par exemple -
Forge te permet de faire tout ce que tu veux sans modifier le code source grâce à un système d’évent
Celui ci est appelé lorsque le rendu ingame est fait
Utilises la class GuilUtils, elle a des fonctions statiques crées par forge pour faire des rendus de Gui (texture, boutons, texte…)
GuilUtils.drawString (…) par exempleTu as aussi des fonctions pratiques dans Font renderer, tu le récupère comme ça :
Minecraft.getMinecraft().fontObj
Edit: je te renvoie sur mon github plus haut
-
C’est pas vraiment la réponse à ma question juste que j’ai jamais utilisé cet event, donc forcément, Je dois refaire exactement le même principe que le disque la , Quand on met un disque dans un Jukebox le message c’est éxactement la même chose que je veux …
-
Utilises la class GuiUtils, elle a des fonctions statiques crées par forge pour faire des rendus de Gui (texture, boutons, texte…)
GuiUtils.drawString (…) par exempleTu as aussi des fonctions pratiques dans Font renderer, tu le récupère comme ça :
Minecraft.getMinecraft().fontObj
@SubscribeEvent @SideOnly(Side.CLIENT) public void onGuiIngameRender(RenderGameOverlayEvent.Post event) { if (cd_est_insere) { String str; int x; int y; str = "Coucou"; x = 0; y = 0; font.drawStringWithShadow(str, x - font.getStringWidth(str) / 2, y, Integer.MAX_VALUE); } } VOIR AUSSI: Minecraft.getMinecraft().fontRenderer.drawStringWithShadow(…)Bon là je t’ai donné tout le code, mais la prochaine fois essayes de chercher un peu plus, je t’avais donné tous les éléments

x: position x sur l’ecran
y: position y sur l’ecran
font.getStringWidth(String str); retournes la taille d’une chaine de caractere en pixel, le / 2 sert à la centrer
Integer.MAX_VALUE; couleur sous forme d’entier, pour écrire en blanc -
[font=monospaceJe look ça]
-
Fonctionne toujours pas

-
Envoie tout ton code.
-
import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiIngame; import net.minecraft.client.gui.GuiIngameMenu; import net.minecraft.client.gui.GuiMainMenu; import net.minecraft.client.gui.GuiScreen; import net.minecraft.init.Blocks; import net.minecraftforge.client.GuiIngameForge; import net.minecraftforge.client.event.ClientChatReceivedEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.common.MinecraftForge; import cpw.mods.fml.common.FMLCommonHandler; 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.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.common.gameevent.TickEvent.Phase; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @Mod(modid = BaseMod.MODID, version = BaseMod.VERSION) public class BaseMod { public static final String MODID = "GuiInGame"; public static final String VERSION = "1.0"; private Minecraft mc; protected String msgPlaying = ""; protected int msgPlayingUpFor = 0; private FontRenderer font = null; protected boolean msgIsPlaying = false; private GuiIngameForge mcm; @EventHandler public void init(FMLInitializationEvent event) { // some example code System.out.println("DIRT BLOCK >> " + Blocks.dirt.getUnlocalizedName()); FMLCommonHandler.instance().bus().register(this); } @SideOnly(Side.CLIENT) public void onGuiIngameRender(RenderGameOverlayEvent.Post event) { if (this.msgIsPlaying) { String str; int x; int y; str = "§e ~"; x = 1; y = -4; font.drawStringWithShadow(str, x - font.getStringWidth(str) / 2, y, Integer.MAX_VALUE); } } public void renderMsg(String message) { this.msgPlaying = message; this.msgPlayingUpFor = 60; this.msgIsPlaying = true; } @EventHandler public void onClientChatMessage(ClientChatReceivedEvent event) { if(event.message.getFormattedText().startsWith("§e ~")) { this.mcm.renderMsg("§e ~"); } else this.mcm.getChatGUI().printChatMessage(event.message); }Voilà
-
private FontRenderer font = null;
-> NPE
private GuiIngameForge mcm;
-> inutile + NPE à nouveau
private Minecraft mc;
-> encore NPE@SideOnly(Side.CLIENT)
public void onGuiIngameRender(RenderGameOverlayEvent.Post event)
il manque le subscribe event.
Il faut aussi ajouter l’enregistrement de l’event de forge dans la fonction init. -
[size=xx-smallIl faut aussi ajouter l’enregistrement de l’event de forge dans la fonction init.]
[size=xx-smallJe dois mêttre quoi dans la fonction init pour enregistré l’event ?]
-
package fr.frstyle13.ingame; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiIngame; import net.minecraft.client.gui.GuiIngameMenu; import net.minecraft.client.gui.GuiMainMenu; import net.minecraft.client.gui.GuiScreen; import net.minecraft.init.Blocks; import net.minecraftforge.client.GuiIngameForge; import net.minecraftforge.client.event.ClientChatReceivedEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.common.MinecraftForge; import cpw.mods.fml.common.FMLCommonHandler; 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.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.common.gameevent.TickEvent.Phase; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @Mod(modid = BaseMod.MODID, version = BaseMod.VERSION) public class BaseMod { public static final String MODID = "GuiInGame"; public static final String VERSION = "1.0"; private Minecraft mc; protected String msgPlaying = ""; protected int msgPlayingUpFor = 0; private FontRenderer font = null; protected boolean msgIsPlaying = false; private GuiIngameForge mcm; @EventHandler public void init(FMLInitializationEvent event) { // some example code System.out.println("DIRT BLOCK >> " + Blocks.dirt.getUnlocalizedName()); FMLCommonHandler.instance().bus().register(this); MinecraftForge.EVENT_BUS.register(new BaseMod()); } @SubscribeEvent @SideOnly(Side.CLIENT) public void onGuiIngameRender(RenderGameOverlayEvent.Post event) { if (this.msgIsPlaying) { String str; int x; int y; str = "§e ~"; x = 1; y = -4; Minecraft.getMinecraft().fontRenderer.drawStringWithShadow(str, x - Minecraft.getMinecraft().fontRenderer.getStringWidth(str) / 2, y, Integer.MAX_VALUE); } } public void renderMsg(String message) { this.msgPlaying = message; this.msgPlayingUpFor = 60; this.msgIsPlaying = true; } @EventHandler public void onClientChatMessage(ClientChatReceivedEvent event) { if(event.message.getFormattedText().startsWith("§e ~")) { this.mcm.renderMsg("§e ~"); } else this.mcm.getChatGUI().printChatMessage(event.message); } }Quand je passe dans la faction claim, ça me l’affiche dans le chat et non à l’écran même avec tout ce que tu m’as dit
-
MinecraftForge.EVENT_BUS.register(this);
dans initPour l’événement, fait plutôt :
@EventHandler public void onClientChatMessage(ClientChatReceivedEvent event) { if(event.message.getFormattedText().startsWith("§e ~")) { this.mcm.renderMsg("§e ~"); event.setCancel(true); } } -
Fonctionne toujours pas ça m’affiche toujours
~ Wilderness
dans le chat

-
Car ton message commence par ~ et non §e
Donc soit met juste ~, soit remplace getFormattedText par getUnformattedText -
ça change rien

-
ça ne change rien et quand je fais ça :
@EventHandler public void onClientChatMessage(ClientChatReceivedEvent event) { if(event.message.getFormattedText().startsWith("§e ~")) { this.mcm.renderMsg(event.message.getFormattedText()); } else System.out.println("Ce message s'affiche"); this.mcm.getChatGUI().printChatMessage(event.message); }Quand je met le System.out, et que je passe dans le claim rien ne s’affiche dans la console
Pourtant ça dois m’afficher : ‘Ce message s’affiche’ Vraiment bizzare -
Renvoie toute ta classe.