Somebody PLEASE help me with the console error message!

Discussion in 'Plugin Development' started by Cystalize, Aug 6, 2012.

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

    Cystalize

    Code:
    >spam reload
    23:09:10 [SEVERE] org.bukkit.command.CommandException: Unhandled exception executing command 'spam' in plugin Spamicide v0.1
    23:09:10 [SEVERE]    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:42)
    23:09:10 [SEVERE]    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:168)
    23:09:10 [SEVERE]    at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:490)
    23:09:10 [SEVERE]    at org.bukkit.craftbukkit.CraftServer.dispatchServerCommand(CraftServer.java:486)
    23:09:10 [SEVERE]    at net.minecraft.server.DedicatedServer.ah(DedicatedServer.java:248)
    23:09:10 [SEVERE]    at net.minecraft.server.DedicatedServer.q(DedicatedServer.java:213)
    23:09:10 [SEVERE]    at net.minecraft.server.MinecraftServer.p(MinecraftServer.java:476)
    23:09:10 [SEVERE]    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:408)
    23:09:10 [SEVERE]    at net.minecraft.server.ThreadServerApplication.run(SourceFile:539)
    23:09:10 [SEVERE] Caused by: java.lang.NullPointerException
    23:09:10 [SEVERE]    at me.arsinia.spamicide.Spamicide.parseArray(Spamicide.java:51)
    23:09:10 [SEVERE]    at me.arsinia.spamicide.Spamicide.load(Spamicide.java:85)
    23:09:10 [SEVERE]    at me.arsinia.spamicide.Spamicide.onCommand(Spamicide.java:106)
    23:09:10 [SEVERE]    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:40)
    23:09:11 [SEVERE]    ... 8 more
    23:09:11 [SEVERE] Encountered an unexpected exception CommandException
    org.bukkit.command.CommandException: Unhandled exception executing command 'spam' in plugin Spamicide v0.1
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:42)
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:168)
        at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:490)
        at org.bukkit.craftbukkit.CraftServer.dispatchServerCommand(CraftServer.java:486)
        at net.minecraft.server.DedicatedServer.ah(DedicatedServer.java:248)
        at net.minecraft.server.DedicatedServer.q(DedicatedServer.java:213)
        at net.minecraft.server.MinecraftServer.p(MinecraftServer.java:476)
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:408)
        at net.minecraft.server.ThreadServerApplication.run(SourceFile:539)
    Caused by: java.lang.NullPointerException
        at me.arsinia.spamicide.Spamicide.parseArray(Spamicide.java:51)
        at me.arsinia.spamicide.Spamicide.load(Spamicide.java:85)
        at me.arsinia.spamicide.Spamicide.onCommand(Spamicide.java:106)
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:40)
        ... 8 more
     
  2. Offline

    Courier

    You need to post the code. Identify line 51 of Spamicide.java, since line numbers aren't preserved (unless you paste all your imports and everything).
     
  3. Offline

    pzxc

    Yeah, something is null on line 51. That's all we can say without seeing the code (and you identifying which line is #51)
     
  4. Offline

    Cystalize

    This the whole main class.
    Code:
    package me.arsinia.spamicide;
     
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Properties;
    import java.util.logging.Logger;
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.command.ConsoleCommandSender;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class Spamicide extends JavaPlugin
    {
      static String dir = "plugins/Spamicide";
      static File SpamFile = new File(dir + File.separator + "BlockedWords.txt");
      static Properties prop = new Properties();
      ArrayList<String> ignored = new ArrayList<String>();
      ArrayList<String> Blocked = new ArrayList<String>();
      final String defaultBlocked = "IP,Crap";
      private static final Logger log = Logger.getLogger("Minecraft");
     
      public void onEnable() { new SpamPlayerListener(this);
        FileConfiguration config = getConfig();
        config.options().header("Configure Spamicide to your personal needs!");
        config.addDefault("Spamicide.Percentage", Integer.valueOf(60));
        config.addDefault("Spamicide.DetectIfLongerThan", Integer.valueOf(5));
        config.addDefault("Spamicide.CapsMessage", "TURN OFF YOUR CAPS");
        config.addDefault("Spamicide.ProfanityMessage", "You cannot say that!");
        config.addDefault("Spamicide.LowerCase", Boolean.valueOf(true));
        config.options().copyDefaults(true);
        saveConfig();
        load();
        log.info("Spamicide:  Enabled"); }
     
      public void onDisable() {
        log.info("Spamicide:  Disabled");
      }
     
      public ArrayList<String> parseArray(String in, char delimiter)
      {
        ArrayList<String> parsed = new ArrayList<String>();
        String build = "";
        int count = 0;
        int len = in.length();
        while (count < len) {
          while ((count < len) && (in.charAt(count) != delimiter)) {
            build = build + in.charAt(count);
            count++;
          }
          parsed.add(build);
          build = "";
          count++;
        }
        return parsed;
      }
      public void load() {
        new File(dir).mkdir();
        if (!SpamFile.exists())
          try
          {
            SpamFile.createNewFile();
            log.info("Spamicide:  Generated BlockedWords File");
            FileOutputStream out = new FileOutputStream(SpamFile);
            prop.put("BlockedWords", "IP,Crap");
            this.Blocked = parseArray("IP,Crap", ',');
     
            prop.store(out, "Choose the words that you want out of your chat!");
            out.flush();
            out.close();
          } catch (IOException ex) {
            ex.printStackTrace();
          }
        else
          try
          {
            FileInputStream in = new FileInputStream(SpamFile);
            prop.load(in);
            this.ignored = parseArray(prop.getProperty("IgnoredWords"), ',');
            this.Blocked = parseArray(prop.getProperty("BlockedWords"), ',');
            in.close();
            log.info("Spamicide:  Configuration loaded");
          } catch (FileNotFoundException e) {
            log.info("File exists but was not found");
          } catch (IOException e) {
            log.info("IO Exception on load of properties");
            e.printStackTrace();
          }
      }
     
      public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        boolean op = false;
        if ((sender instanceof Player)) {
          Player player = (Player)sender;
          op = player.isOp();
        }
        if ((label.equalsIgnoreCase("spam")) &&
          ((op) || ((sender instanceof ConsoleCommandSender))) &&
          (args.length == 1) && (args[0].equalsIgnoreCase("reload"))) {
          load();
          reloadConfig();
          log.info("Spamicide:  Configuration reloaded");
          if (op) {
            sender.sendMessage(ChatColor.RED + "Spamicide:" + ChatColor.GREEN + "Configuration reloaded");
          }
          return true;
        }
        return false;
      }
    }
    This the whole main class.
    Code:
    package me.arsinia.spamicide;
     
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Properties;
    import java.util.logging.Logger;
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.command.ConsoleCommandSender;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class Spamicide extends JavaPlugin
    {
      static String dir = "plugins/Spamicide";
      static File SpamFile = new File(dir + File.separator + "BlockedWords.txt");
      static Properties prop = new Properties();
      ArrayList<String> ignored = new ArrayList<String>();
      ArrayList<String> Blocked = new ArrayList<String>();
      final String defaultBlocked = "IP,Crap";
      private static final Logger log = Logger.getLogger("Minecraft");
     
      public void onEnable() { new SpamPlayerListener(this);
        FileConfiguration config = getConfig();
        config.options().header("Configure Spamicide to your personal needs!");
        config.addDefault("Spamicide.Percentage", Integer.valueOf(60));
        config.addDefault("Spamicide.DetectIfLongerThan", Integer.valueOf(5));
        config.addDefault("Spamicide.CapsMessage", "TURN OFF YOUR CAPS");
        config.addDefault("Spamicide.ProfanityMessage", "You cannot say that!");
        config.addDefault("Spamicide.LowerCase", Boolean.valueOf(true));
        config.options().copyDefaults(true);
        saveConfig();
        load();
        log.info("Spamicide:  Enabled"); }
     
      public void onDisable() {
        log.info("Spamicide:  Disabled");
      }
     
      public ArrayList<String> parseArray(String in, char delimiter)
      {
        ArrayList<String> parsed = new ArrayList<String>();
        String build = "";
        int count = 0;
        int len = in.length();
        while (count < len) {
          while ((count < len) && (in.charAt(count) != delimiter)) {
            build = build + in.charAt(count);
            count++;
          }
          parsed.add(build);
          build = "";
          count++;
        }
        return parsed;
      }
      public void load() {
        new File(dir).mkdir();
        if (!SpamFile.exists())
          try
          {
            SpamFile.createNewFile();
            log.info("Spamicide:  Generated BlockedWords File");
            FileOutputStream out = new FileOutputStream(SpamFile);
            prop.put("BlockedWords", "IP,Crap");
            this.Blocked = parseArray("IP,Crap", ',');
     
            prop.store(out, "Choose the words that you want out of your chat!");
            out.flush();
            out.close();
          } catch (IOException ex) {
            ex.printStackTrace();
          }
        else
          try
          {
            FileInputStream in = new FileInputStream(SpamFile);
            prop.load(in);
            this.ignored = parseArray(prop.getProperty("IgnoredWords"), ',');
            this.Blocked = parseArray(prop.getProperty("BlockedWords"), ',');
            in.close();
            log.info("Spamicide:  Configuration loaded");
          } catch (FileNotFoundException e) {
            log.info("File exists but was not found");
          } catch (IOException e) {
            log.info("IO Exception on load of properties");
            e.printStackTrace();
          }
      }
     
      public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        boolean op = false;
        if ((sender instanceof Player)) {
          Player player = (Player)sender;
          op = player.isOp();
        }
        if ((label.equalsIgnoreCase("spam")) &&
          ((op) || ((sender instanceof ConsoleCommandSender))) &&
          (args.length == 1) && (args[0].equalsIgnoreCase("reload"))) {
          load();
          reloadConfig();
          log.info("Spamicide:  Configuration reloaded");
          if (op) {
            sender.sendMessage(ChatColor.RED + "Spamicide:" + ChatColor.GREEN + "Configuration reloaded");
          }
          return true;
        }
        return false;
      }
    }
    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 27, 2016
  5. Offline

    Courier

    prop.getProperty("IgnoredWords") returns null, because you just initialised an empty java.util.Properties object. Did you mean to use getConfig().getString(...)? You should not be using java.util.Properties at all. There are many other things wrong with this code too, but that is the first one being executed.
     
  6. Offline

    Cystalize

    Hm okay. I'll work on it a little more and hopefully get a better result. Thanks :3
     
  7. Offline

    pzxc

    Your function:

    public ArrayList<String> parseArray(String in, char delimiter)
    {
    ArrayList<String> parsed = new ArrayList<String>();
    String build = "";
    int count = 0;
    int len = in.length();
    while (count < len) {
    while ((count < len) && (in.charAt(count) != delimiter)) {
    build = build + in.charAt(count);
    count++;
    }
    parsed.add(build);
    build = "";
    count++;
    }
    return parsed;
    }


    could be written as

    public List<String> parseArray(String in, char delimiter) {
    return Arrays.asList(in.split(delimiter));
    }

    :)
     
  8. Offline

    Cystalize

    Fo realzeez??? I hate you Java!
     
Thread Status:
Not open for further replies.

Share This Page