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

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

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
 
Последнее редактирование:
Зачем ты свой плагин BungeeCord'ом запускаешь?
 
Зачем ты свой плагин BungeeCord'ом запускаешь?
[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
 
[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
Дак написано же, унаследуй JavaPlugin в главном классе.
То есть замени
public class Main implements Listener
на
public class Main extends JavaPlugin implements Listener

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

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

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

Учи основы джавы и найди гайды о написании плагина.

Спасибо! После замены строчки плагин хотя бы запускается, хоть и признаков жизни не подаёт. :)
 
В твоём случае будет
Bukkit.getPluginManager().registerEvents(this, this);
Это в onEnable
Так?

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());
        }
    }
}
 
Вроде всё так, нахрена ты Main обозначил implements Listener? Ты в нём ничего не слушает.
Попробуй и напиши чё как. И ты уверен, что display name? Может лучше просто getName().
А то мало ли какие то цвета кастомные будут в dissplay name висеть и твоя проверка не сработает.
Так же если в сообщении не совпадёт регистр имени, то проверка тоже не выполнится. Думай.
 
Вроде всё так, нахрена ты Main обозначил implements Listener? Ты в нём ничего не слушает.
Попробуй и напиши чё как. И ты уверен, что display name? Может лучше просто getName().
А то мало ли какие то цвета кастомные будут в dissplay name висеть и твоя проверка не сработает.
Так же если в сообщении не совпадёт регистр имени, то проверка тоже не выполнится. Думай.
Всё компилится, плагин подгружается, но не работает. При наведении на ник ничего не высвечивается, при нажатии ничего не происходит.
 
Вы на форум кроме как пофлудить заходите? Иногда? Про одни и те же варнинги - вообще молчу. Не заходите в эту ветку форума, чтобы Вас иронией не придавливало, всё просто. :)
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх