Minigame Error: NullPointerException

Discussion in 'Plugin Development' started by webbhead, Apr 1, 2014.

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

    webbhead

    Stacktrace:
    [11:14:49 INFO]: [Deathcore] Enabling Deathcore vv1.0
    [11:14:49 ERROR]: Error occurred while enabling Deathcore vv1.0 (Is it up to date?)
    java.lang.NullPointerException
    at me.webbhead.deathcore.ArenaManager.setupArenas(ArenaManager.java:21) ~[?:?]
    at me.webbhead.deathcore.Deathcore.onEnable(Deathcore.java:14) ~[?:?]
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:250) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:324) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:404) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
    at org.bukkit.craftbukkit.v1_7_R2.CraftServer.loadPlugin(CraftServer.java:442) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
    at org.bukkit.craftbukkit.v1_7_R2.CraftServer.enablePlugins(CraftServer.java:376) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
    at org.bukkit.craftbukkit.v1_7_R2.CraftServer.reload(CraftServer.java:776) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
    at org.bukkit.Bukkit.reload(Bukkit.java:279) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
    at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:23) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:180) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
    at org.bukkit.craftbukkit.v1_7_R2.CraftServer.dispatchCommand(CraftServer.java:686) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
    at org.bukkit.craftbukkit.v1_7_R2.CraftServer.dispatchServerCommand(CraftServer.java:673) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
    at net.minecraft.server.v1_7_R2.DedicatedServer.ax(DedicatedServer.java:286) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
    at net.minecraft.server.v1_7_R2.DedicatedServer.v(DedicatedServer.java:251) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
    at net.minecraft.server.v1_7_R2.MinecraftServer.u(MinecraftServer.java:548) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
    at net.minecraft.server.v1_7_R2.MinecraftServer.run(MinecraftServer.java:459) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
    at net.minecraft.server.v1_7_R2.ThreadServerApplication.run(SourceFile:618) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
    I know where the errors are, but I do not know how to fix them due to no RED underlined errors I just know what lines and classes they are in
    Now My MainClass it is line 14 -- Main class Below:
    Code:java
    1. package me.webbhead.deathcore;
    2.  
    3. import me.webbhead.deathcore.listeners.*;
    4. import me.webbhead.deathcore.me.webbhead.deathcore.commands.*;
    5. import org.bukkit.Bukkit;
    6. import org.bukkit.plugin.Plugin;
    7. import org.bukkit.plugin.PluginManager;
    8. import org.bukkit.plugin.java.JavaPlugin;
    9.  
    10. public class Deathcore extends JavaPlugin {
    11.  
    12. public void onEnable() {
    13. SettingsManager.getInstance().setup(this);
    14. ArenaManager.getInstance().setupArenas();
    15.  
    16. getCommand("create").setExecutor(new Create());
    17. getCommand("delete").setExecutor(new Delete());
    18. getCommand("forcestart").setExecutor(new ForceStart());
    19. getCommand("forcestop").setExecutor(new ForceStop());
    20. getCommand("join").setExecutor(new Join());
    21. getCommand("leave").setExecutor(new Leave());
    22. getCommand("setjoin").setExecutor(new Setjoin());
    23. getCommand("setstart").setExecutor(new Setstart());
    24.  
    25. PluginManager pm = Bukkit.getServer().getPluginManager();
    26. pm.registerEvents(new BlockBreak(), this);
    27. pm.registerEvents(new PlayerDeath(), this);
    28. pm.registerEvents(new PlayerHunger(), this);
    29. pm.registerEvents(new PlayerQuit(), this);
    30. pm.registerEvents(new LobbySign(), this);
    31. }
    32. public static Plugin getPlugin() {
    33. return Bukkit.getServer().getPluginManager().getPlugin("Deathcore");
    34. }
    35. }
    36.  


    Now it is line 21 for ArenaManager it is line 21: -- SettingsManager class below:
    Code:java
    1. package me.webbhead.deathcore;
    2.  
    3. import org.bukkit.entity.Player;
    4.  
    5. import java.util.ArrayList;
    6.  
    7. public class ArenaManager {
    8.  
    9. public ArenaManager() {
    10. }
    11.  
    12. public static ArenaManager instance = new ArenaManager();
    13.  
    14. public static ArenaManager getInstance() {
    15. return instance;
    16. }
    17.  
    18. private ArrayList<Arena> arenas = new ArrayList<Arena>();
    19.  
    20. public void setupArenas() {
    21. for (String key : SettingsManager.getInstance().getConfiguration().getConfigurationSection("section").getKeys(true)) {
    22. arenas.add(new Arena(Integer.parseInt(key)));
    23. }
    24.  
    25. }
    26.  
    27. public ArrayList<Arena> getArenas() {
    28. return arenas;
    29. }
    30.  
    31. public Arena getArena(int id) {
    32. for (Arena a : arenas) {
    33. if (a.getID() == id) return a;
    34. }
    35. return null;
    36. }
    37.  
    38. public Arena getArena(Player p) {
    39. for (Arena a : arenas) {
    40. if (a.containsPlayer(p)) return a;
    41. }
    42. return null;
    43. }
    44. }


    Here is my SettingsManager Class Below:
    Code:java
    1. package me.webbhead.deathcore;
    2.  
    3. import org.bukkit.configuration.ConfigurationSection;
    4. import org.bukkit.configuration.file.FileConfiguration;
    5. import org.bukkit.configuration.file.YamlConfiguration;
    6. import org.bukkit.plugin.Plugin;
    7.  
    8. import java.io.File;
    9.  
    10. /**
    11. * @Author webbhead.
    12. */
    13. public class SettingsManager {
    14.  
    15. private SettingsManager() { }
    16.  
    17. private Plugin plugin;
    18.  
    19. private static SettingsManager instance = new SettingsManager();
    20.  
    21. public static SettingsManager getInstance() {
    22. return instance;
    23. }
    24.  
    25. private File arenaFile;
    26. private FileConfiguration arenaConfig;
    27.  
    28. public void setup(Plugin p) {
    29. if (!p.getDataFolder().exists()) p.getDataFolder().mkdir();
    30. this.plugin = plugin;
    31.  
    32. arenaFile = new File(p.getDataFolder(), "arenas.yml");
    33.  
    34. if(!arenaFile.exists()) {
    35. try { arenaFile.createNewFile(); }
    36. catch (Exception e) { e.printStackTrace(); }
    37. }
    38.  
    39. arenaConfig = YamlConfiguration.loadConfiguration(arenaFile);
    40. }
    41.  
    42. public void set(String path, Object value) {
    43. arenaConfig.set(path, value);
    44. try { arenaConfig.save(arenaFile); }
    45. catch (Exception e) { e.printStackTrace(); }
    46. }
    47. public FileConfiguration getConfiguration() {
    48. return arenaConfig;
    49. }
    50.  
    51. public ConfigurationSection createConfigurationSection(String path) {
    52. ConfigurationSection cs = arenaConfig.createSection(path);
    53. try { arenaConfig.save(arenaFile); }
    54. catch (Exception e) { e.printStackTrace(); }
    55. return cs;
    56. }
    57. public <T> T get(String path) {
    58. return (T) arenaConfig.get(path);
    59. }
    60.  
    61. public Plugin getPlugin() {
    62. return plugin;
    63. }
    64. }



    I don't know if this will help but I will put my Arena.java Class below:
    Code:java
    1. package me.webbhead.deathcore;
    2.  
    3. import me.webbhead.deathcore.Arena.ArenaState;
    4. import me.webbhead.deathcore.MessageManager.MessageType;
    5. import org.bukkit.Bukkit;
    6. import org.bukkit.Location;
    7. import org.bukkit.configuration.ConfigurationSection;
    8. import org.bukkit.entity.Player;
    9. import org.bukkit.inventory.ItemStack;
    10.  
    11. import java.util.ArrayList;
    12.  
    13. public class Arena {
    14.  
    15. public enum ArenaState { DISABLED, WAITING, COUNTING_DOWN, STARTED; }
    16.  
    17. private int id, numPlayers, currentPlayers = 0;
    18. protected ArenaState state = ArenaState.DISABLED;
    19. private ArrayList<PlayerData> data;
    20. private Location spawnPoint;
    21.  
    22. protected Arena(int id) {
    23. this.id = id;
    24. this.data = new ArrayList<PlayerData>();
    25. this.numPlayers = SettingsManager.getInstance().get("arenas." + id + ".numPlayers");
    26.  
    27. ConfigurationSection s = SettingsManager.getInstance().get("arenas." + id + ".spawn");
    28. spawnPoint = new Location(
    29. Bukkit.getServer().getWorld(s.getString("world")),
    30. s.getDouble("x"),
    31. s.getDouble("y"),
    32. s.getDouble("z"),
    33. (float) s.getDouble("pitch"),
    34. (float) s.getDouble("yaw")
    35. );
    36.  
    37. ConfigurationSection ss = SettingsManager.getInstance().get("arenas." + id + ".start");
    38. spawnPoint = new Location(
    39. Bukkit.getServer().getWorld(s.getString("world")),
    40. ss.getDouble("x"),
    41. ss.getDouble("y"),
    42. ss.getDouble("z"),
    43. (float) ss.getDouble("pitch"),
    44. (float) ss.getDouble("yaw")
    45. );
    46.  
    47. state = ArenaState.WAITING;
    48. }
    49.  
    50. public int getID() {
    51. return id;
    52. }
    53.  
    54. public ArenaState getState() {
    55. return state;
    56. }
    57.  
    58. public void addPlayer(Player p) {
    59. if (currentPlayers >= numPlayers) {
    60. MessageManager.getInstance().msg(p, MessageType.BAD, "There are too many players.");
    61. return;
    62. }
    63.  
    64. data.add(new PlayerData(p));
    65.  
    66. p.getInventory().clear();
    67. // Add wand.
    68.  
    69. p.teleport(spawnPoint);
    70.  
    71. currentPlayers++;
    72. }
    73.  
    74. public void removePlayer(Player p) {
    75. PlayerData d = getPlayerData(p);
    76. d.restorePlayer();
    77. data.remove(d);
    78.  
    79. currentPlayers--;
    80. }
    81.  
    82. public void start() {
    83. this.state = ArenaState.COUNTING_DOWN;
    84. final Countdown c = new Countdown(30, "Game starting in %t seconds!", this, 30, 20, 10, 5, 4, 3, 2, 1);
    85. final int id = 0;
    86. Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(SettingsManager.getInstance().getPlugin(), new Runnable() {
    87. public void run() {
    88. if (!c.isDone()) c.run();
    89. else Bukkit.getServer().getScheduler().cancelTask(id);
    90. }
    91. }, 0, 20);
    92. }
    93.  
    94. public void stop() {
    95. for (PlayerData pd : data) pd.restorePlayer();
    96. }
    97.  
    98. public boolean containsPlayer(Player p) {
    99. return getPlayerData(p) != null;
    100. }
    101.  
    102. private PlayerData getPlayerData(Player p) {
    103. for (PlayerData d : data) {
    104. if (d.isForPlayer(p)) return d;
    105. }
    106. return null;
    107. }
    108.  
    109. protected void sendMessage(MessageType type, String... messages) {
    110. for (PlayerData d : data) MessageManager.getInstance().msg(d.getPlayer(), type, messages);
    111. }
    112. }
    113.  
    114. class PlayerData {
    115.  
    116. private String playerName;
    117. private ItemStack[] contents, armorContents;
    118. private Location location;
    119.  
    120. protected PlayerData(Player p) {
    121. this.playerName = p.getName();
    122. this.contents = p.getInventory().getContents();
    123. this.armorContents = p.getInventory().getArmorContents();
    124. this.location = p.getLocation();
    125. }
    126.  
    127. protected Player getPlayer() {
    128. return Bukkit.getServer().getPlayer(playerName);
    129. }
    130.  
    131. protected void restorePlayer() {
    132. Player p = Bukkit.getServer().getPlayer(playerName);
    133.  
    134. p.getInventory().setContents(contents);
    135. p.getInventory().setArmorContents(armorContents);
    136. p.teleport(location);
    137. }
    138.  
    139. protected boolean isForPlayer(Player p) {
    140. return playerName.equalsIgnoreCase(p.getName());
    141. }
    142. }
    143.  
    144. class Countdown implements Runnable {
    145.  
    146. private boolean isDone = false;
    147. public Location startPoint;
    148. private int timer;
    149. public Player p;
    150. private String msg;
    151. private Arena a;
    152. private ArrayList<Integer> countingNums;
    153.  
    154. public Countdown(int start, String msg, Arena a, int... countingNums) {
    155. this.timer = start;
    156. this.msg = msg;
    157. this.a = a;
    158. this.countingNums = new ArrayList<Integer>();
    159. for (int i : countingNums) this.countingNums.add(i);
    160. }
    161.  
    162. public void run() {
    163. if (timer == 0) {
    164. a.sendMessage(MessageType.GOOD, "The game has begun!");
    165. p.teleport(startPoint);
    166. a.state = ArenaState.STARTED;
    167. isDone = true;
    168. return;
    169. }
    170. if (countingNums.contains(timer)) {
    171. a.sendMessage(MessageType.INFO, msg.replaceAll("%t", timer + ""));
    172. }
    173.  
    174. timer--;
    175. }
    176.  
    177. public boolean isDone() {
    178. return isDone;
    179. }
    180. }
     
  2. Offline

    Rainy37

    hmm, idk do you not have a config file?
    maybe after
    Code:java
    1. for (String key : SettingsManager.getInstance().getConfiguration().getConfigurationSection("section").getKeys(true)) {
    2.  

    put if(key != null){
    //do your stuff
     
  3. Offline

    webbhead

    Rainy37
    I am trying this now. I'll let you know how it goes.
     
  4. Offline

    L33m4n123

    whats your settingsmanager class?
     
  5. Offline

    webbhead

    @Rainy32
    Nope I still seem to get the same error stack.

    Oh Whoops! I said the ArenaManager Class was the SettingsManager Im fixing it now. And I will add my Settings Manager Class up there.

    L33m4n123 Okay, it is all fixed now.

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

    Garris0n

    [​IMG]

    That is not a full stack trace, post the full stack trace in code tags.
     
    robbo5899 and L33m4n123 like this.
  7. Offline

    webbhead

    Garris0n
    This is my error in console:
    Code:
    [11:45:37 INFO]: [Deathcore] Enabling Deathcore vv1.0
    [11:45:37 ERROR]: Error occurred while enabling Deathcore vv1.0 (Is it up to date?)
    java.lang.NullPointerException
        at me.webbhead.deathcore.ArenaManager.setupArenas(ArenaManager.java:21) ~[?:?]
        at me.webbhead.deathcore.Deathcore.onEnable(Deathcore.java:14) ~[?:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:250) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:324) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:404) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
        at org.bukkit.craftbukkit.v1_7_R2.CraftServer.loadPlugin(CraftServer.java:442) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
        at org.bukkit.craftbukkit.v1_7_R2.CraftServer.enablePlugins(CraftServer.java:376) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
        at org.bukkit.craftbukkit.v1_7_R2.CraftServer.reload(CraftServer.java:776) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
        at org.bukkit.Bukkit.reload(Bukkit.java:279) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
        at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:23) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:180) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
        at org.bukkit.craftbukkit.v1_7_R2.CraftServer.dispatchCommand(CraftServer.java:686) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
        at org.bukkit.craftbukkit.v1_7_R2.CraftServer.dispatchServerCommand(CraftServer.java:673) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
        at net.minecraft.server.v1_7_R2.DedicatedServer.ax(DedicatedServer.java:286) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
        at net.minecraft.server.v1_7_R2.DedicatedServer.v(DedicatedServer.java:251) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
        at net.minecraft.server.v1_7_R2.MinecraftServer.u(MinecraftServer.java:548) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
        at net.minecraft.server.v1_7_R2.MinecraftServer.run(MinecraftServer.java:459) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
        at net.minecraft.server.v1_7_R2.ThreadServerApplication.run(SourceFile:618) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-9-g8e87ff5-b3033jnks]
    That is the full error.
     
  8. Offline

    Garris0n

    Right, looked weird without the code tags.

    Anyway, something is null there. Probably getConfigurationSection() on line 21 of ArenaManager. Are you sure the section exists? Also, are you sure you want to use getKeys(true) and not getKeys(false)?
     
  9. Offline

    webbhead

    Garris0n
    Well, the configuration section does not exist because When Ingame I cannot create an arena because when I type the commands it just types it back to me. Also I will use getKeys(false);

    Nope still doesn't work.

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

    Garris0n

    Well what did you fix? Did you add a null check? I wasn't saying getKeys(false) would fix it, just that you probably meant to use it (I'm not sure about that, I was just wondering because getKeys(true) has essentially no use case).
     
  11. Offline

    webbhead

    I did do the null check with what Rainy37 said but still got same errors.
     
  12. Offline

    Garris0n

    Do a null check for the ConfigurationSection, not the keys.
     
  13. Offline

    webbhead

    Garris0n
    It still seems to not work I get the same exact error in console.
     
  14. Offline

    Garris0n

    Add a null check to every value on that line and figure out what's returning null.
     
  15. Offline

    webbhead

    Garris0n
    These are my current null checks I do not know what else to check.
    if (SettingsManager.getInstance().getConfiguration().getConfigurationSection("section") != null) {
    if (key != null) {
     
  16. Offline

    Garris0n

    Check getInstance and getConfiguration.
     
  17. Offline

    webbhead

    Garris0n
    So, if (SettingsManager.getInstance().getConfiguration() != null) { ??

    Note: I do not have a config.yml I only have an arenas.yml <--- I don't know if that is a problem.
     
  18. Offline

    Garris0n

    Print a message if "getInstance == null", "getConfiguration == null", or "getConfigurationSection == null".
     
  19. Offline

    webbhead

    What do you mean? Could you give me an example?
     
  20. Offline

    webbhead

  21. Offline

    webbhead

    Bumpity Bump Bump Bump...
    I need help on this I really want to get this finished. So thanks if you can help :)
     
Thread Status:
Not open for further replies.

Share This Page