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

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Lentiscus, 13 фев 2019.

Метки:
Статус темы:
Закрыта.
  1. Автор темы
    Lentiscus

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

    Баллы:
    61
    Имя в Minecraft:
    Lentiscus
    Версия: spigot 1.13.2

    Здравствуйте! :coffee: Из заголовка ясна задача - при открытии чата и нажатии на чей-то ник, автоматически в окно ввода сообщения должно вводиться "/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
     
    Последнее редактирование: 14 фев 2019
  2. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Зачем ты свой плагин BungeeCord'ом запускаешь?
     
  3. Автор темы
    Lentiscus

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

    Баллы:
    61
    Имя в Minecraft:
    Lentiscus
    [13:25:20 ERROR]: Could not load 'plugins\WhisperByClick.jar' in folder 'plugins
    '
    org.bukkit.plugin.InvalidPluginException: main class `org.rb.guide.Main' does no
    t extend JavaPlugin
    at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.jav
    a:67) ~[spigot-1.13.2.jar:git-Spigot-518206a-a5b9c7b]
    at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.j
    ava:132) ~[spigot-1.13.2.jar:git-Spigot-518206a-a5b9c7b]
    at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.
    java:327) ~[spigot-1.13.2.jar:git-Spigot-518206a-a5b9c7b]
    at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager
    .java:248) [spigot-1.13.2.jar:git-Spigot-518206a-a5b9c7b]
    at org.bukkit.craftbukkit.v1_13_R2.CraftServer.loadPlugins(CraftServer.j
    ava:323) [spigot-1.13.2.jar:git-Spigot-518206a-a5b9c7b]
    at org.bukkit.craftbukkit.v1_13_R2.CraftServer.reload(CraftServer.java:8
    05) [spigot-1.13.2.jar:git-Spigot-518206a-a5b9c7b]
    at org.bukkit.Bukkit.reload(Bukkit.java:570) [spigot-1.13.2.jar:git-Spig
    ot-518206a-a5b9c7b]
    at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:
    27) [spigot-1.13.2.jar:git-Spigot-518206a-a5b9c7b]
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:13
    9) [spigot-1.13.2.jar:git-Spigot-518206a-a5b9c7b]
    at org.bukkit.craftbukkit.v1_13_R2.CraftServer.dispatchCommand(CraftServ
    er.java:702) [spigot-1.13.2.jar:git-Spigot-518206a-a5b9c7b]
    at org.bukkit.craftbukkit.v1_13_R2.CraftServer.dispatchServerCommand(Cra
    ftServer.java:687) [spigot-1.13.2.jar:git-Spigot-518206a-a5b9c7b]
    at net.minecraft.server.v1_13_R2.DedicatedServer.handleCommandQueue(Dedi
    catedServer.java:459) [spigot-1.13.2.jar:git-Spigot-518206a-a5b9c7b]
    at net.minecraft.server.v1_13_R2.DedicatedServer.b(DedicatedServer.java:
    418) [spigot-1.13.2.jar:git-Spigot-518206a-a5b9c7b]
    at net.minecraft.server.v1_13_R2.MinecraftServer.a(MinecraftServer.java:
    830) [spigot-1.13.2.jar:git-Spigot-518206a-a5b9c7b]
    at net.minecraft.server.v1_13_R2.MinecraftServer.run(MinecraftServer.jav
    a:728) [spigot-1.13.2.jar:git-Spigot-518206a-a5b9c7b]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_171]
    Caused by: java.lang.ClassCastException: class org.rb.guide.Main
    at java.lang.Class.asSubclass(Unknown Source) ~[?:1.8.0_171]
    at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.jav
    a:65) ~[spigot-1.13.2.jar:git-Spigot-518206a-a5b9c7b]
    ... 15 more
     
  4. MurlikMurlik

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

    Баллы:
    96
    Дак написано же, унаследуй JavaPlugin в главном классе.
    То есть замени
    public class Main implements Listener
    на
    public class Main extends JavaPlugin implements Listener

    Да и еще тебе придется добавить методы onEnable(); onDisable();
    В метод onEnable нужно еще зарегистрировать слушатель, то есть свой же класс.

    Учи основы джавы и найди гайды о написании плагина.
     
    Последнее редактирование: 14 фев 2019
  5. Автор темы
    Lentiscus

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

    Баллы:
    61
    Имя в Minecraft:
    Lentiscus
    Спасибо! После замены строчки плагин хотя бы запускается, хоть и признаков жизни не подаёт. :)
     
  6. DeethzzCoder

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

    Баллы:
    76
    А еще листенер ивентов зарегай.
     
  7. Автор темы
    Lentiscus

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

    Баллы:
    61
    Имя в Minecraft:
    Lentiscus
    А как это сделать?) Ламер - каюсь!
     
  8. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    В твоём случае будет
    Bukkit.getPluginManager().registerEvents(this, this);
    Это в onEnable
     
    Последнее редактирование: 14 фев 2019
  9. Автор темы
    Lentiscus

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

    Баллы:
    61
    Имя в Minecraft:
    Lentiscus
    Так?

    Main.java:
    Код:
    package org.rb.guide;
    
    import org.bukkit.event.Listener;
    import org.bukkit.plugin.java.JavaPlugin;
    
    
    public class Main extends JavaPlugin implements Listener {
        @Override
        public void onEnable() {
            getServer().getPluginManager().registerEvents(new MyListener(), this);
            getServer().broadcastMessage("Enabled");
        }
        @Override
        public void onDisable() {
            getServer().broadcastMessage("Disabled");
        }  
    }
    MyListener.java:
    Код:
    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 MyListener 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); }  
                event.setMessage(message.getText());
            }
        }
    }
    
     
  10. Exception_Prototype

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

    Баллы:
    96
    Вроде всё так, нахрена ты Main обозначил implements Listener? Ты в нём ничего не слушает.
    Попробуй и напиши чё как. И ты уверен, что display name? Может лучше просто getName().
    А то мало ли какие то цвета кастомные будут в dissplay name висеть и твоя проверка не сработает.
    Так же если в сообщении не совпадёт регистр имени, то проверка тоже не выполнится. Думай.
     
  11. Автор темы
    Lentiscus

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

    Баллы:
    61
    Имя в Minecraft:
    Lentiscus
    Всё компилится, плагин подгружается, но не работает. При наведении на ник ничего не высвечивается, при нажатии ничего не происходит.
     
  12. Exception_Prototype

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

    Баллы:
    96
    Потыкай везде sout-ы, посмотри куда доходит код и т.д.
     
  13. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Жесть, а режим дебага для кого придумали?)
     
  14. Nikolai_Faint

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

    Баллы:
    96
    Стандартный запуск в режиме дебага IntelliJ ничего не даёт.
     
  15. Автор темы
    Lentiscus

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

    Баллы:
    61
    Имя в Minecraft:
    Lentiscus
    Вы на форум кроме как пофлудить заходите? Иногда? Про одни и те же варнинги - вообще молчу. Не заходите в эту ветку форума, чтобы Вас иронией не придавливало, всё просто. :)
     
  16. Integral-7

    Integral-7 Новичок

    Баллы:
    21
    Убери .addExtra
     
  17. Автор темы
    Lentiscus

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

    Баллы:
    61
    Имя в Minecraft:
    Lentiscus
    Убрал всю строчку. История та же, плагин подгружается, но всё ещё ничего не делает. :cry:
     
  18. Nikolai_Faint

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

    Баллы:
    96
    Logger добавь.
     
  19. Автор темы
    Lentiscus

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

    Баллы:
    61
    Имя в Minecraft:
    Lentiscus
    Куда, как, и зачем? :)
     
  20. Nikolai_Faint

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

    Баллы:
    96
    В MyListener, зависит от тебя, чтобы отследить что выполняется, а что нет.
     
Статус темы:
Закрыта.

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