Обращение в ЛС по щелчку на ник в чате

Статус
Закрыто для дальнейших ответов.

Lentiscus

Активный участник
Пользователь
Баллы
61
Имя в Minecraft
Lentiscus
Версия: spigot 1.13.2

Здравствуйте! ☕ Из заголовка ясна задача - при открытии чата и нажатии на чей-то ник, автоматически в окно ввода сообщения должно вводиться "/w <чей-то ник>". Простенький такой вот плагин.

Вот здесь есть какой-то код по этой теме, вроде бы похоже на правду, но я не бум-бум. Так что, обращаюсь к Гуру!

Ниже - мой криво слепленный и не работающий код. Плагин не загружается.

Код:
package org.rb.guide;

import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.ComponentBuilder;
import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent;

public class Main implements Listener {

    @EventHandler
    public void onPlayerChat(AsyncPlayerChatEvent event) {
        if (event.getMessage().contains(event.getPlayer().getDisplayName())) {
            event.setCancelled(true);
            TextComponent message = new TextComponent(event.getPlayer().getDisplayName());
            message.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/w " + event.getPlayer().getName()));
            message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Click to private message.").create()));
            message.addExtra(ChatColor.WHITE + " > " + event.getMessage());
            for (Player players : event.getRecipients()) { players.spigot().sendMessage(message); }   
            
        }

    }

}

00:43:03 [WARNING] Error enabling plugin WhisperByClick
java.lang.NoClassDefFoundError: org/bukkit/event/Listener
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at net.md_5.bungee.api.plugin.PluginClassloader.loadClass0(PluginClassloader.java:34)
at net.md_5.bungee.api.plugin.PluginClassloader.loadClass(PluginClassloader.java:27)
at java.lang.ClassLoader.loadClass(Unknown Source)
at net.md_5.bungee.api.plugin.PluginManager.enablePlugin(PluginManager.java:303)
at net.md_5.bungee.api.plugin.PluginManager.loadPlugins(PluginManager.java:211)
at net.md_5.bungee.BungeeCord.start(BungeeCord.java:289)
at net.md_5.bungee.BungeeCordLauncher.main(BungeeCordLauncher.java:37)
at net.md_5.bungee.Bootstrap.main(Bootstrap.java:15)
Caused by: java.lang.ClassNotFoundException: org.bukkit.event.Listener
at net.md_5.bungee.api.plugin.PluginClassloader.loadClass0(PluginClassloader.java:53)
at net.md_5.bungee.api.plugin.PluginClassloader.loadClass(PluginClassloader.java:27)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 18 more
 
Последнее редактирование:
И ты уверен, что display name? Может лучше просто getName().
А то мало ли какие то цвета кастомные будут в dissplay name висеть и твоя проверка не сработает.
Так же если в сообщении не совпадёт регистр имени, то проверка тоже не выполнится. Думай.
ТС, а на эти слова ты вообще забил?
Я думаю, тут зарыто решение твоего вопроса
 
ТС, а на эти слова ты вообще забил?
Я думаю, тут зарыто решение твоего вопроса
upload_2019-2-15_12-29-54.png
Заменил. Расставил sout'ы. Не работает.
Код:
public class MyListener implements Listener {
    @EventHandler
    public void onPlayerChat(AsyncPlayerChatEvent event) {
        Bukkit.getServer().broadcastMessage(ChatColor.GREEN+"One");
        if (event.getMessage().contains(event.getPlayer().getName())) {
            TextComponent message = new TextComponent(event.getPlayer().getName());
        Bukkit.getServer().broadcastMessage(ChatColor.GREEN+"Two");  
            message.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/w " + event.getPlayer().getName()));
        Bukkit.getServer().broadcastMessage(ChatColor.GREEN+"Three");
            message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Click to private message.").create()));
        Bukkit.getServer().broadcastMessage(ChatColor.GREEN+"Four");        
            //message.addExtra(ChatColor.WHITE + " > " + event.getMessage());
            for (Player players : event.getRecipients()) { players.spigot().sendMessage(message); }  
        Bukkit.getServer().broadcastMessage(ChatColor.GREEN+"Five");
        }
    }
}
 
Заменил. Расставил sout'ы. Не работает.
if (event.getMessage().contains(event.getPlayer().getName())) {
Ну правильно, ты пытаешься найти ник игрока в сообщении, которое должен отправить игрок..
Бери getFormat()
Возвращает все что перед текстом который должен отправиться.
 
Посмотреть вложение 53160
Заменил. Расставил sout'ы. Не работает.
Код:
public class MyListener implements Listener {
    @EventHandler
    public void onPlayerChat(AsyncPlayerChatEvent event) {
        Bukkit.getServer().broadcastMessage(ChatColor.GREEN+"One");
        if (event.getMessage().contains(event.getPlayer().getName())) {
            TextComponent message = new TextComponent(event.getPlayer().getName());
        Bukkit.getServer().broadcastMessage(ChatColor.GREEN+"Two");
            message.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/w " + event.getPlayer().getName()));
        Bukkit.getServer().broadcastMessage(ChatColor.GREEN+"Three");
            message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Click to private message.").create()));
        Bukkit.getServer().broadcastMessage(ChatColor.GREEN+"Four");     
            //message.addExtra(ChatColor.WHITE + " > " + event.getMessage());
            for (Player players : event.getRecipients()) { players.spigot().sendMessage(message); }
        Bukkit.getServer().broadcastMessage(ChatColor.GREEN+"Five");
        }
    }
}
Ифка не проходит вот тут. Напиши свой ник в чате и все.
if (event.getMessage().contains(event.getPlayer().getName())) {
 
Вот я ему сейчас буду сидеть и расписывать как им пользоваться?)
Нет, ты ему сказал использовать дебаг, он пошел гуглить, там всего то пару брекпоинтов натыкать, с чего ты решил, что тебе нужно ему это объяснять?
 
Ну правильно, ты пытаешься найти ник игрока в сообщении, которое должен отправить игрок..
Бери getFormat()
Возвращает все что перед текстом который должен отправиться.
Код:
        if (event.getFormat().contains(event.getPlayer().getName())) {
            TextComponent message = new TextComponent(event.getPlayer().getName());
        Bukkit.getServer().broadcastMessage(ChatColor.GREEN+"Two");   
            message.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/w " + event.getPlayer().getName()));
        Bukkit.getServer().broadcastMessage(ChatColor.GREEN+"Three");
            message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Click to private message.").create()));
        Bukkit.getServer().broadcastMessage(ChatColor.GREEN+"Four");         
            //message.addExtra(ChatColor.WHITE + " > " + event.getMessage());
            for (Player players : event.getRecipients()) { players.spigot().sendMessage(message); }   
        Bukkit.getServer().broadcastMessage(ChatColor.GREEN+"Five");
        }
upload_2019-2-15_19-19-38.png
 
Код:
        if (event.getFormat().contains(event.getPlayer().getName())) {
            TextComponent message = new TextComponent(event.getPlayer().getName());
        Bukkit.getServer().broadcastMessage(ChatColor.GREEN+"Two"); 
            message.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/w " + event.getPlayer().getName()));
        Bukkit.getServer().broadcastMessage(ChatColor.GREEN+"Three");
            message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Click to private message.").create()));
        Bukkit.getServer().broadcastMessage(ChatColor.GREEN+"Four");       
            //message.addExtra(ChatColor.WHITE + " > " + event.getMessage());
            for (Player players : event.getRecipients()) { players.spigot().sendMessage(message); } 
        Bukkit.getServer().broadcastMessage(ChatColor.GREEN+"Five");
        }
Посмотреть вложение 53163
Какой же ты тупой все таки 😁.
Код:
    @EventHandler
    public void onPlayerChat(AsyncPlayerChatEvent event) {
        event.getPlayer().sendMessage("ИдиотДетектед - > "+event.getMessage());
        event.getPlayer().sendMessage("ИдиотДетектед - > "+event.getFormat());
    }
 
Какой же ты тупой все таки 😁.
Код:
    @EventHandler
    public void onPlayerChat(AsyncPlayerChatEvent event) {
        event.getPlayer().sendMessage("ИдиотДетектед - > "+event.getMessage());
        event.getPlayer().sendMessage("ИдиотДетектед - > "+event.getFormat());
    }
Спасибо за оценку! Ваш отзыв очень важен для нас.
 
Спасибо за оценку! Ваш отзыв очень важен для нас.
Код:
@EventHandler
public void onAsyncPlayerChatEvent(AsyncPlayerChatEvent e) {
Player pl = e.getPlayer();
e.setCancelled(true);
TextComponent message = new TextComponent(pl.getName());
message.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/w " + pl.getName()));
message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Click to private message.").create()));
message.addExtra(ChatColor.WHITE + " > " + e.getMessage());
for (Player pla : Bukkit.getOnlinePlayers()) {
   pla.spigot().sendMessage(message);
}
}
Жуй
 
Код:
@EventHandler
public void onAsyncPlayerChatEvent(AsyncPlayerChatEvent e) {
Player pl = e.getPlayer();
e.setCancelled(true);
TextComponent message = new TextComponent(pl.getName());
message.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/w " + pl.getName()));
message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Click to private message.").create()));
message.addExtra(ChatColor.WHITE + " > " + e.getMessage());
for (Player pla : Bukkit.getOnlinePlayers()) {
   pla.spigot().sendMessage(message);
}
}
Жуй
Хаваю! Спасибо. Однажды интеллектуально отомщу за унижения, но знал на что шёл. Предыдущий вариант кода тоже успел захавать, такой вот я прожорливый.
 
Всем спасибо! Всё работает, тему закрываю. В особенности выражаю благодарность @MurlikMurlik , за то что воссоздал и положил в рот. :З
upload_2019-2-16_2-29-25.png
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх