Résolu Déplacer la position du chat
-
Bonjour, j’aimerais savoir si c’est possible de changer la position du chat ?
En faite, j’aimerai le monter pour pouvoir afficher autre chose en dessous.
J’ai commencé à faire quelques chose :public class GuiChat extends GuiIngame{ public GuiChat(Minecraft mc) { super(mc); } Minecraft mc = Minecraft.getMinecraft(); private GuiNewChat persistantChatGUI; private RenderGameOverlayEvent eventParent; @SubscribeEvent public void onRenderOverlay(RenderGameOverlayEvent event){ if (event.type == RenderGameOverlayEvent.ElementType.CHAT){ event.setCanceled(true); renderChat(event.resolution.getScaledWidth(),event.resolution.getScaledHeight()); } } protected void renderChat(int width, int height) { mc.mcProfiler.startSection("chat"); RenderGameOverlayEvent.Chat event = new RenderGameOverlayEvent.Chat(eventParent, 0, height - 20); GL11.glPushMatrix(); GL11.glTranslatef((float)event.posX, (float)event.posY, 0.0F); persistantChatGUI.drawChat(updateCounter); GL11.glPopMatrix(); mc.mcProfiler.endSection(); } }
Et dans le proxy, j’ai register l’event : MinecraftForge.EVENT_BUS.register(new GuiChat(Minecraft.getMinecraft()));
Le problème, c’est que ça me fais crash mon jeu quand je rejoind un monde
Donc si vous savez comment résoudre mon problème, ça serait sympas de m’aider
Merci à tous, Rremis -
Le problème c’est que tu ne sais pas trop ce que tu fais je suppose, car déjà le GuiIngame utilisé est celui de forge donc la classe est GuiIngameForge, de plus tu peux utiliser le RenderGameOverlayEvent, donc il te faut créer une classe qui va gérer cet event (il y a un tuto sur les events sur le forum), en pensant à l’enregistrer uniquement côté client (ou alors rajouter un SideOnly au-dessus de la fonction) pour ensuite pouvoir déplacer le chat
-
Ton jeu crash car persistantChatGUI et eventParent sont null.
Déjà supprime eventParent et cette ligne :
RenderGameOverlayEvent.Chat event = new RenderGameOverlayEvent.Chat(eventParent, 0, height - 20);
Et pour le translate mets directement les valeurs que tu veux.Ensuite pour le tchat il faut voir comment obtenir une instance de persistantChatGUI
Supprimes également le extends et le constructeur qui ne servent absolument à rien.
-
J’ai fais quelques modifications, mon renderChat ressemble à ça :
protected void renderChat(int width, int height) { mc.mcProfiler.startSection("chat"); GuiNewChat persistantChatGUI = new GuiNewChat(mc); GL11.glPushMatrix(); GL11.glTranslatef(0, height - 48, 0.0F); persistantChatGUI.drawChat(updateCounter); GL11.glPopMatrix(); mc.mcProfiler.endSection(); }
Le problème c’est que je n’ai pas la variable updateCounter, je pourrais faire comment pour la récuperer ?
-
Retires la ligne :
GuiNewChat persistantChatGUI = new GuiNewChat(mc);
et remplaces persistantChatGUI par :
mc.ingameGUI.getChatGUI()Et pour updateCounter : mc.ingameGUI.getUpdateCounter()
-
J’ai tout remplacé, mais en jeu, quand j’écris dans le chat, rien ne s’affiche (j’ai bien sur le retour dans la console).
Je vous montre ma class entière :
public class GuiChat { Minecraft mc = Minecraft.getMinecraft(); @SubscribeEvent public void onRenderOverlay(RenderGameOverlayEvent event){ if (event.type == RenderGameOverlayEvent.ElementType.CHAT){ event.setCanceled(true); renderChat(event.resolution.getScaledWidth(),event.resolution.getScaledHeight()); } } public void renderChat(int width, int height) { mc.mcProfiler.startSection("chat"); GL11.glPushMatrix(); GL11.glTranslatef(mc.displayWidth, mc.displayHeight / 2 - 24, 0.0F); mc.ingameGUI.getChatGUI().drawChat(mc.ingameGUI.getUpdateCounter()); GL11.glPopMatrix(); mc.mcProfiler.endSection(); } }
Je ne sais pas d’où peut venir le problème…
-
GL11.glTranslatef(mc.displayWidth, mc.displayHeight / 2 - 24, 0.0F); ``` Le problème est que tu mets la zone de dessin en dehors de l'écran (tout à droite : mc.displayWidth), remplaces-le par zéro pour que ça reste la postion x par défaut. Et (j'y m'y connait pas trop en rendu) je pense qu'il va falloir que tu mettes quelque chose comme -20 ou -45 en y car le gui du chat est dessiné à une position, et si tu ne mets pas quelque chose de négatif en y, ça va s'ajouter à la position du chat normal, j'espère que t'a compris ^^
-
@‘AymericRed’:
GL11.glTranslatef(mc.displayWidth, mc.displayHeight / 2 - 24, 0.0F); ``` Le problème est que tu mets la zone de dessin en dehors de l'écran (tout à droite : mc.displayWidth), remplaces-le par zéro pour que ça reste la postion x par défaut. Et (j'y m'y connait pas trop en rendu) je pense qu'il va falloir que tu mettes quelque chose comme -20 ou -45 en y car le gui du chat est dessiné à une position, et si tu ne mets pas quelque chose de négatif en y, ça va s'ajouter à la position du chat normal, j'espère que t'a compris ^^
L’erreur débile xD
Merci, ça marche maintenantPS: C’est possible aussi de bouger la zone d’écriture, non ?
-
De rien
Je pense que oui, ça doit-être un autre type d’élément, à voir. -
@AymericRed
Si il ne met comme coordonnées que de simples chiffres, tels que -20 ou 45, ça risque de poser problème lors du redimensionnement de Minecraft.
@Rremis Essaie de changer la taille de la fenêtre et tu vas vite voir que la zone de dessin dui chat n’est pas au même endroit. Il faut pour contrer ce problème te servir des variables gui.width et gui.height. Inspire-toi des autres classes vanilla de gui pour voir comment ils font -
@Plaigon, t’a raison, mais comme ces valeurs (qui sont fixes) sont relatives à celles du chat non modifié, si on ne mets pas de valeurs trop grande, à moins d’avoir une fenêtre vraiment petite, il n’y aura pas de problème, et comme il veut afficher quelque chose en dessous, il faut être su qu’il ait la place.