Помогите Плагин на чат

sasha2003

Активный участник
Пользователь
Баллы
76
Здравствуйте!

Код:
public static final Boolean RANGED_MODE = Boolean.valueOf(false);
    protected String messageFormat = "%prefix%player%suffix %message";
    protected String globalMessageFormat = "%prefix%player%suffix &e%message";
    protected boolean rangedMode = RANGED_MODE.booleanValue();
    protected double chatRange = 100.0D;
    protected String displayNameFormat = "%prefix%player%suffix";
    protected String optionChatRange = "chat-range";
    protected String optionMessageFormat = "message-format";
    protected String optionGlobalMessageFormat = "global-message-format";
    protected String optionRangedMode = "force-ranged-mode";
    protected String optionDisplayname = "display-name-format";
    protected String permissionChatColor = "chatmanager.chat.color";
    protected String permissionChatMagic = "chatmanager.chat.magic";
    protected String permissionChatBold = "chatmanager.chat.bold";
    protected String permissionChatStrikethrough = "chatmanager.chat.strikethrough";
    protected String permissionChatUnderline = "chatmanager.chat.underline";
    protected String permissionChatItalic = "chatmanager.chat.italic";
    private FileConfiguration config = Prison.instance.getConfig();
    
    public ChatListener() {
        this.messageFormat = config.getString("chatmanager.message-format");
        this.globalMessageFormat = config.getString("chatmanager.global-message-format");
        this.rangedMode = config.getBoolean("chatmanager.ranged-mode");
        this.chatRange = config.getDouble("chatmanager.chat-range");
        this.displayNameFormat = config.getString("chatmanager.display-name-format");
    }
    
    @EventHandler(priority = EventPriority.HIGHEST)
    public void onPlayerChat(AsyncPlayerChatEvent event) {
        if (event.isCancelled()) {
            return;
        }
        Player player = event.getPlayer();
        
        String message = this.messageFormat;
        boolean localChat = this.config.getBoolean(this.optionRangedMode);
        String chatMessage = event.getMessage();
        
        if (chatMessage.startsWith("!")) {
            localChat = false;
            chatMessage = chatMessage.substring(1);
            message = this.globalMessageFormat;
        }
        message = ChatColor.translateAlternateColorCodes('&', message);
        message = message.replace("%message", "%2$s").replace("%displayname", "%1$s");
        
        if (PrisonPlayer.getLevel(player) > 0) {
            message = message.replace("%level", "§8[§6" + PrisonPlayer.getLevel(player) + " LVL§8]");
        }
        String fractionStr = PrisonPlayer.getFaction(player).toLowerCase();
        switch (fractionStr) {
        case "niggers":
            fractionStr = "§8[Ниггер]";
            break;
        case "aziats":
            fractionStr = "§8[§eАзиат§8]";
            break;
        case "whites":
            fractionStr = "§8[§fБелый§8]";
            break;
        default:
            fractionStr = "";
        }
        
        PermissionUser user = PermissionsEx.getUser(player);
        message = message.replace("%gprefix%", user.getPrefix());
        
        message = message.replace("%fraction", fractionStr);
        message = message.replace("%name", player.getName());
        
        message = message.replace("%local", "§f(§aL§f)");
        message = message.replace("%global", "§f(§6G§f)");
        message = message.replace("<", "");
        message = message.replace(">", "");
        /*if (player.hasPermission("chat.color")) {
            message = message.replace('&', '§');
        }*/
        event.setFormat(message);
        event.setMessage(chatMessage);
        if (localChat) {
            double range = 100.0D;
            event.getRecipients().clear();
            event.getRecipients().addAll(getLocalRecipients(player, message, range));
        }
    }
    
    protected List<Player> getLocalRecipients(Player sender, String message, double range) {
        Location playerLocation = sender.getLocation();
        List<Player> recipients = new LinkedList<Player>();
        double squaredDistance = Math.pow(range, 2.0D);
        for (Player recipient : Bukkit.getServer().getOnlinePlayers()) {
            if (!recipient.getWorld().equals((Object)sender.getWorld()) || playerLocation.distanceSquared(recipient.getLocation()) > squaredDistance) continue;
            recipients.add(recipient);
        }
        return recipients;
    }

Не работает этот код!

Ошибка при написании в чат игры:

Код:
[19:50:44] [Async Chat Thread - #0/ERROR]: Could not pass event AsyncPlayerChatEvent to Prison v1.0
org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.10.2-R0.1-SNAPSHOT.jar:git-Spigot-de459a2-51263e9]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.10.2-R0.1-SNAPSHOT.jar:git-Spigot-de459a2-51263e9]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot-1.10.2-R0.1-SNAPSHOT.jar:git-Spigot-de459a2-51263e9]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:484) [spigot-1.10.2-R0.1-SNAPSHOT.jar:git-Spigot-de459a2-51263e9]
    at net.minecraft.server.v1_10_R1.PlayerConnection.chat(PlayerConnection.java:1280) [spigot-1.10.2-R0.1-SNAPSHOT.jar:git-Spigot-de459a2-51263e9]
    at net.minecraft.server.v1_10_R1.PlayerConnection.a(PlayerConnection.java:1218) [spigot-1.10.2-R0.1-SNAPSHOT.jar:git-Spigot-de459a2-51263e9]
    at net.minecraft.server.v1_10_R1.PacketPlayInChat$1.run(PacketPlayInChat.java:39) [spigot-1.10.2-R0.1-SNAPSHOT.jar:git-Spigot-de459a2-51263e9]
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_161]
    at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_161]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_161]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_161]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_161]
Caused by: java.util.UnknownFormatConversionException: Conversion = 'p'
    at org.bukkit.event.player.AsyncPlayerChatEvent.setFormat(AsyncPlayerChatEvent.java:100) ~[spigot-1.10.2-R0.1-SNAPSHOT.jar:git-Spigot-de459a2-51263e9]
    at ru.taselix.taselixapi.ChatListener.onPlayerChat(ChatListener.java:105) ~[?:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_161]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_161]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_161]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_161]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot-1.10.2-R0.1-SNAPSHOT.jar:git-Spigot-de459a2-51263e9]
    ... 11 more
 
Я просил помощи, а не того, чтобы меня отправили разбираться самому
 
Исправил здесь message = message.replace("%message", "%s").replace("%displayname", "%s");
и здесь message = message.replace("%name", "%s");

Где ещё?
 
Скинь свой messageFormat, который находится в конфиге.

Всё, что в конфиге:

chatmanager:
enable: true
message-format: <%local %prefix &f%name %fraction %level&f:> %message
global-message-format: <%global %prefix &f%name %fraction %level&f:> &e%message
ranged-mode: true
chat-range: 100
 
Всё, что в конфиге:

chatmanager:
enable: true
message-format: <%local %prefix &f%name %fraction %level&f:> %message
global-message-format: <%global %prefix &f%name %fraction %level&f:> &e%message
ranged-mode: true
chat-range: 100
В общем, тут никакая магия не поможет. Код слишком засран :/
 
Назад
Верх