Could not pass event to AsyncPlayerChatEvent

Discussion in 'Plugin Development' started by leMisterMike, Dec 24, 2012.

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

    leMisterMike

    Hello.
    I'm having issues with my plugin; it's not working correctly when I do type the configured swear word.
    Code:
    2012-12-24 13:32:59 [SEVERE] Could not pass event AsyncPlayerChatEvent to Chatmonitor v0.9
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:341)
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:477)
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:459)
        at net.minecraft.server.NetServerHandler.chat(NetServerHandler.java:835)
        at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:807)
        at net.minecraft.server.Packet3Chat.handle(Packet3Chat.java:44)
        at net.minecraft.server.NetworkManager.i(NetworkManager.java:208)
        at net.minecraft.server.NetworkManager.c(NetworkManager.java:344)
        at net.minecraft.server.NetworkReaderThread.run(SourceFile:93)
    Caused by: java.lang.NullPointerException
        at package1.chatmonitorplayerlistener.onPlayerChat(chatmonitorplayerlistener.java:63)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:339)
        ... 9 more
    My main class file and my playerlistener:
    Code:
    //Plugin Created by leMisterMike
    //for Xerotric Servers
    //December 12, 2012
    package package1;
    
    import java.util.List;
    import java.util.logging.Logger;
    
    
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.event.Listener;
    import org.bukkit.plugin.PluginDescriptionFile;
    import org.bukkit.plugin.PluginManager;
    import org.bukkit.plugin.java.JavaPlugin;
    
        public class Chatmonitor1 extends JavaPlugin implements Listener{
        
        
        public final chatmonitorplayerlistener PlayerListener = new chatmonitorplayerlistener(this);    
        public final chatmonitorplayerlistener pl = new chatmonitorplayerlistener(null);
        public static String tag = ChatColor.WHITE + "[Chatmonitor] ";
    
            Logger logger = Logger.getLogger("Minecraft");
            public void onEnable() {
            PluginManager pm = getServer().getPluginManager();
            pm.registerEvents(this.PlayerListener, this);
            pm.registerEvents(new chatmonitorplayerlistener(this), this);
            getServer().getPluginManager().registerEvents(new chatmonitorplayerlistener(null), this);
            PluginDescriptionFile pdfFile = this.getDescription();
            this.getConfig().options().copyDefaults(true);
            this.saveConfig();
            this.logger.info(ChatColor.WHITE+ pdfFile.getName() + " v" + pdfFile.getVersion() + " has been enabled.");
        }
        
            public static String getFinalArg(final String[] args, final int start){
                
                    final StringBuilder bldr = new StringBuilder();
                    for (int i = start; i < args.length; i++)
                    {
                        if (i != start)
                        {
                            bldr.append(" ");
                        }
                        bldr.append(args[i]);
                    }
                    return bldr.toString();
                }
            
    
    
            public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){
            if(commandLabel.equalsIgnoreCase("cm")){
                if(args.length == 0){
                    if(sender.hasPermission("chatmonitor.admin")){
                    PluginDescriptionFile pdfFile = this.getDescription();
                    sender.sendMessage("[ChatMonitor] v" + pdfFile.getVersion() + ". Created by leMisterMike");
                    sender.sendMessage(ChatColor.GREEN+"/cm add  -"+ChatColor.GREEN+" adds a word to the swear list.");
                    sender.sendMessage(ChatColor.GREEN+"/cm remove -"+ChatColor.GREEN+" removes a word from the swear list.");
                    sender.sendMessage(ChatColor.GREEN+"/cm list -"+ChatColor.GREEN+" shows the swear word list.");
                    sender.sendMessage(ChatColor.RED+"Caution: Profanity will be shown.");
                    }
                    else{
                        sender.sendMessage(ChatColor.RED+"You do not have the required permissions.");
                    }
            
                    return true;
                    }
                    if(args.length >= 1){
                            if(args[0].equalsIgnoreCase("list")){
                                
                                if(args.length == 1){
                                if(sender.hasPermission("chatmonitor.admin")){
                                List<String> swears = this.getConfig().getStringList("swears");
                                for (String s : swears){
                                    sender.sendMessage("-"+s);
                                }
                                return true;
                                }else{
                                    sender.sendMessage(ChatColor.RED+"You don't have the required permissions.");
                                    return true;
                                }
                            }else{
                                sender.sendMessage("The command syntax is incorrect. Use /cm list");
                                return true;
                            }
                            }
                            
                        if(args[0].equalsIgnoreCase("add")){
                            if(args.length > 1){
                            if(sender.hasPermission("chatmonitor.admin")){
                            List<String> swears = this.getConfig().getStringList("swears");
                            String word = Chatmonitor1.getFinalArg(args, 1).toLowerCase();
                            for (String s : swears){
                                 if(word.equalsIgnoreCase(s)){
                                     sender.sendMessage(""+word+" is already listed on the swear list.");
                                     return true;
                                 }
                            }
                            swears.add(word);
                            this.getConfig().set("swears", swears);
                            this.saveConfig();
                            sender.sendMessage("You added "+word+" to the swear list.");
                            return true;
                            }else{
                                sender.sendMessage(ChatColor.RED+"You don't have the required permissions.");
                                return true;
                            }
                            }else{
                                sender.sendMessage("The command syntax is incorrect. Use /cm add [word]");
                                return true;
                            }
                            }
                        
                    if(args[0].equalsIgnoreCase("remove")){
                        if(args.length > 1){
                        if(sender.hasPermission("chatmonitor.admin")){
                        List<String> swears = this.getConfig().getStringList("swears");
                        String word = Chatmonitor1.getFinalArg(args, 1).toLowerCase();
                        for (String s : swears){
                             if(word.equalsIgnoreCase(s)){
                                 swears.remove(word);
                                 this.getConfig().set("swears", swears);
                                 this.saveConfig();
                                 sender.sendMessage(""+word+" is no longer on the swear list.");
                                 return true;
                             }
                        }
                        sender.sendMessage(""+word+" is not on the swear list.");
                        return true;
                    }else{
                        sender.sendMessage(ChatColor.RED+"You don't have the required permissions.");
                        return true;
                    }
                    }else{
                        sender.sendMessage("The command syntax is incorrect. Use /cm remove [word]");
                        return true;
                    }
                    }
                    
                        
                    }
                    }
                
                return false;
            }
        
                
        }
        


    Code:
    package package1;
    
    import org.bukkit.ChatColor;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.AsyncPlayerChatEvent;
    import java.util.List;
    
    public class chatmonitorplayerlistener
      implements Listener
    {
      public static Chatmonitor1 plugin2;
      private Chatmonitor1 plugin;
    
      public chatmonitorplayerlistener(Chatmonitor1 instance)
      {
        this.plugin = instance;
      }
    
      
        @EventHandler(priority = EventPriority.LOWEST)
        public void onPlayerEvent(AsyncPlayerChatEvent event) {
            Player player = event.getPlayer();
            String message = event.getMessage();
            int letterCount = 0;
            for (int i=0; i<message.length(); i++) {
                if (Character.isLetter(message.charAt(i))) {
                    letterCount += 1;
                }
            }
            if(capsPercentage(message) > 0.5 && message.length() > 3 && letterCount > 1) {
                if(player.hasPermission("chatmonitor.exempt")){
                    event.setCancelled(false);
                }else{
                    event.setCancelled(true);
                    player.sendMessage(ChatColor.RED +"Please avoid the use of excessive caps.");
                }
            }      
            
        }
    
         public double capsPercentage(String message){
              double length = 0.0;
              double capsLength = 0.0;
              for(int i = 0; i < message.length(); i++)
              {
                if(Character.isLetter(message.charAt(i)))
                 length++;
                if(Character.isLetter(message.charAt(i)) && Character.isUpperCase(message.charAt(i)))
                 capsLength++;
              }
              return capsLength / length;
             }
    
         @EventHandler(priority=EventPriority.HIGH)
          public void onPlayerChat(AsyncPlayerChatEvent chat)
          {
            Player player = chat.getPlayer();
            String mesage = chat.getMessage();
            String message_lower = mesage.toLowerCase();
            List<String> swears = this.plugin.getConfig().getStringList("English");
            
    
            for (String english : swears)
              if ((message_lower.contains(english.toLowerCase())) ) {
                player.sendMessage(ChatColor.RED+"Please refrain from using curse words in chat.");
                chat.setCancelled(true);
                return;
              }
        }
    }
    

    I'd like to get this fixed as soon as possible, thank you for your time.
     
  2. Offline

    Jogy34

    Well your stacktrace is saying that something is null on line 63 in the method "onPlayerChat" in the class "chatmonitorplayerlistener"
     
  3. Offline

    leMisterMike

    Thanks Mojang, I cannot test out my jar due to your logins being down. :l

    I have renamed it to a new method, due to it interfering with my other eventhandler.
     
  4. Offline

    Jogy34

    Just play in offline mode and put your server in offline mode and localhost.
     
  5. Offline

    chenr1

    True that, unless ofcourse this is a live server. Don't forget to remove the flag.
     
  6. Offline

    leMisterMike

    This is a live server, unfortunately. Will upload the new file as of tomorrow via FTP. Thanks, Jogy34.
     
  7. Offline

    chenr1

    You Upload untested plugins to your main server?
     
  8. Offline

    dark navi

    List<String> swears = this.plugin.getConfig().getStringList("English");

    This line is returning null. A safer way to do this would be to initialize swears as a new list, then addAll() the list you are getting from your config. In the case it returns null, then you just loop through 0 strings.

    On a side note: I could pre-load your list of strings when you initialize your plugin. Just a small performance thing, rather than having to call getStringList every single tick.
     
  9. Offline

    Barinade

    List<String> swears = this.plugin.getConfig().getStringList("English");

    Show your config

    Edit: Navi ninja'd me, lol.
     
    dark navi likes this.
  10. Offline

    Sagacious_Zed Bukkit Docs

    The access time of a hashmap is a huge performance concern. the biggest problem with using config to fetch something is that it is not thead safe.

    leMisterMike
    Also as a general note, stop using the logger named 'minecraft' and use the one for your plugin.
     
Thread Status:
Not open for further replies.

Share This Page