NullPointer with List

Discussion in 'Plugin Development' started by triger545, Apr 5, 2014.

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

    triger545

    This is the first time I have used a list inside of a config file. I assume that I am doing most of this correctly, however I get a NullPointerException from the line:
    Code:
    worldList.add("world");
    I am trying to create a Hardcore Minecraft plugin, but cannot get the worlds to be added to a list properly.

    Here is the error:
    Code:
    [23:09:22 ERROR]: Error occurred while enabling Hardcore v1 (Is it up to date?)
    java.lang.NullPointerException
            at com.trig.hardcore.Hardcore.onEnable(Hardcore.java:41) ~[?:?]
            at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:217) ~[c
    raftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
            at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader
    .java:457) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
            at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManage
    r.java:381) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
            at org.bukkit.craftbukkit.v1_7_R1.CraftServer.loadPlugin(CraftServer.jav
    a:298) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
            at org.bukkit.craftbukkit.v1_7_R1.CraftServer.enablePlugins(CraftServer.
    java:280) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.m(MinecraftServer.java:3
    38) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.g(MinecraftServer.java:3
    15) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.a(MinecraftServer.java:2
    75) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
            at net.minecraft.server.v1_7_R1.DedicatedServer.init(DedicatedServer.jav
    a:175) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java
    :420) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
            at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:6
    17) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
    Here is my code:

    Code:
    public class Hardcore extends JavaPlugin implements Listener {
     
        public int startingLives;
        public List<String> worldList;
     
        public void onEnable() {
            if(!getDataFolder().exists()) {
                saveConfig();
                getConfig().createSection("general");
                getConfig().createSection("general.firstSetup");
                getConfig().createSection("general.playerLives");
                getConfig().createSection("general.overrideDifficulty");
                getConfig().createSection("general.world");
                getConfig().createSection("general.forceNumberOfMobs");
                getConfig().createSection("general.maxMobs");
                getConfig().createSection("general.pvp");
                getConfig().set("general.firstSetup", false);
                getConfig().set("general.playerLives", 2);
                getConfig().set("general.overrideDifficulty", true);
                getConfig().set("general.forceNumberOfMobs", true);
                getConfig().set("general.maxMobs", 100);
                getConfig().set("general.pvp", true);
                getConfig().createSection("general.worlds");
                worldList = (List<String>)getConfig().getList("general.worlds");
                worldList.add("world");
                getConfig().set("general.worlds", worldList);
            }
            worldList = (List<String>)getConfig().getList("general.worlds");
            saveConfig();
            if(getConfig().getBoolean("general.firstSetup") == false) { //This section probably isn't needed, but whatever.
                startingLives = getConfig().getInt("general.playerLives");
                getConfig().set("general.firstSetup", true);
            }
         
            if(getConfig().getBoolean("general.overrideDiffiulty") == true) {
                for(int i = 0; i < worldList.size(); i++) {
                    Bukkit.getServer().getWorld(worldList.get(i)).setDifficulty(Difficulty.HARD);
                }
            }
            if(getConfig().getBoolean("general.forceNumberOfMobs") == true) {
                for(int i = 0; i < worldList.size(); i++) {
                    Bukkit.getServer().getWorld(worldList.get(i)).setAnimalSpawnLimit(getConfig().getInt("general.maxMobs"));
                }
            }
            if(getConfig().getBoolean("general.pvp") == true) {
                for(int i = 0; i < worldList.size(); i++) {
                    Bukkit.getServer().getWorld(worldList.get(i)).setPVP(true);
                }
            }
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
            try {
                getConfig().load(getDataFolder().getAbsolutePath() + "/config.yml");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    Now I understand I can change a few things in my code, like just make things CopyFromDefault, but I would like to see how to solve this issue...
     
  2. Offline

    Bionicrm

    Actually you should be looking at the line:
    Code:java
    1. worldList = (List<String>)getConfig().getList("general.worlds");

    Since that's what's making worldList null. When you get the list, wouldn't there not be any worlds?
     
  3. Offline

    triger545

    Changed it to
    Code:java
    1. saveConfig();
    2. getConfig().createSection("general");
    3. getConfig().createSection("general.firstSetup");
    4. getConfig().createSection("general.playerLives");
    5. getConfig().createSection("general.overrideDifficulty");
    6. getConfig().createSection("general.world");
    7. getConfig().createSection("general.forceNumberOfMobs");
    8. getConfig().createSection("general.maxMobs");
    9. getConfig().createSection("general.pvp");
    10. getConfig().set("general.firstSetup", false);
    11. getConfig().set("general.playerLives", 2);
    12. getConfig().set("general.overrideDifficulty", true);
    13. getConfig().set("general.forceNumberOfMobs", true);
    14. getConfig().set("general.maxMobs", 100);
    15. getConfig().set("general.pvp", true);
    16. getConfig().createSection("general.worlds");
    17. getConfig().set("general.worlds", "world");
    18. worldList = (List<String>)getConfig().getList("general.worlds");
    19. worldList.add("world");
    20. getConfig().set("general.worlds", worldList);


    And it's still null :/
    Any other suggestions?

    I'd like to get this fixed ASAP, so any help would be fantastic :p

    Bump...

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 7, 2016
  4. Offline

    coasterman10

    Use getConfig().getStringList(); to get the list. This will never return null, not to mention remove the dangerous cast.
     
  5. Offline

    triger545

    Now this part returns null...

    Code:java
    1. if(getConfig().getBoolean("general.forceNumberOfMobs") == true) {
    2. for(int i = 0; i < worldList.size(); i++) {
    3. Bukkit.getServer().getWorld(worldList.get(i)).setMonsterSpawnLimit(getConfig().getInt("general.maxMobs"));
    4. }
    5. }


    The line that returns the error is
    Code:java
    1. Bukkit.getServer().getWorld(worldList.get(i)).setMonsterSpawnLimit(getConfig().getInt("general.maxMobs"));


    **SOLVED**
    Just used different for loops...

    Code:java
    1. for(String s : worldList) {


    -------Changes since first post-------------
    (Incase somebody uses this in the future)

    Code:java
    1. List<String> worldList = (List<String>)getConfig().getList("general.worlds");
    2. //Changed to
    3. worldList = (List<String>)getConfig().getStringList("general.worlds");
    4.  
    5. //For loops changed to
    6. for(String s : worldList) {
    7. }
    8.  


    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 7, 2016
Thread Status:
Not open for further replies.

Share This Page