Solved Chat Glitches

Discussion in 'Plugin Help/Development/Requests' started by NicksTheBoss, Jan 17, 2015.

Thread Status:
Not open for further replies.
  1. Offline

    NicksTheBoss

    I made a custom chat plugin and it works great but every time someone puts a "%" in chat it glitches. Please help! Here's the code. Line 30 is line 17 on bukkit.
    Code:
          @EventHandler(priority=EventPriority.NORMAL)
          public void onChat(AsyncPlayerChatEvent event) {
              this.cfg = CodexCore.groups;
            Player player = event.getPlayer();
            String format = event.getFormat();
     
            if(this.cfg.contains("players." + player.getName())) {
                if(player.getWorld().getName().equalsIgnoreCase(WorldName.name)) {
                if(this.cfg.getBoolean("players." + player.getName() + ".rank." + ".default") == true) {
                    format = "§9" + player.getDisplayName() + "§8: §7" + event.getMessage();
                    event.setFormat(format);
                } else if(this.cfg.getBoolean("players." + player.getName() + ".rank." + ".owner") == true){
                    format = "§4§lOWNER §4" + player.getDisplayName() + "§8: §6" + replaceColors(event.getMessage());
                    event.setFormat(format);
                } else if(this.cfg.getBoolean("players." + player.getName() + ".rank." + ".admin") == true){
                    format = "§c§lADMIN §c" + player.getDisplayName() + "§8: §f" + event.getMessage();
                    event.setFormat(format);
                } else if(this.cfg.getBoolean("players." + player.getName() + ".rank." + ".mod") == true){
                    format = "§5§lMOD §5" + player.getDisplayName() + "§8: §f" + event.getMessage();
                    event.setFormat(format);
                } else if(this.cfg.getBoolean("players." + player.getName() + ".rank." + ".vip") == true){
                    format = "§e§lVIP §d" + player.getDisplayName() + "§8: §f" + event.getMessage();
                    event.setFormat(format);
                } else if(this.cfg.getBoolean("players." + player.getName() + ".rank." + ".architect") == true){
                    format = "§a§lARCHITECT §a" + player.getDisplayName() + "§8: §f" + event.getMessage();
                    event.setFormat(format);
                } else if(this.cfg.getBoolean("players." + player.getName() + ".rank." + ".platinum") == true){
                    format = "§b§lPLATINUM §b" + player.getDisplayName() + "§8: §f" + event.getMessage();
                    event.setFormat(format);
                } else if(this.cfg.getBoolean("players." + player.getName() + ".rank." + ".gold") == true){
                    format = "§6§lGOLD §6" + player.getDisplayName() + "§8: §f" + event.getMessage();
                    event.setFormat(format);
                } else if(this.cfg.getBoolean("players." + player.getName() + ".rank." + ".silver") == true){
                    format = "§7§lSILVER §7" + player.getDisplayName() + "§8: §f" + event.getMessage();
                    event.setFormat(format);
                } else if(this.cfg.getBoolean("players." + player.getName() + ".rank." + ".unicorn") == true) {
                    format = "§3§lUNICORN §7" + player.getDisplayName() + "§8: §f" + event.getMessage();
                    event.setFormat(format);
                }
                } else {
                    if(this.cfg.getBoolean("players." + player.getName() + ".rank." + ".default") == true) {
                        format = "§9" + player.getDisplayName() + "§8: §7" + event.getMessage();
                        event.setFormat(format);
                    } else if(this.cfg.getBoolean("players." + player.getName() + ".rank." + ".owner") == true){
                        format = "§4§lOWNER §4" + player.getDisplayName() + "§8: §6" + replaceColors(event.getMessage());
                        event.setFormat(format);
                    } else if(this.cfg.getBoolean("players." + player.getName() + ".rank." + ".admin") == true){
                        format = "§c§lADMIN §c" + player.getDisplayName() + "§8: §f" + event.getMessage();
                        event.setFormat(format);
                    } else if(this.cfg.getBoolean("players." + player.getName() + ".rank." + ".mod") == true){
                        format = "§5§lMOD §5" + player.getDisplayName() + "§8: §f" + event.getMessage();
                        event.setFormat(format);
                    } else if(this.cfg.getBoolean("players." + player.getName() + ".rank." + ".vip") == true){
                        format = "§e§lVIP §d" + player.getDisplayName() + "§8: §f" + event.getMessage();
                        event.setFormat(format);
                    } else if(this.cfg.getBoolean("players." + player.getName() + ".rank." + ".architect") == true){
                        format = "§a§lARCHITECT §a" + player.getDisplayName() + "§8: §f" + event.getMessage();
                        event.setFormat(format);
                    } else if(this.cfg.getBoolean("players." + player.getName() + ".rank." + ".platinum") == true){
                        format = "§b§lPLATINUM §b" + player.getDisplayName() + "§8: §f" + event.getMessage();
                        event.setFormat(format);
                    } else if(this.cfg.getBoolean("players." + player.getName() + ".rank." + ".gold") == true){
                        format = "§6§lGOLD §6" + player.getDisplayName() + "§8: §f" + event.getMessage();
                        event.setFormat(format);
                    } else if(this.cfg.getBoolean("players." + player.getName() + ".rank." + ".silver") == true){
                        format = "§7§lSILVER §7" + player.getDisplayName() + "§8: §f" + event.getMessage();
                        event.setFormat(format);
                    } else if(this.cfg.getBoolean("players." + player.getName() + ".rank." + ".unicorn") == true) {
                        format = "§3§lUNICORN §7" + player.getDisplayName() + "§8: §f" + event.getMessage();
                        event.setFormat(format);
                    }
                }
            }
          }
    Here's the console error's
    Code:
    > [17:17:41 ERROR]: Could not pass event AsyncPlayerChatEvent to TheCodexCore v1.0
    org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[executable.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[executable.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:509) [executable.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:491) [executable.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
    at net.minecraft.server.v1_7_R4.PlayerConnection.chat(PlayerConnection.java:965) [executable.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
    at net.minecraft.server.v1_7_R4.PlayerConnection.a(PlayerConnection.java:905) [executable.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
    at net.minecraft.server.v1_7_R4.PacketPlayInChat.a(PacketPlayInChat.java:28) [executable.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
    at net.minecraft.server.v1_7_R4.PacketPlayInChat$1.run(PacketPlayInChat.java:59) [executable.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [?:1.7.0_65]
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) [?:1.7.0_65]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [?:1.7.0_65]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [?:1.7.0_65]
    at java.lang.Thread.run(Thread.java:745) [?:1.7.0_65]
    Caused by: java.util.UnknownFormatConversionException: Conversion = '%'
    at org.bukkit.event.player.AsyncPlayerChatEvent.setFormat(AsyncPlayerChatEvent.java:100) ~[executable.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
    at com.nickstheboss.thecodexcore.listeners.ChatListener.onChat(ChatListener.java:30) ~[?:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_65]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[?:1.7.0_65]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_65]
    at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_65]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:298) ~[executable.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
    ... 12 more 
     
  2. Offline

    ShadowLAX

    @NicksTheBoss This happens because the '%' character is used by Bukkit to perform chat functions., not your code. Best way to fix this is to work around it, E.g, cancelling the event and broadcasting the message.
     
  3. Offline

    Konato_K

  4. Offline

    ShadowLAX

    @Konato_K I guess, I just never looked into it as it really never affected me that much.
     
  5. Offline

    drpk

    @NicksTheBoss just a side note, you could put the "event.setFormat(format);" under the bracket of the last elseif staement and remove the other event.setFormats
     
  6. @NicksTheBoss I just want to point out some stuff.
    1. Blah == true is not needed just if(blah){
    2. Instead of 100 if statements, loop and check.
    3. Always better to use ChatColor over the symbol
     
  7. Online

    timtower Administrator Administrator Moderator

    Moved to Bukkit alternatives.
     
Thread Status:
Not open for further replies.

Share This Page