Solved Help with NPE

Discussion in 'Plugin Development' started by random_username, Dec 12, 2013.

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

    random_username

    Hello, I am getting an NPE in my plugin, here is the stacktrace:
    Code:
    09:36:19 ERROR]: null
    rg.bukkit.command.CommandException: Unhandled exception executing command 'sf'
    n plugin SandFall v1.0
          at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[cra
    tbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
          at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:19
    ) ~[craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
          at org.bukkit.craftbukkit.v1_7_R1.CraftServer.dispatchCommand(CraftServe
    .java:542) ~[craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
          at net.minecraft.server.v1_7_R1.PlayerConnection.handleCommand(PlayerCon
    ection.java:930) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
          at net.minecraft.server.v1_7_R1.PlayerConnection.a(PlayerConnection.java
    812) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
          at net.minecraft.server.v1_7_R1.PacketPlayInChat.a(PacketPlayInChat.java
    28) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
          at net.minecraft.server.v1_7_R1.PacketPlayInChat.handle(PacketPlayInChat
    java:47) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
          at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:146
    [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
          at net.minecraft.server.v1_7_R1.ServerConnection.c(SourceFile:134) [craf
    bukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
          at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:6
    1) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
          at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:2
    0) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
          at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:5
    1) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
          at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java
    453) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
          at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:6
    7) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
    aused by: java.lang.NullPointerException
          at me.Livid_C0ffee.Sandfall.Arena_Manager.ArenaManager.saveArena(ArenaMa
    ager.java:171) ~[?:?]
          at me.Livid_C0ffee.Sandfall.Arena_Manager.ArenaManager.createArena(Arena
    anager.java:64) ~[?:?]
          at me.Livid_C0ffee.Sandfall.Commands.SandFall.onCommand(SandFall.java:52
    ~[?:?]
          at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[cra
    tbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
          ... 13 more
    Arenamanager:
    Code:java
    1. package me.Livid_C0ffee.Sandfall.Arena_Manager;
    2.  
    3. import me.Livid_C0ffee.Sandfall.Arena.Arena;
    4. import me.Livid_C0ffee.Sandfall.Main;
    5. import org.bukkit.Bukkit;
    6. import org.bukkit.ChatColor;
    7. import org.bukkit.Location;
    8. import org.bukkit.World;
    9. import org.bukkit.configuration.file.FileConfiguration;
    10. import org.bukkit.configuration.file.YamlConfiguration;
    11. import org.bukkit.entity.Player;
    12. import org.bukkit.inventory.ItemStack;
    13.  
    14. import java.io.File;
    15. import java.io.IOException;
    16. import java.util.*;
    17.  
    18.  
    19. public class ArenaManager {
    20.  
    21. private Main main;
    22.  
    23. public ArenaManager(Main main){
    24. this.main = main;
    25. }
    26.  
    27. public static ArenaManager a = new ArenaManager();
    28.  
    29.  
    30. public ArenaManager(){
    31.  
    32. }
    33.  
    34. public static ArenaManager getManager(){
    35. return a;
    36. }
    37.  
    38.  
    39. //where the player was before joining...
    40. public Map<String, Location> locs = new HashMap<String, Location>();
    41. //save inventory
    42. Map<String, ItemStack[]> inv = new HashMap<String, ItemStack[]>();
    43. //save armor
    44. Map<String, ItemStack[]> armor = new HashMap<String, ItemStack[]>();
    45.  
    46. //will be used in removing a player
    47. public Map<String, String> playerarena = new HashMap<String, String>();
    48.  
    49. int arenanum = 0;
    50.  
    51. //arenas to avoid NullPointerException...
    52. List<Arena> arenas = new ArrayList<Arena>();
    53.  
    54. //store the id's for a check...
    55. List<Integer> arenasid = new ArrayList<Integer>();
    56.  
    57. public Arena createArena(String world, Location loc1, Location loc2, Location spawnpoint) throws IOException{
    58. int number = arenanum + 1;
    59. arenanum++;
    60. Arena a = new Arena(number, loc1, loc2, world, spawnpoint);
    61. int id = a.getId();
    62. arenas.add(a);
    63. arenasid.add(a.getId());
    64. saveArena(id); //line 64
    65. return null;
    66. }
    67.  
    68. public void addPlayer(Player player, int id) throws IOException{
    69. Arena a = getArena(id);
    70. if(a == null){
    71. player.sendMessage("§6[SandFall] §4Invalid Arena!");
    72. return;
    73. }else{
    74. a.getPlayers().add(player.getName());
    75. inv.put(player.getName(), player.getInventory().getContents());
    76. armor.put(player.getName(), player.getInventory().getArmorContents());
    77. playerarena.put(player.getName(), String.valueOf(a.getId()));
    78.  
    79. player.getInventory().setArmorContents(null);
    80. player.getInventory().clear();
    81.  
    82. player.teleport(a.getSpawnpoint());
    83. }
    84. }
    85.  
    86.  
    87. public void removePlayer(Player player) throws IOException{
    88. int i = 0;
    89. if(playerarena.containsValue(player.getName())){
    90. for(String torem : playerarena.values()){
    91. if(torem!=player.getName()){
    92. i = Integer.valueOf(torem);
    93. }
    94. }
    95. Arena a = getArena(i);
    96. if(a == null || !a.getPlayers().contains(player.getName())){
    97. player.sendMessage("§6[Error]");
    98. return;
    99. }
    100. a.getPlayers().remove(player.getName());//remove from arena
    101.  
    102. player.getInventory().clear();
    103. player.getInventory().setArmorContents(null);
    104.  
    105. player.getInventory().setContents(inv.get(player.getName()));//restore inventory
    106. player.getInventory().setArmorContents(armor.get(player.getName()));
    107.  
    108. inv.remove(player.getName());
    109. armor.remove(player.getName());
    110. player.teleport(locs.get(player.getName()));
    111. locs.remove(player.getName());
    112. playerarena.remove(player.getName());
    113.  
    114.  
    115. }
    116.  
    117. }
    118.  
    119. public Arena getArena(int id) throws IOException{
    120. if(id != 0){
    121. System.out.println(arenas.toString());
    122. System.out.println(arenasid.toString());
    123. if(arenasid.contains(id)){
    124. for(Arena a: arenas){
    125. if(a.getId() == id){
    126. return a;
    127. }
    128. }
    129. arenasid.remove(id);
    130. arenas.remove(a);
    131. System.out.println(arenas.toString());
    132. System.out.println(arenasid.toString());
    133. }else{
    134. File arena = new File(main.getDataFolder() + File.separator + "Arenas" + File.separator + String.valueOf(id) + ".yml");
    135. System.out.println("I got to start the getarena try!");
    136. if(arena.exists()){
    137. FileConfiguration con = YamlConfiguration.loadConfiguration(arena);
    138. //locations
    139. World loc1w = Bukkit.getWorld(con.getString("Point_1_location.world"));
    140. Double loc1x = con.getDouble("Point_1_location.x");
    141. Double loc1y = con.getDouble("Point_1_location.y");
    142. Double loc1z = con.getDouble("Point_1_location.z");
    143. Location loc1 = new Location(loc1w,loc1x,loc1y,loc1z);
    144. World loc2w = Bukkit.getWorld(con.getString("Point_2_location.world"));
    145. Double loc2x = con.getDouble("Point_2_location.x");
    146. Double loc2y = con.getDouble("Point_2_location.y");
    147. Double loc2z = con.getDouble("Point_2_location.z");
    148. Location loc2 = new Location(loc2w,loc2x,loc2y,loc2z);
    149. String world = con.getString("World");
    150. World sw = Bukkit.getWorld(con.getString("Spawnpoint_location.world"));
    151. Double sx = con.getDouble("Spawnpoint_location.x");
    152. Double sy = con.getDouble("Spawnpoint_location.y");
    153. Double sz = con.getDouble("Spawnpoint_location.z");
    154. Location spawnp = new Location(sw,sx,sy,sz);
    155. Arena a = new Arena(id, loc1, loc2, world, spawnp);
    156. return a;
    157. }
    158. }
    159.  
    160.  
    161. }
    162. return null;
    163.  
    164. }
    165.  
    166. public void saveArena(int id) throws IOException{
    167. if(id != 0){
    168. Arena a = getArena(id);
    169. if(a != null){
    170. String idd = String.valueOf(a.getId());
    171. File arena = new File(main.getDataFolder() + File.separator + "Arenas" + File.separator + idd + ".yml"); //line 171
    172. if(!arena.exists()){
    173. FileConfiguration con = YamlConfiguration.loadConfiguration(arena);
    174. con.set("ID", a.getId());
    175. con.set("Point_1_location.x", a.getLoc1().getX());
    176. con.set("Point_1_location.y", a.getLoc1().getY());
    177. con.set("Point_1_location.z", a.getLoc1().getZ());
    178. con.set("Point_1_location.world", a.getLoc1().getWorld().getName());
    179. con.set("Point_2_location.x", a.getLoc2().getX());
    180. con.set("Point_2_location.y", a.getLoc2().getY());
    181. con.set("Point_2_location.z", a.getLoc2().getZ());
    182. con.set("Point_2_location.world", a.getLoc2().getWorld().getName());
    183. con.set("World", a.getLoc1().getWorld().getName());
    184. con.set("Spawnpoint_location.x", a.getSpawnpoint().getX());
    185. con.set("Spawnpoint_location.y", a.getSpawnpoint().getY());
    186. con.set("Spawnpoint_location.z", a.getSpawnpoint().getZ());
    187. con.set("Spawnpoint_location.world", a.getSpawnpoint().getWorld().getName());
    188. con.save(arena);
    189. System.out.println("I got to save the arena!");
    190. }
    191. }
    192. }
    193. }
    194.  
    195. public boolean playerInGame(Player player){
    196. for(String pn : playerarena.values()){
    197. if(pn.contains(player.getName()))
    198. return true;
    199.  
    200. }
    201. return false;
    202. }
    203.  
    204. public void deleteArena(int id){
    205. try{
    206. File arena = new File(main.getDataFolder() + File.separator + "Arenas" + File.separator + id + ".yml");
    207. if(arena.exists()){
    208. arena.delete();
    209. }
    210. }catch(Exception e){
    211. e.printStackTrace();
    212. }
    213. }
    214.  
    215. }
    216.  


    Line 52 in my sandfall class:
    note: Yes, the variables loc and loc2 do exist in my SandFall class.
    Code:java
    1. ArenaManager.getManager().createArena(loc.getWorld().getName(), loc, loc2, loc);

    How can I solve this? :)
     
  2. Offline

    Mmarz11

    The problem is that ArenaManager.getManager() is returning the ArenaManager that was set using the ArenaManager() constructor. This constructor never sets the Main main variable causing the NullPointerException when it tries to use that variable.

    I would create an ArenaManager variable in your SandFall class and set it using new ArenaManager(this) in your onEnable() method. You would then change line 52 and other lines involving it to use the variable instead.
     
  3. Offline

    random_username

    Thanks, I no longer have the ArenaManager in the NPE :D What you say worked. Now I only have an NPE in the command, any Idea on how to fix it as well? :) Stacktrace:
    Code:
    [11:19:55 INFO]: Kait18 issued server command: /sf create
    [11:19:55 ERROR]: null
    org.bukkit.command.CommandException: Unhandled exception executing command 'sf'
    in plugin SandFall v1.0
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[cra
    ftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:19
    2) ~[craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
            at org.bukkit.craftbukkit.v1_7_R1.CraftServer.dispatchCommand(CraftServe
    r.java:542) ~[craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
            at net.minecraft.server.v1_7_R1.PlayerConnection.handleCommand(PlayerCon
    nection.java:930) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
            at net.minecraft.server.v1_7_R1.PlayerConnection.a(PlayerConnection.java
    :812) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
            at net.minecraft.server.v1_7_R1.PacketPlayInChat.a(PacketPlayInChat.java
    :28) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
            at net.minecraft.server.v1_7_R1.PacketPlayInChat.handle(PacketPlayInChat
    .java:47) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
            at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:146
    ) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
            at net.minecraft.server.v1_7_R1.ServerConnection.c(SourceFile:134) [craf
    tbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:6
    51) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
            at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:2
    50) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:5
    41) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java
    :453) [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]
    Caused by: java.lang.NullPointerException
            at me.Livid_C0ffee.Sandfall.Commands.SandFall.onCommand(SandFall.java:58
    ) ~[?:?]
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[cra
    ftbukkit.jar:git-Bukkit-1.6.4-R2.0-37-g4857595-b2951jnks]
            ... 13 more
    SandFall class onCommand:
    Code:java
    1. public boolean onCommand(CommandSender Sender, Command cmd, String label, String[] args)
    2. {
    3. String prefix = "§6[SandFall]";
    4. if ((Sender instanceof Player))
    5. {
    6. Player player = (Player)Sender;
    7. if (cmd.getName().equalsIgnoreCase("sandfall"))
    8. {
    9. if(args.length == 1){
    10. if(args[0].equalsIgnoreCase("help")){
    11. player.sendMessage(prefix + "§aSandFall v 1.1 Developed by Livid_C0ffee and Kait18.");
    12. player.sendMessage(prefix + "§8§l---COMMANDS---");
    13. player.sendMessage(prefix + "§e/SF help §f§l- §e Shows this page ");
    14. player.sendMessage(prefix + "§e/SF create <ArenaID> §f§l- §eCreate a SandFall arena ");
    15. player.sendMessage(prefix + "§e/SF add <ArenaID> pit §f§l - §eSet pit of arena");
    16. } if(args[0].equalsIgnoreCase("create")){
    17. WorldEditPlugin worldEdit = (WorldEditPlugin) Bukkit.getServer().getPluginManager().getPlugin("WorldEdit");
    18. Selection selection = worldEdit.getSelection(player);
    19. if(selection != null){
    20. if(selection instanceof CuboidSelection){
    21. if(selection.getHeight() == 11){
    22. Location loc = selection.getMaximumPoint();
    23. Location loc2 = selection.getMinimumPoint();
    24. if(loc.getWorld().getName() == loc2.getWorld().getName()){
    25. try {
    26. manager.createArena(loc.getWorld().getName(), loc, loc2, loc); //line 58
    27. } catch (IOException e) {
    28. e.printStackTrace();
    29. }
    30. player.sendMessage(prefix + "§eArena created!");
    31. }
    32. }
    33. }
    34. }
    35. }
    36. }
    37. return false;
    38. }

    Thanks for the help btw :)
     
  4. Offline

    Mmarz11

    random_username What is the code that you used to set the manager variable?
     
  5. Offline

    random_username

    Code:
    Code:java
    1. private ArenaManager manager;
    2. public SandFall(ArenaManager manager)
    3. {
    4. this.manager= manager;
    5. }

    Thanks for the reply btw :)
    Note: I tried:
    Code:java
    1. System.out.println(manager.getClass().getName());

    and got an NPE. For some reason, I think that it thinks the variable "manager" is null.
     
  6. Offline

    Mmarz11

    random_username SandFall is the JavaPlugin class correct? If so then put manager = new ArenaManager(this) in the onEnable() method. Something like:

    Code:java
    1. public void onEnable() {
    2. manager = new ArenaManager(this);
    3.  
    4. //any other code you have
    5. }


    EDIT:
    Derp. Just noticed the Main mentioned above...
     
  7. Offline

    random_username

    My current onEnable in main class:
    Code:java
    1. public void onEnable()
    2. {
    3. PluginDescriptionFile pdfFile = this.getDescription();
    4. PluginManager pm = Bukkit.getServer().getPluginManager();
    5. WorldEditPlugin worldEdit = (WorldEditPlugin) pm.getPlugin("WorldEdit");
    6. if(worldEdit == null){
    7. getLogger().severe("No WorldEdit found! Disabling SandFall!");
    8. pm.disablePlugin(this);
    9. }else{
    10. getLogger().info(pdfFile.getName() + pdfFile.getVersion() + " has been enabled!");
    11. pm.registerEvents(new events(this), this);
    12. getCommand("SandFall").setExecutor(new SandFall(this));
    13. getConfig().options().copyDefaults(true);
    14. saveDefaultConfig();
    15. new ArenaManager(this);
    16. }
    17. }

    Am I doing something wrong when calling the ArenaManager? If so, could it be the problem?
     
  8. Offline

    Mmarz11

  9. Offline

    random_username

    It shows "manager" in red, "Cannot resolve symbol manager". :)
     
  10. Offline

    Mmarz11

    random_username Okay I think I've got it now. Was a bit confused about what classes were what and such. Remove line 15. In the SandFall(Main main) constructor add manager = new ArenaManager(main);
     
    random_username likes this.
  11. Offline

    random_username

    Okay, I made:
    Code:java
    1. private Main main;
    2. public SandFall(Main main)
    3. {
    4. this.main = main;
    5. manager = new ArenaManager(main);
    6. }

    but now, how do I use the createArena() method from the ArenaManager? It cannot resolve symbol "manager" btw :) Edit: I tried
    Code:java
    1. private Main main;
    2. private ArenaManager manager;
    3. public SandFall(Main main)
    4. {
    5. this.main = main;
    6. manager = new ArenaManager(main);
    7. }
    8.  

    And It works now! Thanks so much! :D
     
Thread Status:
Not open for further replies.

Share This Page