Solved Bukkit Coding Error Cannot Set To An Empty Path!

Discussion in 'Plugin Development' started by benzimmer123, Nov 6, 2013.

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

    benzimmer123

    Please help i have been recently trying to program a plugin where each player will have an amount of deaths, kills and an overall KD which is stored in a config but i have been getting this error when i do /stats..

    Caused by: java.lang.IllegalArgumentException: Cannot Set To An Empty Path

    Please help as soon as possible!

    Here is my code:

    package mindless.pvp.craft.Freeze;

    import java.util.HashMap;
    import java.util.Map;

    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.PlayerDeathEvent;
    import org.bukkit.event.player.PlayerRespawnEvent;
    import org.bukkit.plugin.java.JavaPlugin;

    import net.milkbowl.vault.economy.Economy;

    public class Main extends JavaPlugin implements Listener {

    public static Economy economy = null;
    public Map<String, Integer> bountyMap = new HashMap<String, Integer>();

    @Override
    public void onEnable() {
    Bukkit.getServer().getPluginManager().registerEvents(this, this);
    LoadConfig();
    }

    @Override
    public void onDisable() {
    }

    public boolean onCommand(CommandSender sender, Command cmd,
    String commandLabel, String args[]) {
    if (cmd.getName().equalsIgnoreCase("stats")) {
    if (args.length == 0) {
    Player p = (Player) sender;
    int kills = getConfig().getInt(
    "Stats." + p.getName().toLowerCase() + "kills.");
    int deaths = getConfig().getInt(
    "Stats." + p.getName().toLowerCase() + "deaths.");
    double deaths1 = getConfig().getInt(
    "Stats." + p.getName().toLowerCase() + "deaths.");
    double kills1 = getConfig().getInt(
    "Stats." + p.getName().toLowerCase() + "kills.");
    double kd = kills1 / deaths1;
    if (deaths1 != 0) {
    kd *= 100D;
    kd = Math.round(kd);
    kd /= 100D;
    p.sendMessage(ChatColor.GRAY
    + "====================================================");
    p.sendMessage(ChatColor.GOLD + "Showing stats for: "
    + ChatColor.WHITE + p.getDisplayName());
    p.sendMessage(ChatColor.GRAY
    + "====================================================");
    p.sendMessage(ChatColor.GOLD + "Kills: " + ChatColor.WHITE
    + kills);
    p.sendMessage(ChatColor.GOLD + "Deaths: " + ChatColor.WHITE
    + deaths);
    p.sendMessage(ChatColor.GOLD + "KD: " + ChatColor.WHITE
    + kd);
    p.sendMessage(ChatColor.GRAY
    + "====================================================");
    } else if (deaths == 0) {
    kd = kills1;
    p.sendMessage(ChatColor.GRAY
    + "====================================================");
    p.sendMessage(ChatColor.GOLD + "Showing stats for: "
    + ChatColor.WHITE + p.getDisplayName());
    p.sendMessage(ChatColor.GRAY
    + "====================================================");
    p.sendMessage(ChatColor.GOLD + "Kills: " + ChatColor.WHITE
    + kills);
    p.sendMessage(ChatColor.GOLD + "Deaths: " + ChatColor.WHITE
    + deaths);
    p.sendMessage(ChatColor.GOLD + "KD: " + ChatColor.WHITE
    + kd);
    p.sendMessage(ChatColor.GRAY
    + "====================================================");
    }
    }
    }
    return false;
    }

    @EventHandler
    public void onPlayerDeath(PlayerDeathEvent e) {
    Player killer = e.getEntity().getKiller();
    int kills = getConfig().getInt(
    "Stats." + killer.getName().toLowerCase() + "kills.");
    kills++;
    getConfig().set("Stats." + killer.getName().toLowerCase() + "kills.",
    kills);
    this.saveConfig();
    }

    @EventHandler
    public void onRespawn(PlayerRespawnEvent e) {
    Player p = e.getPlayer();
    int deaths = getConfig().getInt(
    "Stats." + p.getName().toLowerCase() + "deaths.");
    deaths++;
    getConfig().set("Stats." + p.getName().toLowerCase() + "deaths.",
    deaths);
    this.saveConfig();
    }

    public void LoadConfig() {
    this.saveConfig();
    }
    }
     
  2. Offline

    lol768

    Please use the syntax tags.
     
  3. Offline

    Luke_Lax

    Like this benzimmer123
    Show Spoiler

    Code:java
    1. public boolean onCommand(CommandSender sender, Command cmd,
    2. String commandLabel, String args[]) {
    3. if (cmd.getName().equalsIgnoreCase("stats")) {
    4. if (args.length == 0) {
    5. Player p = (Player) sender;
    6. int kills = getConfig().getInt(
    7. "Stats." + p.getName().toLowerCase() + "kills.");
    8. int deaths = getConfig().getInt(
    9. "Stats." + p.getName().toLowerCase() + "deaths.");
    10. double deaths1 = getConfig().getInt(
    11. "Stats." + p.getName().toLowerCase() + "deaths.");
    12. double kills1 = getConfig().getInt(
    13. "Stats." + p.getName().toLowerCase() + "kills.");
    14. double kd = kills1 / deaths1;
    15. if (deaths1 != 0) {
    16. kd *= 100D;
    17. kd = Math.round(kd);
    18. kd /= 100D;
    19. p.sendMessage(ChatColor.GRAY
    20. + "====================================================");
    21. p.sendMessage(ChatColor.GOLD + "Showing stats for: "
    22. + ChatColor.WHITE + p.getDisplayName());
    23. p.sendMessage(ChatColor.GRAY
    24. + "====================================================");
    25. p.sendMessage(ChatColor.GOLD + "Kills: " + ChatColor.WHITE
    26. + kills);
    27. p.sendMessage(ChatColor.GOLD + "Deaths: " + ChatColor.WHITE
    28. + deaths);
    29. p.sendMessage(ChatColor.GOLD + "KD: " + ChatColor.WHITE
    30. + kd);
    31. p.sendMessage(ChatColor.GRAY
    32. + "====================================================");
    33. } else if (deaths == 0) {
    34. kd = kills1;
    35. p.sendMessage(ChatColor.GRAY
    36. + "====================================================");
    37. p.sendMessage(ChatColor.GOLD + "Showing stats for: "
    38. + ChatColor.WHITE + p.getDisplayName());
    39. p.sendMessage(ChatColor.GRAY
    40. + "====================================================");
    41. p.sendMessage(ChatColor.GOLD + "Kills: " + ChatColor.WHITE
    42. + kills);
    43. p.sendMessage(ChatColor.GOLD + "Deaths: " + ChatColor.WHITE
    44. + deaths);
    45. p.sendMessage(ChatColor.GOLD + "KD: " + ChatColor.WHITE
    46. + kd);
    47. p.sendMessage(ChatColor.GRAY
    48. + "====================================================");
    49. }
    50. }
    51. }
    52. return false;
    53. }
    54.  
    55. @EventHandler
    56. public void onPlayerDeath(PlayerDeathEvent e) {
    57. Player killer = e.getEntity().getKiller();
    58. int kills = getConfig().getInt(
    59. "Stats." + killer.getName().toLowerCase() + "kills.");
    60. kills++;
    61. getConfig().set("Stats." + killer.getName().toLowerCase() + "kills.",
    62. kills);
    63. this.saveConfig();
    64. }
    65.  
    66. @EventHandler
    67. public void onRespawn(PlayerRespawnEvent e) {
    68. Player p = e.getPlayer();
    69. int deaths = getConfig().getInt(
    70. "Stats." + p.getName().toLowerCase() + "deaths.");
    71. deaths++;
    72. getConfig().set("Stats." + p.getName().toLowerCase() + "deaths.",
    73. deaths);
    74. this.saveConfig();
    75. }
    76.  
    77. public void LoadConfig() {
    78. this.saveConfig();
    79. }


    Now I'm not 100% sure, but I think this is happening to you because you're not checking if those strings are null and so it doesn't know how to handle it. You could add another check or a try/catch.
     
  4. Offline

    sd5

    benzimmer123 If you would show us the whole error and post your code with the syntax tags so that we can see the line numbers, it would be much easier to find the mistake...
     
  5. Offline

    benzimmer123

    Code:java
    1. [syntax=java]21:37:43 [SEVERE] Could not pass event PlayerDeathEvent to Test v1.0
    2. org.bukkit.event.EventException
    3. at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    4. va:427)
    5. at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
    6. a:62)
    7. at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
    8. ava:477)
    9. at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
    10. ava:462)
    11. at org.bukkit.craftbukkit.v1_6_R3.event.CraftEventFactory.callPlayerDeat
    12. hEvent(CraftEventFactory.java:344)
    13. at net.minecraft.server.v1_6_R3.EntityPlayer.die(EntityPlayer.java:312)
    14. at net.minecraft.server.v1_6_R3.EntityLiving.damageEntity(EntityLiving.j
    15. ava:710)
    16. at net.minecraft.server.v1_6_R3.EntityHuman.damageEntity(EntityHuman.jav
    17. a:714)
    18. at net.minecraft.server.v1_6_R3.EntityPlayer.damageEntity(EntityPlayer.j
    19. ava:383)
    20. at net.minecraft.server.v1_6_R3.EntityHuman.attack(EntityHuman.java:884)
    21.  
    22. at net.minecraft.server.v1_6_R3.PlayerConnection.a(PlayerConnection.java
    23. :1130)
    24. at net.minecraft.server.v1_6_R3.Packet7UseEntity.handle(SourceFile:36)
    25. at net.minecraft.server.v1_6_R3.NetworkManager.b(NetworkManager.java:296
    26. )
    27. at net.minecraft.server.v1_6_R3.PlayerConnection.e(PlayerConnection.java
    28. :116)
    29. at net.minecraft.server.v1_6_R3.ServerConnection.b(SourceFile:37)
    30. at net.minecraft.server.v1_6_R3.DedicatedServerConnection.b(SourceFile:3
    31. 0)
    32. at net.minecraft.server.v1_6_R3.MinecraftServer.t(MinecraftServer.java:5
    33. 92)
    34. at net.minecraft.server.v1_6_R3.DedicatedServer.t(DedicatedServer.java:2
    35. 27)
    36. at net.minecraft.server.v1_6_R3.MinecraftServer.s(MinecraftServer.java:4
    37. 88)
    38. at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java
    39. :421)
    40. at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:5
    41. 83)
    42. Caused by: java.lang.IllegalArgumentException: Cannot set to an empty path
    43. at org.apache.commons.lang.Validate.notEmpty(Validate.java:363)
    44. at org.bukkit.configuration.MemorySection.set(MemorySection.java:159)
    45. at org.bukkit.configuration.MemorySection.set(MemorySection.java:189)
    46. at mindless.pvp.craft.Freeze.Main.onPlayerDeath(Main.java:94)
    47. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    48. at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    49. at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    50. at java.lang.reflect.Method.invoke(Unknown Source)
    51. at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    52. va:425)
    53. ... 20 more[/syntax]


    There, Forgot about that sorry:p sd5
     
  6. int kills = getConfig().getInt(
    "Stats." + p.getName().toLowerCase() + "kills.");

    You trying to get the following node
    Stats.benzimmer123kills.

    This path exists of 3 elements
    Stats
    benzimmer123kills


    (the last one is an empty string, what isn't allowed)
    I think you meant to write your code as
    int kills = getConfig().getInt(
    "Stats." + p.getName().toLowerCase() + ".kills");
     
  7. Offline

    benzimmer123

    Thanks ill try this ferrybig

    Changed it to
    int kills = getConfig().getInt("Stats." + p.getName().toLowerCase() + ".kills");
    but what do mean by this path exists of 3 elements?
    How shall i fix this, my new error code is
    Code:
    21:47:31 [SEVERE] Could not pass event PlayerDeathEvent to Test v1.0
    org.bukkit.event.EventException
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    va:427)
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
    a:62)
            at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
    ava:477)
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
    ava:462)
            at org.bukkit.craftbukkit.v1_6_R3.event.CraftEventFactory.callPlayerDeat
    hEvent(CraftEventFactory.java:344)
            at net.minecraft.server.v1_6_R3.EntityPlayer.die(EntityPlayer.java:312)
            at org.bukkit.craftbukkit.v1_6_R3.entity.CraftLivingEntity.setHealth(Cra
    ftLivingEntity.java:79)
            at org.bukkit.command.defaults.KillCommand.execute(KillCommand.java:33)
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:19
    2)
            at org.bukkit.craftbukkit.v1_6_R3.CraftServer.dispatchCommand(CraftServe
    r.java:528)
            at net.minecraft.server.v1_6_R3.PlayerConnection.handleCommand(PlayerCon
    nection.java:968)
            at net.minecraft.server.v1_6_R3.PlayerConnection.chat(PlayerConnection.j
    ava:886)
            at net.minecraft.server.v1_6_R3.PlayerConnection.a(PlayerConnection.java
    :837)
            at net.minecraft.server.v1_6_R3.Packet3Chat.handle(SourceFile:49)
            at net.minecraft.server.v1_6_R3.NetworkManager.b(NetworkManager.java:296
    )
            at net.minecraft.server.v1_6_R3.PlayerConnection.e(PlayerConnection.java
    :116)
            at net.minecraft.server.v1_6_R3.ServerConnection.b(SourceFile:37)
            at net.minecraft.server.v1_6_R3.DedicatedServerConnection.b(SourceFile:3
    0)
            at net.minecraft.server.v1_6_R3.MinecraftServer.t(MinecraftServer.java:5
    92)
            at net.minecraft.server.v1_6_R3.DedicatedServer.t(DedicatedServer.java:2
    27)
            at net.minecraft.server.v1_6_R3.MinecraftServer.s(MinecraftServer.java:4
    88)
            at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java
    :421)
            at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:5
    83)
    Caused by: java.lang.NullPointerException
            at mindless.pvp.craft.Freeze.Main.onPlayerDeath(Main.java:92)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
            at java.lang.reflect.Method.invoke(Unknown Source)
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    va:425)
            ... 22 more
    Just turned out im a noob!
    Thanks for everyones help;)

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 5, 2016
Thread Status:
Not open for further replies.

Share This Page