1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Помощь", создана пользователем Антон2007, 2 апр 2019.

  1. Автор темы
    Антон2007

    Антон2007 Активный участник

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

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

    Как это выглядит сейчас:
    [​IMG]

    Желаемый результатец:
    [​IMG]

    Заранее спасибо!
     
  2. MurlikMurlik

    MurlikMurlik Активный участник Пользователь

    Баллы:
    96
    Такая штука и 50 руб не стоит
     
  3. MurlikMurlik

    MurlikMurlik Активный участник Пользователь

    Баллы:
    96
    Код:
    @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);
    }
    Один из вариантов.
     
  4. MurlikMurlik

    MurlikMurlik Активный участник Пользователь

    Баллы:
    96
    Я как будто изначально знаю в каком индексе находится нужный обьект для замены.
     
  5. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Код:
        @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));
        }
     
  6. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Харе срать, выше кинул код, даже со звуком.
     
  7. MurlikMurlik

    MurlikMurlik Активный участник Пользователь

    Баллы:
    96
    Bukkit#getOnlinePlayers() возвращает обычную коллекцию, в которой нет таких методов.
     
  8. SHADOWDAN

    SHADOWDAN Активный участник Пользователь

    Баллы:
    76
    PHP:
    Player player = ...
    player.setDisplayName("[MyPrefix] " player.getDisplayName());
     
  9. SHADOWDAN

    SHADOWDAN Активный участник Пользователь

    Баллы:
    76
    Ну так TS это ж и хотел?
     
  10. MurlikMurlik

    MurlikMurlik Активный участник Пользователь

    Баллы:
    96
     
  11. SHADOWDAN

    SHADOWDAN Активный участник Пользователь

    Баллы:
    76
    Он про написание игроком, ясн.
     
  12. MurlikMurlik

    MurlikMurlik Активный участник Пользователь

    Баллы:
    96
    В компилятор, куда же еще)
     
  13. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Он про упоминания игрока, как в дискорде или форуме.
     
  14. Автор темы
    Антон2007

    Антон2007 Активный участник

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

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

    [​IMG]
     
  15. MurlikMurlik

    MurlikMurlik Активный участник Пользователь

    Баллы:
    96
    Добавь просто после ника цветкод и все. Ибо у DisplayName в конце стоит &r который сбрасывает цвета дальше. Можешь в коде заменять & знак на параграф.
     
  16. MurlikMurlik

    MurlikMurlik Активный участник Пользователь

    Баллы:
    96
    Вообще, с моим кодом возможна рекурсивная замена текста. То есть твой префикс в чате замениться по несколько раз если ты напишешь еще раз свой или еще чей нибудь ник. В этой теме есть код по лучше
     
  17. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Дык верни цвет какой был и все.
    Сюда вместо "§r" -> msg = prefix+msg+"§r";
     
  18. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Код:
        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));
        }
     
    Последнее редактирование: 7 апр 2019
  19. Namer_PRO

    Namer_PRO Активный участник Пользователь

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

    Namer_PRO Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Namer_PRO

Поделиться этой страницей