Ajout d'un header et d'un footer sur la liste de joueur
-
Sommaire
Introduction
Comme on peut le voir sur la plupart des nouveaux serveurs, lorsque l’on appuie sur TAB, le gui qui apparaît possède un header (en-tête) et un footer (bas de page). Nous allons voir comment faire de même dans ce tutoriel.
NOTE : ceci est un tutoriel utilise de code à mettre côté serveur et est donc à éviter sur un mod solo.
Pré-requis
Code
Dans la classe où est enregistré votre événement PlayerLoggedInEvent :
package VotrePackage; public class VotreClasse { @SubscribeEvent public void onPlayerLoggedInEvent(PlayerLoggedInEvent event) { try { // Création du paquet à envoyer au joueur Packet packet = new S47PacketPlayerListHeaderFooter(); // On va devoir réécrire les variables // ici on s'occupe du header Field fi1 = packet.getClass().getDeclaredFields()[0]; // On la met accessible car elle est "private" fi1.setAccessible(true); // On créé le texte qui va le remplacer ChatComponentText compH = new ChatComponentText("votre header"); // On remplace la valeur fi1.set(packet, compH); // Et on la remet en non-accessible pour éviter les problèmes d'autres mods fi1.setAccessible(false); // Même chose mais pour le footer cette fois Field fi2 = packet.getClass().getDeclaredFields()[1]; fi2.setAccessible(true); ChatComponentText compF = new ChatComponentText("votre footer"); fi2.set(packet, compF); fi2.setAccessible(false); // On envoi le paquet event.player.playerNetServerHandler.sendPacket(packet); } catch(Exception e) { System.err.println("Error sending packet tab " + e); } } }
Résultat
Voilà :
Crédits
Rédaction :
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 -
L’image ne marche pas, sinon j’essaye demain
-
@‘sosoh’:
L’image ne marche pas, sinon j’essaye demain
J’arrive pas à la rajouter, problème avec les pièces jointes.
-
Je vois ça, sinon passe par un hébergeur comme imgur.
-
Je comprends pas tout le tuto ? Tu entends quoi par un Header et un Footer ? Ils permettent de faire quoi une fois ajoutés ?
-
@‘ZeAmateis’:
Je comprends pas tout le tuto ? Tu entends quoi par un Header et un Footer ? Ils permettent de faire quoi une fois ajoutés ?
Il permet de rajouter un texte en haut (header) et en bas (footer) de la liste des joueurs lorsque l’on appuie sur TAB. C’est quelque chose de présent sur pas mal de serveurs connus.
-
Ok merci de l’éclairage !
-
Tu dit TAB ? dit plutôt la touche pour afficher la list des joueurs. Dans mon cas au début je n’ai pas compris car pour afficher la liste des joueurs j’utilise shift.
-
@‘Diangle’:
Tu dit TAB ? dit plutôt la touche pour afficher la list des joueurs. Dans mon cas au début je n’ai pas compris car pour afficher la liste des joueurs j’utilise shift.
Dans les classes de Minecraft cet overlay s’appelle GuiPlayerTabOverlay voilà pourquoi je l’appelle le tab overlay.
-
Est-ce que c’est juste en 1.8 ou aussi possible en version antérieur?
-
@‘Degraduck’:
Est-ce que c’est juste en 1.8 ou aussi possible en version antérieur?
Le texte en bas et en haut du Gui a été rajouté par Mojang en 1.8 donc ça ne peut marcher qu’en 1.8.
-
Merci de l’information
-
Ce tutoriel fonctionne en 1.12 (en modifiant le nom des classes en des fonctions vu qu’elles ont changées) mais je ne doute pas qu’il fonctionne en 1.8 aussi. Je valide ce tutoriel qui est intéressant je trouve. Pour ceux qui veulent, voici le code en 1.12 :
@SubscribeEvent public static void playerConnect(PlayerLoggedInEvent event) { if (!event.player.getEntityWorld().isRemote) { SPacketPlayerListHeaderFooter packet = new SPacketPlayerListHeaderFooter(); Field header = packet.getClass().getDeclaredFields()[0]; header.setAccessible(true); Field footer = packet.getClass().getDeclaredFields()[1]; footer.setAccessible(true); try { header.set(packet, new TextComponentString(TextFormatting.RED + "My Header")); footer.set(packet, new TextComponentString(TextFormatting.RED + "My Footer")); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } ((EntityPlayerMP)event.player).connection.sendPacket(packet); } }
-
@‘BrokenSwing’:
Ce tutoriel fonctionne en 1.12 (en modifiant le nom des classes en des fonctions vu qu’elles ont changées) mais je ne doute pas qu’il fonctionne en 1.8 aussi. Je valide ce tutoriel qui est intéressant je trouve. Pour ceux qui veulent, voici le code en 1.12 :
@SubscribeEvent public static void playerConnect(PlayerLoggedInEvent event) { if (!event.player.getEntityWorld().isRemote) { SPacketPlayerListHeaderFooter packet = new SPacketPlayerListHeaderFooter(); Field header = packet.getClass().getDeclaredFields()[0]; header.setAccessible(true); Field footer = packet.getClass().getDeclaredFields()[1]; footer.setAccessible(true); try { header.set(packet, new TextComponentString(TextFormatting.RED + "My Header")); footer.set(packet, new TextComponentString(TextFormatting.RED + "My Footer")); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } ((EntityPlayerMP)event.player).connection.sendPacket(packet); } }
Cela Ne Fonctionne Pas En 1.9.4 !
j’utiliser l’importe
import java.lang.reflect.Field;
-
Le seul truc qui peux changer entre les version est SPacketPlayerListHeaderFooter et ((EntityPlayerMP)event.player).connection.sendPacket(packet);
-
@‘BrokenSwing’:
Le seul truc qui peux changer entre les version est SPacketPlayerListHeaderFooter et ((EntityPlayerMP)event.player).connection.sendPacket(packet);
Mais le truc c’est que cela mais aucune, mais aucune erreur (J’ai bien pensé a enlevez le static car j’utilise que les fonctions non-static) !
-
T’as fonction est donc bien appelée ?
-
-
-