Need Help with ConfigurationSection Keys!

Discussion in 'Plugin Development' started by LegitJava, Oct 11, 2013.

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

    LegitJava

    Hi there,

    I'm getting a NullPointerException in a line of code that has to deal with getting keys of a configuration section. I have tried to debug for a while now and am having no luck. I've posted the stack trace and all classes related to it below.

    Stack Trace:
    Code:
    21:12:28 [SEVERE] java.lang.NullPointerException
    21:12:28 [SEVERE]    at me.legitmodern.dodgeball.ArenaManager.setupArenas(ArenaManager.java:24)
    21:12:28 [SEVERE]    at me.legitmodern.dodgeball.commands.Create.onCommand(Create.java:19)
    21:12:28 [SEVERE]    at me.legitmodern.dodgeball.CommandManager.onCommand(CommandManager.java:67)
    21:12:28 [SEVERE]    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
    21:12:28 [SEVERE]    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:191)
    21:12:28 [SEVERE]    at org.bukkit.craftbukkit.v1_6_R2.CraftServer.dispatchCommand(CraftServer.java:523)
    21:12:28 [SEVERE]    at net.minecraft.server.v1_6_R2.PlayerConnection.handleCommand(PlayerConnection.java:954)
    21:12:28 [SEVERE]    at net.minecraft.server.v1_6_R2.PlayerConnection.chat(PlayerConnection.java:872)
    21:12:28 [SEVERE]    at net.minecraft.server.v1_6_R2.PlayerConnection.a(PlayerConnection.java:829)
    21:12:28 [SEVERE]    at net.minecraft.server.v1_6_R2.Packet3Chat.handle(SourceFile:49)
    21:12:28 [SEVERE]    at net.minecraft.server.v1_6_R2.NetworkManager.b(NetworkManager.java:296)
    21:12:28 [SEVERE]    at net.minecraft.server.v1_6_R2.PlayerConnection.e(PlayerConnection.java:116)
    21:12:28 [SEVERE]    at net.minecraft.server.v1_6_R2.ServerConnection.b(SourceFile:37)
    21:12:28 [SEVERE]    at net.minecraft.server.v1_6_R2.DedicatedServerConnection.b(SourceFile:30)
    21:12:28 [SEVERE]    at net.minecraft.server.v1_6_R2.MinecraftServer.t(MinecraftServer.java:590)
    21:12:28 [SEVERE]    at net.minecraft.server.v1_6_R2.DedicatedServer.t(DedicatedServer.java:226)
    21:12:28 [SEVERE]    at net.minecraft.server.v1_6_R2.MinecraftServer.s(MinecraftServer.java:486)
    21:12:28 [SEVERE]    at net.minecraft.server.v1_6_R2.MinecraftServer.run(MinecraftServer.java:419)
    21:12:28 [SEVERE]    at net.minecraft.server.v1_6_R2.ThreadServerApplication.run(SourceFile:582)
    ArenaManager.java method that is throwing the NullPointerException:
    Code:java
    1. private ArrayList<Arena> arenas = new ArrayList<Arena>();
    2.  
    3. public void setupArenas() {
    4. try {
    5. /* THIS IS LINE 24 */ for (String key : SettingsManager.getInstance().<ConfigurationSection>get("arenas").getKeys(true)) {
    6. arenas.add(new Arena(Integer.parseInt(key)));
    7. }
    8. }
    9. catch (Exception ignored) { ignored.printStackTrace(); }
    10. }

    SettingsManager Get Method:
    Code:java
    1. @SuppressWarnings("unchecked")
    2. public <T> T get(String path) {
    3. return (T) arenas.get(path);
    4. }


    Can anyone help me with this? Thanks.
     
  2. Offline

    Pezah

    Code:java
    1. if(arenas != null)
    2. {
    3. //code
    4. }
     
  3. Offline

    LegitJava

    I would put this in my catch statement, correct? Or would I place it inside of the for loop?
    "arenas" is the ArrayList that I have defined in my ArenaManager class.

    T3h Cr33p3r Pezah

    I tried running the command that setups the arenas using the method below and now it is just displaying the usage from my plugin.yml. It won't execute the commands.

    Here is my new method:
    Code:java
    1. public void setupArenas() {
    2. for (String key : SettingsManager.getInstance().<ConfigurationSection>get("arenas").getKeys(true)) {
    3. if (arenas != null) { arenas.add(new Arena(Integer.parseInt(key))); }
    4. }
    5. }


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

    Pezah

    Wouldn't it be;

    Code:java
    1. public void setupArenas()
    2. {
    3. if(arenas == null)
    4. {
    5. try
    6. {
    7. /* THIS IS LINE 24 */ for (String key : SettingsManager.getInstance().<ConfigurationSection>get("arenas").getKeys(true))
    8. {
    9. arenas.add(new Arena(Integer.parseInt(key)));
    10. }
    11. }
    12. catch (Exception ignored)
    13. {
    14. ignored.printStackTrace();
    15. }
    16. }
    17. }


    Try that LegitJava
     
  5. Offline

    LegitJava

    Pezah
    Thanks! That fixed the errors but now I'm not able to join the arena. Here's the code related to joining arenas below:
    Code:java
    1. Arena a = ArenaManager.getInstance().getArena(id);
    2.  
    3. if (a == null) {
    4. MessageManager.getInstance().msg(p, MessageType.BAD, "That arena doesn't exist!");
    5. return;
    6. }

    ArenaManager getArena() Method:
    Code:java
    1. private ArrayList<Arena> arenas = new ArrayList<Arena>();
    2. public Arena getArena(int id) {
    3. for (Arena a : arenas) {
    4. if (a.getID() == id) return a;
    5. }
    6. return null;
    7. }
     
  6. Offline

    Pezah

    Uhh, what's the method to join an arena?
     
  7. Offline

    LegitJava

    Pezah Do you mean to add a player to an arena? Here's my Join class anyway:

    http://pastebin.com/AtuHt9rj
     
  8. Offline

    Pezah

    The paste was removed; what exactly is the problem? A player isn't added to the arena they try to join?
     
  9. Offline

    LegitJava

    Yeah, it's supposed to add a player to an arena but it's saying "The arena doesn't exist." I'll just paste the code here:
    Code:java
    1. public class Join extends SubCommand {
    2.  
    3. public void onCommand(Player p, String[] args) {
    4. if (ArenaManager.getInstance().getArena(p) != null) {
    5. MessageManager.getInstance().msg(p, MessageType.BAD, "You are already in an arena!");
    6. return;
    7. }
    8.  
    9. if (args.length == 0) {
    10. MessageManager.getInstance().msg(p, MessageType.BAD, "You must specify an arena number!");
    11. return;
    12. }
    13.  
    14. int id = -1;
    15.  
    16. try { id = Integer.parseInt(args[0]); }
    17. catch (Exception e) {
    18. MessageManager.getInstance().msg(p, MessageType.BAD, args[0] + " is not a number!");
    19. return;
    20. }
    21.  
    22. Arena a = ArenaManager.getInstance().getArena(id);
    23.  
    24. if (a == null) {
    25. MessageManager.getInstance().msg(p, MessageType.BAD, "That arena doesn't exist!");
    26. return;
    27. }
    28.  
    29. if (a.getState() == ArenaState.DISABLED || a.getState() == ArenaState.STARTED) {
    30. MessageManager.getInstance().msg(p, MessageType.BAD, "That arena is " + a.getState().toString().toLowerCase() + "!");
    31. return;
    32. }
    33.  
    34. a.addPlayer(p);
    35. }
    36.  
    37. public String name() {
    38. return "join";
    39. }
    40.  
    41. public String info() {
    42. return "Joins a Dodgeball arena!";
    43. }
    44.  
    45. public String[] aliases() {
    46. return new String[] { "j" };
    47. }
    48. }
    getArena() Method:
    Code:java
    1. public Arena getArena(int id) {
    2. for (Arena a : arenas) {
    3. if (a.getID() == id) return a;
    4. }
    5. return null;
    6. }
     
Thread Status:
Not open for further replies.

Share This Page