Помогите Отображение префикса при написании ника

Антон2007

Активный участник
Баллы
61
Привет!
К сожалению подобную темку не нашел, поэтому решил обратиться сюда.

Как сделать так, чтобы при написании ника в чат, отображался префикс?
Да-да, объяснил не очень, поэтому прикреплю скриншоты.

Как это выглядит сейчас:
5mY8jVi.png


Желаемый результатец:
DgleSxg.png


Заранее спасибо!
 
Привет!
К сожалению подобную темку не нашел, поэтому решил обратиться сюда.

Как сделать так, чтобы при написании ника в чат, отображался префикс?
Да-да, объяснил не очень, поэтому прикреплю скриншоты.

Как это выглядит сейчас:
5mY8jVi.png


Желаемый результатец:
DgleSxg.png


Заранее спасибо!
Код:
@EventHandler
public void AsyncPlayerChatEvent(AsyncPlayerChatEvent e) {
String modified = e.getMessage();
for (Player pl : Bukkit.getOnlinePlayers()) {
modified = modified.replace(pl.getName(), pl.getDisplayName());
}
e.setMessage(modified);
}
Один из вариантов.
 
По сути, Bukkit.getOnlinePlayers() возвращает List. Так почему бы не использовать его методы indexOf() и get(). Это ж быстрее )
Я как будто изначально знаю в каком индексе находится нужный обьект для замены.
 
Код:
    @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
    public void on(AsyncPlayerChatEvent e) {
        String[] msg = e.getMessage().split(" ");
        for(int i = 0; i<msg.length; i++) {
            Player player = Bukkit.getPlayerExact(msg[i]);
            if(player!=null) {                                                //Vailt api
                String prefix = ChatColor.translateAlternateColorCodes('&', this.plugin.chat.getPlayerPrefix(player));
                msg[i] = prefix+msg[i]+"§r";
                player.playNote(player.getLocation(), Instrument.PIANO, Note.natural(1, Note.Tone.A));
            }
        }
        e.setMessage(String.join(" ", msg));
    }
 
Воспользовался данным кодом:
Код:
@EventHandler
public void AsyncPlayerChatEvent(AsyncPlayerChatEvent e) {
String modified = e.getMessage();
for (Player pl : Bukkit.getOnlinePlayers()) {
modified = modified.replace(pl.getName(), pl.getDisplayName());
}
e.setMessage(modified);
}

Столкнулся с проблемой, что при написании в чат чего-либо после никнейма, цвет сообщеница отличается.
То есть, имея глобальный чат золотого цвета, после написания ника текст становится белым. Как можно исправить?

UPD:
Использую менеджер чата "Chatty".

2Vxew5L.png
 
Воспользовался данным кодом:


Столкнулся с проблемой, что при написании в чат чего-либо после никнейма, цвет сообщеница отличается.
То есть, имея глобальный чат золотого цвета, после написания ника текст становится белым. Как можно исправить?

UPD:
Использую менеджер чата "Chatty".

2Vxew5L.png
Добавь просто после ника цветкод и все. Ибо у DisplayName в конце стоит &r который сбрасывает цвета дальше. Можешь в коде заменять & знак на параграф.
 
Вообще, с моим кодом возможна рекурсивная замена текста. То есть твой префикс в чате замениться по несколько раз если ты напишешь еще раз свой или еще чей нибудь ник. В этой теме есть код по лучше
 
Воспользовался данным кодом:


Столкнулся с проблемой, что при написании в чат чего-либо после никнейма, цвет сообщеница отличается.
То есть, имея глобальный чат золотого цвета, после написания ника текст становится белым. Как можно исправить?

UPD:
Использую менеджер чата "Chatty".

2Vxew5L.png
Дык верни цвет какой был и все.
Сюда вместо "§r" -> msg = prefix+msg+"§r";
 
Код:
    private static Pattern patern;
    static {
        patern = Pattern.compile("(?i)" + String.valueOf('§') + "[0-9A-FK-OR]");
    }

    private String repl(String string) {
        if (string.lastIndexOf('§') != -1 && string.substring(string.lastIndexOf('§')).length() > 1) {
            String tmp = string.substring(string.lastIndexOf('§'), string.lastIndexOf('§') + 2);
            if (patern.matcher(tmp).matches()) {
                return tmp;
            }
        }
        return "§r";
    }

    @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
    public void on(AsyncPlayerChatEvent e) {
        String[] msg = ChatColor.translateAlternateColorCodes('&', e.getMessage()).split(" ");
        String color = "§r";
        for (int i = 0; i < msg.length; i++) {
            Player player = Bukkit.getPlayerExact(msg[i]);
            if (player != null) {//Цвет затычка если нет цветного префикса.  Префикс через Vailt api
                String prefix = "§e@" + this.plugin.chat.getPlayerPrefix(player);
                msg[i] = prefix + msg[i] + color;
                player.playNote(player.getLocation(), Instrument.PIANO, Note.natural(1, Note.Tone.A));
            } else {
                color = repl(msg[i]);
            }
        }
        e.setMessage(String.join(" ", msg));
    }
 
Последнее редактирование:
Привет!
К сожалению подобную темку не нашел, поэтому решил обратиться сюда.

Как сделать так, чтобы при написании ника в чат, отображался префикс?
Да-да, объяснил не очень, поэтому прикреплю скриншоты.

Как это выглядит сейчас:
5mY8jVi.png


Желаемый результатец:
DgleSxg.png


Заранее спасибо!
Если тебе попроще надо, то:
(Итак понятно, что все это в
AsyncPlayerChatEvent и т.п., я пишу идею)
PHP:
//Писал на телефоне быстро, поэтому, если есть ошибки подправь. Самое простое и понятное для тебя, что только смог придумать))
for(String str : chatMsg.split(" "))
{
for(Player p : Bukkit.getOnlinePlayers()) //для оффлайн игроков в join и quit ивентах нужно добавлять и удалять игроков соответственно и в ещё один цикл сделать, чтобы те, кто онлайн были выделены, например, зеленям, а кто офлайн- красным.
{
if(str.equalsIgnoreCase(p.getDisplayName())
{
chatMsg.replaceAll(str, ChatColor.GOLD + "[" + str + "]" + ChatColor.RESET); //т.е. если я напишу ник игрока, как TeSt, то в чате он и выделится, как TeSt))
}
}
}
 
Последнее редактирование:
Назад
Верх Низ