Icone au dessus de la tête quand le chat est ouvert.



  • Bonsoir,
    Je souhaiterai faire un mod qui permettrai lorsque le joueur ouvre le tchat que un icone s'affiche au dessus de sa tête indiquant aux autres joueurs du serveur que ce joueur est en train d'écrire.

    J'imagine bien pour faire ça faut un événement qui se lance coté client quand le joueur ouvre son tchat que ça l'envoie au serveur qui va communiquer l'info autres joueurs. Ca c'est la théorie mais en pratique c'est possible avec un mod? Si oui, avez vous des conseils?

    Merci d'avance.


  • Administrateurs

    Salut,
    Normalement ça devrait aussi fonctionner en pratique. Il faut essayer.
    Tu peux utiliser GuiOpenEvent et vérifier l'instance du gui ouvert.



  • Merci de ce debut de piste ! Et sur la methode pour afficher un truc au dessus du joueur une idée?


  • Administrateurs

    Il faut passer par RenderLivingEvent.Specials.Pre. C'est lui qui est appelé lors du rendu du pseudo au dessus du joueur.



  • Coté, GuiOpenEvent pas de soucis. Par contre quand il s’agit de faire un affichage je coince vraiment car je comprend bien ce que fait le RenderLivingEvent.Specials.Pre. Soit un event qui dit que le joueur va avoir un changement dans l’affichage de son render. Je cherche et je bloque vraiment sur comment faire pour ce fameux affichage. Faut il changer tout le rendu du joueur ou pas?
    Avez vous des pistes?


  • Administrateurs

    Je te conseil d'aller voir la fonction renderName de la classe RendererLivingEntity. C'est elle qui gère le pseudo au dessus du joueur / le nom custom des entités.
    C'est assez complexe car il faut faire le rendu en fonction de l'angle de la camera de l'utilisateur qui regarde.
    Enfin, toi tu as juste à prendre ce code et à remplacer l'affichage du texte par l'affichage d'un icône (avec les worldrenderer)



  • Bonjour,

    Je suis encore sur ce problème que j'ai du mal à réaliser, de ce fait, je me dis que poser quelques questions ne seraient pas inutiles.

    Pour le GuiOpenEvent je le met uniquement côté client (donc dans le package client ?) et je lui dit d'envoyer un packet au serveur quand la barre de tchat s'ouvre. Le serveur enverrait ensuite cette info à tous les autres clients pour qu'ils updatent le rendu du joueur initialement emetteur.

    Est-ce que jusque là, en théorie, je ne me suis pas trompé ?


  • Administrateurs

    C'est ça. Depuis le serveur il faut renvoyer un paquet à tous les clients proches.



  • D'accord,

    Mais j'ai un soucis avec le network, comment je peux faire pour envoyer d'un seul coup l'entityplayer et une autre variable (boolean, string, etc)?
    Parce qu'il me faut l'entity pour actualiser son rendu, non ?
    Par exemple sur ce channel :
    network.registerMessage(MyMessage.Handler.class, MyMessage.class, 1, Side.CLIENT);

    Sachant que j'utilise readUTF8String et writeUTF8String pour les méthodes fromBytes et toBytes.


  • Administrateurs

    En effet oui il faudrait l'instance de l'entité. Passes par l'id, c'est moins lourd qu'un string. Et tu peux mettre plusieurs variables à la suite dans les fonction toBytes et fromBytes (il faut juste qu'elles soient dans le même ordre dans les deux fonctions).