Solved NullPointerException while trying to generate a custom config

Discussion in 'Plugin Development' started by nelson2tm, Feb 27, 2016.

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

    nelson2tm

    Hello everyone!

    I'm having some problems with creating custom configs. I've tried to search the web for a solution, but unfortunately I couldn't find one.

    While using the command /tovercraft status djinn open/close, I'm getting a NullPointerException.

    Stacktrace (open)

    Code:
    [13:26:30 WARN]: Unexpected exception while parsing console command "tovercraft status djinn open"
    org.bukkit.command.CommandException: Unhandled exception executing command 'tovercraft' in plugin Tovercraft v1.0
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[craftbukkit.jar:git-Bukkit-55589cd]
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:140) ~[craftbukkit.jar:git-Bukkit-55589cd]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:621) ~[craftbukkit.jar:git-Bukkit-55589cd]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(CraftServer.java:607) [craftbukkit.jar:git-Bukkit-55589cd]
            at net.minecraft.server.v1_8_R3.DedicatedServer.aO(DedicatedServer.java:371) [craftbukkit.jar:git-Bukkit-55589cd]
            at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:336) [craftbukkit.jar:git-Bukkit-55589cd]
            at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:628) [craftbukkit.jar:git-Bukkit-55589cd]
            at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:536) [craftbukkit.jar:git-Bukkit-55589cd]
            at java.lang.Thread.run(Unknown Source) [?:1.8.0_73]
    Caused by: java.lang.NullPointerException
            at tk.nelson2tm.tovercraft.Status.changeStatus(Status.java:23) ~[?:?]
            at tk.nelson2tm.tovercraft.Tovercraft.onCommand(Tovercraft.java:42) ~[?:?]
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[craftbukkit.jar:git-Bukkit-55589cd]
            ... 8 more
    Main class (Tovercraft) (open)

    Code:
    package tk.nelson2tm.tovercraft;
    
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.plugin.Plugin;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Tovercraft extends JavaPlugin  {
      
        public static Plugin plugin;
      
        private Status status = new Status();
      
        public static String prefix = ChatColor.GRAY + "[" + ChatColor.DARK_PURPLE + "Tovercraft" + ChatColor.GRAY + "] " + ChatColor.GRAY;
        public static String statusPrefix = ChatColor.GRAY + "[" + ChatColor.DARK_PURPLE + "Status" + ChatColor.GRAY + "] " + ChatColor.GRAY;
      
        public void onEnable(){
                  
            getLogger().info("Enabled!");
          
        }
      
        public void onDisable() {
          
            getLogger().info("Disabled!");
          
        }
      
        public static Plugin getPlugin() {
            return plugin;
        }
      
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
          
            if(cmd.getName().equalsIgnoreCase("tovercraft")) {
              
                if(args.length == 3) {
                  
                    // /tovercraft status <attractie> <status>
                    if(args[0].equalsIgnoreCase("status")) {
                        status.changeStatus(sender, args[1], args[2]);
                    }
                  
                } else {
                    commandNotFound(sender);
                }
              
            }
            return false;
        }
      
        public void commandNotFound(CommandSender sender) {
          
            sender.sendMessage(prefix + "Dit commando is niet gevonden.");
          
        }
      
    }
    
    Config class (Status) (open)

    Code:
    package tk.nelson2tm.tovercraft;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.ArrayList;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.configuration.file.YamlConfiguration;
    
    public class Status {
      
        String prefix = Tovercraft.prefix;
        String statusPrefix = Tovercraft.statusPrefix;
      
        File statusConfig = null;
        FileConfiguration statusFileConfig = null;
      
        public void changeStatus(CommandSender sender, String attractie, String status) {
          
            //Lijst van attractie afkortingen
            ArrayList<String> attracties = new ArrayList<String>();
            attracties.add("djinn");
          
            //Lijst van mogelijke statussen
            ArrayList<String> statussen = new ArrayList <String>();
            statussen.add("open");
            statussen.add("sluit");
            statussen.add("onderhoud");
            statussen.add("aanbouw");
          
            //Bestaat de attractie?
            if(attracties.contains(attractie)) {
              
                //Bestaat de status?
                if(statussen.contains(status)){
                  
                    sender.sendMessage(prefix);
                    this.statusConfig = new File(Tovercraft.getPlugin().getDataFolder(), "status.yml");
                    this.statusFileConfig = YamlConfiguration.loadConfiguration(statusConfig);
                    statusFileConfig.set(attractie, status);
                    try {
                        statusFileConfig.save(statusConfig);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                  
                    if(statussen.contains("open") || statussen.contains("sluit")) {
                    statusBroadcast(attractie, status);
                  
                    }
              
                }
              
            } else {
              
                sender.sendMessage(prefix + "De attractie " + ChatColor.DARK_PURPLE + attractie + ChatColor.GRAY + " is niet gevonden.");
              
            }
          
        }
      
        public void statusBroadcast(String attractie, String status) {
          
            String statusColor = "Error";
            String attractieColor = "Error";
          
            if(status.equals("open")) {
                statusColor = ChatColor.GREEN + "geopend" + ChatColor.GRAY;
            } else if(status.equals("sluit")) {
                statusColor = ChatColor.DARK_RED + "gesloten" + ChatColor.GRAY;
            }
          
            if(attractie.equals("djinn")) {
                attractieColor = ChatColor.GRAY + "De " + ChatColor.DARK_PURPLE + "Djinn" + ChatColor.GRAY;
            }
          
            Bukkit.broadcastMessage(statusPrefix + attractieColor + " is nu " + statusColor + ".");
          
        }
      
    }
    
     
  2. Offline

    mine-care

    Field "plugin" in main class is never initialized.
     
    nelson2tm likes this.
  3. Offline

    nelson2tm

    Thanks! Stupid me didn't think about that.

    Simply fixed it by adding the line
    Code:
    plugin = this;
    in the onEnable()
     
Thread Status:
Not open for further replies.

Share This Page