Résolu Java : récupérer le prefix d'un joueur

Alex Fatta

Commandant de la Flotte et de la Horde
13 Août 2014
1 391
1
191
187
Bonjour !

Tout est dans le titre. NAN je déconne ! :D Pardon....

Donc, je cherche à faire un plugin qui met le pseudo d'un joueur en une autre couleur dans le tchat que pour le joueur en question.

Ex : Si je met "Bonjour Dupont". Tous les joueurs verront le message "<AlexFatta> Bonjour Dupont". Mais ce que je cherche, c'est que pour le joueur Dupont, il voit son pseudo en une autre couleur. J'ai donc le code en java qui gère cette partie-ci. La où est mon problème, c'est que j'utilise un cancel event (voir code ci-joint) et donc le message s'affiche bien, en blanc pour tous le monde et en rose pour le joueur en question. Sauf que le message est sous le format suivant : "Bonjour Dupont" et plus "<AlexFatta> Bonjour Dupont". Le préfix et le nom du joueur ont disparu.

Ma question est donc la suivante : comment récupérer le prefix vanilla ou le prefix d'un plugin de perm et le mettre avant le message ? :)

Voilà merci à tous ! :D

AlexFatta

Code:
package fr.alexfatta.pseudodisplay.listeners;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Instrument;
import org.bukkit.Note;
import org.bukkit.Note.Tone;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;

public class PlayerChatListener implements Listener {
    
    @EventHandler (priority=EventPriority.LOWEST)
    public void onChat (AsyncPlayerChatEvent event) {
        String message = event.getMessage();
        Player sender = event.getPlayer();
        
        event.setCancelled(true);
        
        for (Player op : Bukkit.getServer().getOnlinePlayers()) {
            if (message.contains(op.getName())) {
                
                String newMessage = message.replaceAll(op.getName(), ChatColor.LIGHT_PURPLE + op.getName() + ChatColor.WHITE);
                
                op.sendMessage(newMessage);
                op.playNote(op.getLocation(), Instrument.PIANO, Note.natural(1, Tone.A));
                
            } else {
                op.sendMessage(message);
            }
        }
    }

}
 

DiscowZombie

Développeur
Staff
Modérateur
Support
2 Mars 2017
2 659
1
931
298
Alsace
www.discowzombie.fr
Tout est dans le titre
Tout est dans ma réponse. Non j'déconne ;) Enfin si, j'espère que tout est dedans, enfin bref :p

Ma question est donc la suivante : comment récupérer le prefix vanilla ou le prefix d'un plugin de perm et le mettre avant le message ? :)
Alors, tu as plusieurs solutions :
  • Le
    Code:
    Bukkit.getPlayerDisplayName()
    est pas mal si ton plugin change les noms d'affichage (il y a aussi le getCustomName() mais il ne fonctionne pas super),
  • Si tu as un plugin avec une API, ton plugin permet sûrement de récupérer le préfix. Voici l'idée pour PEX :
    Code:
    machin... .getGroups()[0].getPrefix()

Voilà à peu près, avec ces solutions tu devrais t'en sortir :)
 
  • J'aime
Reactions: Alex Fatta

Alex Fatta

Commandant de la Flotte et de la Horde
13 Août 2014
1 391
1
191
187
Tout est dans ma réponse. Non j'déconne ;) Enfin si, j'espère que tout est dedans, enfin bref :p


Alors, tu as plusieurs solutions :
  • Le
    Code:
    Bukkit.getPlayerDisplayName()
    est pas mal si ton plugin change les noms d'affichage (il y a aussi le getCustomName() mais il ne fonctionne pas super),
  • Si tu as un plugin avec une API, ton plugin permet sûrement de récupérer le préfix. Voici l'idée pour PEX :
    Code:
    machin... .getGroups()[0].getPrefix()

Voilà à peu près, avec ces solutions tu devrais t'en sortir :)
Re !

Alors du coup ca veut dire que "getGroups()[0].getPrefix()" si j'utilise un plugin de grade et "getDisplayName" c'est pour le plugin seul ? Si c'est ça, tu saurais comment gérer les deux cas ou pas ? :) Sinon je vais tester ce que tu as donnée ;)

AlexFatta
 

DiscowZombie

Développeur
Staff
Modérateur
Support
2 Mars 2017
2 659
1
931
298
Alsace
www.discowzombie.fr
Alors, je vais récapituler pour être sûr d'être clair. Par exemple, quand tu te /nick avec Essentials, ça change ton nom d'affichage (ce qui correspond au Bukkit.getDisplayName()). De même, lorsque tu as un grade (avec GroupManager ou d'autres plugins comme PEX, etc...), ton nom d'affichage est changer pour ajouter ton grade devant ton pseudo.

Pour les plugins qui ont une API (par exemple, PEX) tu peut récupérer le préfixe du grade grâce à cette dernière.

Donc, finalement, pour répondre à ta question, je te conseille de remplacer le
Code:
Bukkit.getName();
par
Code:
Bukkit.getDisplayName();
dans ton message et de voir si le résultat est satisfaisant (normalement ça devrait être bon).
 

Alex Fatta

Commandant de la Flotte et de la Horde
13 Août 2014
1 391
1
191
187
Bonsoir !

Je me suis repencher sur le souci. J'ai donc ajouter PEX en "Build Path", sauf que...bah...j'arrive pas à coder avec xD @DiscowZombie je te laisse checker l'image jointe pour m'aider ;)

Erreur Eclipse.jpg

AlexFatta

PS : j'ai téléchargé la doc et j'ai regardé cette vidéo :
. Ca suffit pour apprendre le Kotlin ? :) Sinon, peux-tu envoyer des liens stp :p
 

DiscowZombie

Développeur
Staff
Modérateur
Support
2 Mars 2017
2 659
1
931
298
Alsace
www.discowzombie.fr
Bonsoir !

Je me suis repencher sur le souci. J'ai donc ajouter PEX en "Build Path", sauf que...bah...j'arrive pas à coder avec xD @DiscowZombie je te laisse checker l'image jointe pour m'aider ;)
Houla, tu m'a l'air fatigué mon petit Axel xD

Pour avoir l'utilisateur de Pex, il faut d'abord faire :
Code:
PermissionsUser user = PermissionsEx.getUser(player);
et ensuite tu peut faire ce que tu souhaites :
Code:
user.getPrefix();

La tu essaye de get le prefix à partir d'un player de Bukkit, donc forcément ça marche pas xD

D'ailleurs pour le Kotlin je t'invite à venir en parler sur le Discord "Dev &Me" (c'est plus simple). Sinon, j'ai personnellement commencé avec cette introduction : http://tutos-android-france.com/introduction-a-kotlin/.
 
  • J'aime
Reactions: Alex Fatta

Alex Fatta

Commandant de la Flotte et de la Horde
13 Août 2014
1 391
1
191
187
C'est bon mon Disco ! :D Tout fonctionne comme je veux :p Merci à toi ! :D
En même c'est sur si je met que la moitié des éléments ça va pas le faire x) J'avais pas vu la première ligne :p

AlexFatta

PS : oui un peu fatigué en ce début de semaine x)
 
  • J'aime
Reactions: DiscowZombie