Rechercher dans la communauté

Affichage des résultats pour les étiquettes 'Broadcast'.

  • Rechercher par étiquettes

    Saisir les étiquettes en les séparant par une virgule.
  • Rechercher par auteur

Type du contenu


Forums

  • Communauté
    • Avant Tout
    • Annonces
    • Présentation des Membres
    • Vos Projets
    • Recrutements
  • Tutoriels
    • La base
    • Vanilla
    • Forge
    • Bukkit
    • Astuces
    • Autre
    • En attente de validation
    • En cours de rédaction
  • Créations
    • Minecraft
    • Jeux & Logiciels
    • Web
    • Suggestions
  • Le Coin Graphique
    • Galeries Personnelles
    • Galeries Publiques
    • Demandes Graphiques
  • Taverne
    • Général
    • Jeux Vidéos
    • Programmation

1 résultat trouvé

  1. Afficher un message central Cette uvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas dUtilisation Commerciale - Pas de Modification 3.0 non transposé . Tout partage implique que vous citiez l'auteur original. -[iNTRODUCTION]- Salut tout le monde ! Nous allons expliquer dans cette astuce comment afficher un message au centre de l'écran. Vous verrez, ça n'est pas bien compliqué. -[PR-REQUIS]- -[sOMMAIRE]- 1] Explications pas à pas 2] Résultat final 1] Explications pas à pas Les messages du chat sont reçus par packets lors de la phase de jeu « play ». Lors de leur réception, la méthode NetHandlerPlayerClient.handleChat(S02PacketChat) est appelée. Elle affiche simplement le message reçu dans le chat (via la GuiIngame) : public void handleChat(S02PacketChat packetChat) // Un peu de renommage ne fait pas de mal { this.gameController.ingameGUI.getChatGUI().func_146227_a(packetChat.func_148915_c()); } Ce que nous allons faire, est simplement empêcher le message d'être affiché dans le chat s'il commence par « ~ » ou par «[bROADCAST] ». Le texte non formatté du message (sans les couleurs et autres) peut être récupéré sur le IChatComponent renvoyé par S02PacketChat.func_148915_c(). Nous allons donc remplacer la méthode par : public void handleChat(S02PacketChat packetChat) { /** * Le message qui a été reçu. */ IChatComponent chatComponent = packetChat.func_148915_c(); /** * Le texte non formatté reçu. */ String unformattedText = chatComponent.getUnformattedText(); // Si il s'agit d'un broadcast if (unformattedText.startsWith(" ~") || unformattedText.startsWith("[BROADCAST] ")) { // On l'affiche en tant que tel this.gameController.ingameGUI.showCenterMessage(chatComponent.getFormattedText()); } else { // Sinon on affiche le message dans le chat this.gameController.ingameGUI.getChatGUI().func_146227_a(chatComponent); } } Il nous faut ensuite créer la méthode showCenterMessage(String) dans GuiIngame. public void showCenterMessage(String formattedText) { } Pour la faire fonctionner, nous aurons besoin de 2 fields, qu'il nous faut déclarer au dessus : /** * Dans cette variable sera stocké le message à afficher. */ private String displayedCenterMessage = null; /** * Le temps restant du message à afficher (en ticks). */ private int centerMessageTimer = 0; Nous pouvons maintenant remplir la méthode. Comme vous pouvez le constater, elle ne fait que remplir les fields. public void showCenterMessage(String formattedText) { displayedCenterMessage = formattedText; centerMessageTimer = 3 * 20; // 3 * 20 ticks = 3 secondes } Ensuite, il faut afficher le texte entré dans displayedCenterMessage. Pour cela, nous nous rendons dans GuiIngame.renderGameOverlay, et en dessous du if suivant : if (!this.mc.playerController.enableEverythingIsScrewedUpMode()) On peut ajouter le code de rendu : if (displayedCenterMessage != null) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); // Transparence du message int alpha = centerMessageTimer < 10 ? ((int) (centerMessageTimer * 25)) : 255; // Couleur de base du message (simplement blanc auquel on a ajouté la transparence) int color = 0xffffff | ((alpha & 255) << 24); // On dessine le message centré avec la couleur calculée this.mc.fontRenderer.drawString(displayedCenterMessage, (var6 - this.mc.fontRenderer.getStringWidth(displayedCenterMessage)) / 2, var7 / 2 - 15, color); } Il ne nous reste maintenant plus qu'à décrémenter le timer et à vider la variable displayedCenterMessage si le temps est écoulé. Nous nous rendons dans GuiIngame.updateTick, et nos ajoutons ce code tout au début de la fonction : // Si on est en train d'afficher un message... if (this.centerMessageTimer > 0) { // On réduit le temps restant this.centerMessageTimer--; // Et si le temps est écoulé... if (this.centerMessageTimer == 0) { // On arrête d'afficher le message displayedCenterMessage = null; } } Et c'est tout ! 2] Résultat final Dans NetHandlerPlayerClient.handleChat(S02PacketChat) : public void handleChat(S02PacketChat packetChat) { /** * Le message qui a été reçu. */ IChatComponent chatComponent = packetChat.func_148915_c(); /** * Le texte non formatté reçu. */ String unformattedText = chatComponent.getUnformattedText(); // Si il s'agit d'un broadcast if (unformattedText.startsWith(" ~") || unformattedText.startsWith("[BROADCAST] ")) { // On l'affiche en tant que tel this.gameController.ingameGUI.showCenterMessage(chatComponent.getFormattedText()); } else { // Sinon on affiche le message dans le chat this.gameController.ingameGUI.getChatGUI().func_146227_a(chatComponent); } } Dans GuiIngame : /** * Dans cette variable sera stocké le message à afficher. */ private String displayedCenterMessage = null; /** * Le temps restant du message à afficher (en ticks). */ private int centerMessageTimer = 0; public void showCenterMessage(String formattedText) { displayedCenterMessage = formattedText; centerMessageTimer = 3 * 20; // 3 * 20 ticks = 3 secondes } Dans GuiIngame.renderGameOverlay : if (displayedCenterMessage != null) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); // Transparence du message int alpha = centerMessageTimer < 10 ? ((int) (centerMessageTimer * 25)) : 255; // Couleur de base du message (simplement blanc auquel on a ajouté la transparence) int color = 0xffffff | ((alpha & 255) << 24); // On dessine le message centré avec la couleur calculée this.mc.fontRenderer.drawString(displayedCenterMessage, (var6 - this.mc.fontRenderer.getStringWidth(displayedCenterMessage)) / 2, var7 / 2 - 15, color); } Dans GuiIngame.updateTick : // Si on est en train d'afficher un message... if (this.centerMessageTimer > 0) { // On réduit le temps restant this.centerMessageTimer--; // Et si le temps est écoulé... if (this.centerMessageTimer == 0) { // On arrête d'afficher le message displayedCenterMessage = null; } } Merci d'avoir suivi cette astuce, n'hésitez pas à laisser vos commentaires !