NullpointerException with Vault

Discussion in 'Plugin Development' started by schegar, Jan 10, 2014.

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

    schegar

    Hi guys I get following error by clicking a sign:

    Show Spoiler

    [16:27:05] [Server thread/ERROR]: Could not pass event PlayerInteractEvent to EnchantSigns v1.0
    org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427) ~[craftbukkit-1.7.2-R0.2.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit-1.7.2-R0.2.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:481) [craftbukkit-1.7.2-R0.2.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:466) [craftbukkit-1.7.2-R0.2.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    at org.bukkit.craftbukkit.v1_7_R1.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:191) [craftbukkit-1.7.2-R0.2.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    at net.minecraft.server.v1_7_R1.PlayerInteractManager.interact(PlayerInteractManager.java:374) [craftbukkit-1.7.2-R0.2.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    at net.minecraft.server.v1_7_R1.PlayerConnection.a(PlayerConnection.java:628) [craftbukkit-1.7.2-R0.2.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    at net.minecraft.server.v1_7_R1.PacketPlayInBlockPlace.a(SourceFile:60) [craftbukkit-1.7.2-R0.2.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    at net.minecraft.server.v1_7_R1.PacketPlayInBlockPlace.handle(SourceFile:9) [craftbukkit-1.7.2-R0.2.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:146) [craftbukkit-1.7.2-R0.2.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    at net.minecraft.server.v1_7_R1.ServerConnection.c(SourceFile:134) [craftbukkit-1.7.2-R0.2.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:655) [craftbukkit-1.7.2-R0.2.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:250) [craftbukkit-1.7.2-R0.2.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:545) [craftbukkit-1.7.2-R0.2.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:457) [craftbukkit-1.7.2-R0.2.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617) [craftbukkit-1.7.2-R0.2.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    Caused by: java.lang.NullPointerException
    at de.schegar.enchantsigns.Signs.onClick(Signs.java:112) ~[?:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_21]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_21]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_21]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_21]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425) ~[craftbukkit-1.7.2-R0.2.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    ... 15 more



    here's my concerned method:
    Show Spoiler

    Code:java
    1. @EventHandler
    2. public void onClick(PlayerInteractEvent e) {
    3. if(e.getAction() == Action.RIGHT_CLICK_BLOCK || e.getAction() == Action.LEFT_CLICK_BLOCK) {
    4. Player p = e.getPlayer();
    5. BlockState bs = e.getClickedBlock().getState();
    6. if (bs instanceof Sign) {
    7. Sign sign = (Sign) bs;
    8. signCheck(sign.getLine(0));
    9. if (SignCheck == true) {
    10. if (e.getPlayer().hasPermission("es.use")) {
    11. String EnchantmentType = sign.getLine(0);
    12. Integer level = Integer.valueOf(sign.getLine(1));
    13. String payment = sign.getLine(2);
    14. if (p.getItemInHand().getType() == Material.AIR || p.getItemInHand() == null) {
    15. p.sendMessage("Please select what you want to enchant");
    16. } else {
    17. if (payment.equalsIgnoreCase("Price:")) {
    18. Double priceDouble = Double.valueOf(sign.getLine(3));
    19. if (this.econ.has(p.getName(), priceDouble)) {
    20. this.econ.withdrawPlayer(p.getName(), priceDouble);
    21. enchant(EnchantmentType, p, level);
    22. p.sendMessage("Enchanted successfully!");
    23. } else {
    24. p.sendMessage("$cYou don't have enough money");
    25. }
    26. } else if (payment.equalsIgnoreCase("Levels:")) {
    27. Integer priceInt = Integer.valueOf(sign.getLine(3));
    28. if (p.getLevel() >= priceInt) {
    29. p.setLevel(p.getLevel() - priceInt);
    30. enchant(EnchantmentType, p, level);
    31. p.sendMessage("Enchanted successfully!");
    32. } else {
    33. p.sendMessage("§cYour level is too low");
    34. }
    35. }
    36. }
    37. } else {
    38. e.getPlayer().sendMessage("§cYou don't have the permission to use an EnchantSign");
    39. }
    40. }
    41. }
    42. }
    43. }



    I get the error in line 19 while the plugin checks if the player has enough money to buy the enchantment.

    I use the latest vault version and 1.7.2 beta version of bukkit.

    Thanks for your help
    schegar
     
  2. Offline

    RainoBoy97

    Can you give the code where you instantiate "econ"?
     
  3. Offline

    schegar

    Code:java
    1. private Economy econ;
    2. EnchantSigns plugin;
    3. Boolean SignCheck;
    4.  
    5. public Signs(EnchantSigns plugin) {
    6. this.econ = plugin.economy;
    7. this.plugin = plugin;
    8. }
     
  4. schegar
    May I see the 'economy' variable in EnchantSigns class? Also, if you don't mind, also show the method you use to initialize it.
     
  5. Offline

    schegar

    Code:java
    1. public Economy economy = null;
    2.  

    Code:java
    1. if (this.getConfig().getBoolean("Use Vault") == true) {
    2. this.setupEconomy();
    3. }

    Code:java
    1. private boolean setupEconomy() {
    2. RegisteredServiceProvider<Economy> economyProvider = getServer()
    3. .getServicesManager().getRegistration(
    4. net.milkbowl.vault.economy.Economy.class);
    5. if (economyProvider != null) {
    6. economy = economyProvider.getProvider();
    7. }
    8.  
    9. return (economy != null);
    10. }
     
  6. Offline

    Alshain01

    You still have the possibility that economy is null, if economyProvider is null. That null value cascades through and when you access i:
    Code:java
    1. if (this.econ.has(p.getName(), priceDouble)) {

    "econ" is still null. You can't do econ.has() on null. If your plugin is absolutely dependent on Vault and can't function without a Vault economy then you should shut your plugin down when economyProvider is null.
     
  7. Offline

    Sleaker

    Also if you can post the text of your startup log to make sure Vault sees an economy when you are doing your testing that would be great.
     
Thread Status:
Not open for further replies.

Share This Page