NullPointer Exception

Discussion in 'Plugin Development' started by mnoco8, Apr 4, 2014.

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

    mnoco8

    Alright, whenever I run the plugin on my bukkit server I get this error:

    Code:
    17:31:24 [SEVERE] Could not load 'plugins\volcan33.jar' in folder 'plugins'
    org.bukkit.plugin.InvalidPluginException: java.lang.NullPointerException
            at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.j
    ava:182)
            at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.
    java:305)
            at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager
    .java:230)
            at org.bukkit.craftbukkit.v1_6_R3.CraftServer.loadPlugins(CraftServer.ja
    va:241)
            at org.bukkit.craftbukkit.v1_6_R3.CraftServer.<init>(CraftServer.java:21
    9)
            at net.minecraft.server.v1_6_R3.PlayerList.<init>(PlayerList.java:56)
            at net.minecraft.server.v1_6_R3.DedicatedPlayerList.<init>(SourceFile:11
    )
            at net.minecraft.server.v1_6_R3.DedicatedServer.init(DedicatedServer.jav
    a:107)
            at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java
    :393)
            at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:5
    83)
    Caused by: java.lang.NullPointerException
            at com.gmail.mnoco8.Destruction.<init>(Destruction.java:30)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
     
            at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
     
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Sou
    rce)
            at java.lang.reflect.Constructor.newInstance(Unknown Source)
            at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.j
    ava:178)
            ... 9 more
    Here is my code:
    Code:java
    1. package com.gmail.mnoco8;
    2.  
    3. import java.util.HashMap;
    4.  
    5. import java.util.Map;
    6. import java.util.Random;
    7.  
    8. import org.bukkit.Location;
    9. import org.bukkit.Material;
    10. import org.bukkit.block.Block;
    11. import org.bukkit.command.Command;
    12. import org.bukkit.command.CommandSender;
    13. import org.bukkit.event.EventHandler;
    14. import org.bukkit.event.Listener;
    15. import org.bukkit.event.block.BlockPlaceEvent;
    16. import org.bukkit.plugin.java.JavaPlugin;
    17.  
    18. public class Destruction extends JavaPlugin implements Listener{
    19.  
    20. public void onEnable() {
    21. getServer().getPluginManager().registerEvents(this, this); }
    22.  
    23. public void onDisable() {
    24.  
    25. }
    26.  
    27. Random rand = new Random();
    28. Map<String, Location>
    29. locations = new HashMap<String, Location>();
    30. Location b = (Location) locations.get(Material.DRAGON_EGG).getBlock();
    31. Location loc = locations.get(b);
    32. Location loc2 = locations.put("Dragon_EGG", loc);
    33.  
    34. @EventHandler
    35. public void onBlockPlace(BlockPlaceEvent e){
    36. Block block = e.getBlockPlaced();
    37. if(block.getType() == Material.DRAGON_EGG){
    38. loc2.add(loc);
    39. }
    40. }
    41. public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
    42. {
    43. if (cmd.getName().equalsIgnoreCase("Volcano"));
    44. getServer().getWorld(label).spawnFallingBlock(loc, Material.LAVA, (byte) 0);
    45. return false;
    46. }}


    and here is my plugin.yml:
    Code:
    name: volcano
    main: com.gmail.mnoco8.Destruction
    version: 1.0
    commands:
    volcano:
      usage: volcano
        
     
  2. Offline

    Squid_Boss

    Line 30 returns null
     
  3. Offline

    Maurdekye

    mnoco8 On line 29, you define a location hashmap of type <String, Location>, but you attempt to grab a value from it of the type Material on line 30. This gives a null value, because the HashMap has a key type of String, not Material. Fix that.
     
  4. Offline

    mnoco8

    Maurdekye
    I changed such, but
    Code:java
    1. Material b = locations.get(material.dragon_egg).getblock
    2.  
    3.  


    seems to go quite funky, either resulting in changing material to block or material to location which present their own errors
     
  5. Offline

    Maurdekye

    mnoco8 At least repost your new code, or fix your original post so we can see what you've changed.
     
  6. Offline

    mnoco8

    Maurdekye This is all I have changed:
    Code:java
    1. Map<Material,Location>
    2. locations = new HashMap<Material, location>();
    3. Material b = locations.get(Material.DRAGON_EGG).getBlock();
    4. Location loc = locations.get(b);
    5. Location loc2 = locations.put(b, loc);
    6.  
     
  7. Offline

    Europia79

    mnoco8

    This seems like a really easy problem because like Maurdekye was saying: You define a Hashmap on line 29, then you turn around and try to get data from the HashMap without ever populating the HashMap with data.

    Hopefully this helps. Good luck!
     
  8. Offline

    mnoco8

    Europia79 I am trying to add data, then call it so the .get i am trying to get the location of a block and then use it to put it in the hashmap and store it
     
  9. Offline

    Europia79

    mnoco8

    I would
    1. define the class
    2. define the fields
    3. initialize all the fields in the contructor
    4. Use events gather data and populate your HashMap

    Code:java
    1. package com.gmail.mnoco8;
    2.  
    3. import java.util.HashMap;
    4.  
    5. import java.util.Map;
    6. import java.util.Random;
    7. import org.bukkit.Location;
    8. import org.bukkit.Material;
    9. import org.bukkit.block.Block;
    10. import org.bukkit.command.Command;
    11. import org.bukkit.command.CommandSender;
    12. import org.bukkit.event.EventHandler;
    13. import org.bukkit.event.Listener;
    14. import org.bukkit.event.block.BlockPlaceEvent;
    15. import org.bukkit.plugin.java.JavaPlugin;
    16.  
    17. public class Destruction extends JavaPlugin implements Listener {
    18.  
    19. Random rand;
    20. Map<String, Location> locations;
    21.  
    22. /**
    23. * Constructor
    24. */
    25. public Destruction() {
    26. rand = new Random();
    27. locations = new HashMap<String, Location>();
    28. }
    29.  
    30. public void onEnable() {
    31. getServer().getPluginManager().registerEvents(this, this);
    32. }
    33.  
    34. public void onDisable() {
    35. }
    36.  
    37. @EventHandler
    38. public void onBlockPlace(BlockPlaceEvent e){
    39. Block block = e.getBlockPlaced();
    40. if(block.getType() == Material.DRAGON_EGG){
    41. locations.put(e.getPlayer().getName(), block.getLocation());
    42. }
    43. }
    44. public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
    45. {
    46. if (cmd.getName().equalsIgnoreCase("Volcano"));
    47. getServer().getWorld(label).spawnFallingBlock(loc, Material.LAVA, (byte) 0);
    48. return false;
    49. }}
     
  10. Offline

    mnoco8

    Europia79 this presented more errors than usual, I just need to store the location, just get it simple as that then be able to call it later.
     
  11. Offline

    Europia79

    mnoco8

    it works flawlessly for me:
    I used the event to gather data and store it into the HashMap.
    Then I used the "/gethashmap" command to access the data in it.

    [​IMG]


    Code:java
    1. package mc.euro.destruction;
    2.  
    3. import java.util.HashMap;
    4.  
    5. import java.util.Map;
    6. import java.util.Random;
    7. import org.bukkit.Location;
    8. import org.bukkit.Material;
    9. import org.bukkit.block.Block;
    10. import org.bukkit.command.Command;
    11. import org.bukkit.command.CommandSender;
    12. import org.bukkit.event.EventHandler;
    13. import org.bukkit.event.Listener;
    14. import org.bukkit.event.block.BlockPlaceEvent;
    15. import org.bukkit.plugin.java.JavaPlugin;
    16.  
    17. public class Destruction extends JavaPlugin implements Listener {
    18.  
    19. Random rand;
    20. Map<String, Location> locations;
    21.  
    22. /**
    23.   * Constructor
    24.   */
    25. public Destruction() {
    26. rand = new Random();
    27. locations = new HashMap<String, Location>();
    28.  
    29. }
    30.  
    31. @Override
    32. public void onEnable() {
    33. getServer().getPluginManager().registerEvents(this, this);
    34. getServer().getPluginCommand("getHashMap").setExecutor(this);
    35. }
    36.  
    37. @Override
    38. public void onDisable() {
    39. }
    40.  
    41. @EventHandler
    42. public void onBlockPlace(BlockPlaceEvent e) {
    43. e.getPlayer().sendMessage("Destruction event called.");
    44. Block block = e.getBlockPlaced();
    45. if (block.getType() == Material.DRAGON_EGG) {
    46. locations.put(e.getPlayer().getName(), block.getLocation());
    47. }
    48. }
    49.  
    50. @Override
    51. public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    52. if (cmd.getName().equalsIgnoreCase("getHashMap") &&
    53. locations.containsKey(sender.getName())) {
    54. sender.sendMessage("" + locations.get(sender.getName()).toString());
    55. }
    56. return true;
    57. }
    58. }
     
Thread Status:
Not open for further replies.

Share This Page