PlayerData inventory error

Discussion in 'Plugin Development' started by JMSPTGammer, Feb 23, 2014.

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

    JMSPTGammer

    Hey! I'm making an AFK Teleporter plugin:

    If you type the cmd /afk, it would teleport you to a set location (/setafktp) and it would change your gamemode to creative cleared your inventory and add the player to an ArrayList! You wouldn be able to move or to pickup dropped items! The only way to leave "AFK mode" is by typing the cmd again and it would teleport you to the location you were before with the items you had before and the gamemode you had before! It says i have an error on line 65 (
    Code:java
    1. p.getInventory().addItem(pd.getInventory().getContents());
    ).

    Here are my classes:

    Core:
    Code:java
    1. package me.r0xoW.afktp;
    2.  
    3. import java.util.ArrayList;
    4. import java.util.logging.Logger;
    5.  
    6. import org.bukkit.Bukkit;
    7. import org.bukkit.ChatColor;
    8. import org.bukkit.GameMode;
    9. import org.bukkit.Location;
    10. import org.bukkit.World;
    11. import org.bukkit.command.Command;
    12. import org.bukkit.command.CommandSender;
    13. import org.bukkit.entity.Player;
    14. import org.bukkit.event.EventHandler;
    15. import org.bukkit.event.Listener;
    16. import org.bukkit.event.player.PlayerMoveEvent;
    17. import org.bukkit.event.player.PlayerPickupItemEvent;
    18. import org.bukkit.plugin.PluginDescriptionFile;
    19. import org.bukkit.plugin.java.JavaPlugin;
    20.  
    21. public class Core extends JavaPlugin implements Listener{
    22.  
    23. public static Core plugin;
    24. public final Logger logger = Logger.getLogger("Minecraft");
    25. private ArrayList<PlayerData> afk = new ArrayList<PlayerData>();
    26. public Location afkloc;
    27.  
    28. @Override
    29. public void onEnable() {
    30. PluginDescriptionFile pdffile = this.getDescription();
    31. this.logger.info(pdffile.getName() + " has been enabled!");
    32. this.getServer().getPluginManager().registerEvents(this, this);
    33. getConfig().options().copyDefaults(true);
    34. saveConfig();
    35. }
    36.  
    37. @Override
    38. public void onDisable() {
    39. PluginDescriptionFile pdffile = this.getDescription();
    40. this.logger.info(pdffile.getName() + " has been disabled!");
    41. saveConfig();
    42. }
    43.  
    44. @Override
    45. public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    46. Player p = (Player)sender;
    47. PlayerData pd = getData(p);
    48. if(label.equalsIgnoreCase("afk")) {
    49. if (!afk.contains(pd)) {
    50. World w = Bukkit.getServer().getWorld(getConfig().getString("Location.World"));
    51. double x = getConfig().getDouble("Location.X");
    52. double y = getConfig().getDouble("Location.Y");
    53. double z = getConfig().getDouble("Location.Z");
    54. afkloc = new Location(w, x, y, z);
    55. if(!(afkloc == null)) {
    56. afk.add(new PlayerData(p.getName(), p.getInventory(), p.getLocation(), p.getGameMode()));
    57. p.getInventory().clear();
    58. p.teleport(afkloc);
    59. p.setGameMode(GameMode.CREATIVE);
    60. } else p.sendMessage(ChatColor.RED + "AFK location not set yet! Please contact a server Admin!");
    61. return true;
    62. } else {
    63. afk.remove(pd);
    64. p.getInventory().clear();
    65. p.getInventory().addItem(pd.getInventory().getContents());
    66. p.setGameMode(pd.getGameMode());
    67. p.teleport(pd.getLocation());
    68. return true;
    69. }
    70. } else if (label.equalsIgnoreCase("setafktp")) {
    71. if(p.isOp()) {
    72. getConfig().set("Location.World", p.getLocation().getWorld().getName());
    73. getConfig().set("Location.X", p.getLocation().getX());
    74. getConfig().set("Location.Y", p.getLocation().getY());
    75. getConfig().set("Location.Z", p.getLocation().getZ());
    76. saveConfig();
    77. p.sendMessage(ChatColor.GREEN + "You have successfully updated AFK location!");
    78. } else {
    79. p.sendMessage(ChatColor.RED + "You don't have the permission to do this!");
    80. return true;
    81. }
    82. return true;
    83. }
    84. return true;
    85. }
    86.  
    87. @EventHandler
    88. public void onPlayerMove(PlayerMoveEvent e) {
    89. PlayerData pd = getData(e.getPlayer());
    90. Player p = e.getPlayer();
    91. if (afk.contains(pd)){
    92. p.teleport(p);
    93. p.sendMessage(ChatColor.RED + "Please use §o/afk!");
    94. e.setCancelled(true);
    95. return;
    96. } else return;
    97. }
    98.  
    99. @EventHandler
    100. public void onItemPick(PlayerPickupItemEvent e) {
    101. PlayerData pd = getData(e.getPlayer());
    102. if (afk.contains(pd)) {
    103. e.setCancelled(true);
    104. return;
    105. } else return;
    106. }
    107.  
    108. private PlayerData getData(Player p) {
    109. for (PlayerData pd : afk) {
    110. if (pd.getPlayerName().equalsIgnoreCase(p.getName())) return pd;
    111. }
    112. return null;
    113. }
    114. }


    PlayerData:
    Code:java
    1. package me.r0xoW.afktp;
    2.  
    3. import org.bukkit.GameMode;
    4. import org.bukkit.Location;
    5. import org.bukkit.inventory.PlayerInventory;
    6.  
    7. public class PlayerData {
    8.  
    9. private String player;
    10. private PlayerInventory inv;
    11. private Location loc;
    12. private GameMode pgm;
    13.  
    14. public PlayerData(String player, PlayerInventory inv, Location loc, GameMode pgm) {
    15. this.player = player;
    16. this.inv = inv;
    17. this.loc = loc;
    18. this.pgm = pgm;
    19. }
    20.  
    21. public String getPlayerName() {
    22. return player;
    23. }
    24.  
    25. public PlayerInventory getInventory() {
    26. return inv;
    27. }
    28.  
    29. public Location getLocation() {
    30. return loc;
    31. }
    32.  
    33. public GameMode getGameMode() {
    34. return pgm;
    35. }
    36. }
    37.  


    Error:
    Code:
    [15:03:10 ERROR]: null
    org.bukkit.command.CommandException: Unhandled exception executing command 'afk'
    in plugin AFK Teleporter v1.0
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[cra
    ftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:19
    6) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at org.bukkit.craftbukkit.v1_7_R1.CraftServer.dispatchCommand(CraftServe
    r.java:542) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at net.minecraft.server.v1_7_R1.PlayerConnection.handleCommand(PlayerCon
    nection.java:932) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at net.minecraft.server.v1_7_R1.PlayerConnection.a(PlayerConnection.java
    :814) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at net.minecraft.server.v1_7_R1.PacketPlayInChat.a(PacketPlayInChat.java
    :28) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at net.minecraft.server.v1_7_R1.PacketPlayInChat.handle(PacketPlayInChat
    .java:47) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:146
    ) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at net.minecraft.server.v1_7_R1.ServerConnection.c(SourceFile:134) [craf
    tbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:6
    55) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:2
    50) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:5
    45) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java
    :457) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:6
    17) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    Caused by: java.lang.IllegalArgumentException: Item cannot be null
            at org.apache.commons.lang.Validate.noNullElements(Validate.java:410) ~[
    craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at org.bukkit.craftbukkit.v1_7_R1.inventory.CraftInventory.addItem(Craft
    Inventory.java:268) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at me.r0xoW.afktp.Core.onCommand(Core.java:65) ~[?:?]
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[cra
    ftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            ... 13 more
    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 6, 2016
  2. Offline

    xXMaTTHDXx

    Your adding something into the inventory that is null, so there old inv might not contain anything.
     
  3. Offline

    JMSPTGammer

    I changed it to
    Code:java
    1. if(pd.getInventory()!=null) {
    2. p.getInventory().addItem(pd.getInventory().getContents());
    3. }

    and does not work
     
  4. Offline

    Gater12

    JMSPTGammer
    Maybe change it to setContents(pd.getInventory().getContents());
     
  5. Offline

    JJtCool

  6. Offline

    JMSPTGammer

    Thanks all but i used JJ method! I changed the code a bit and know it works 200%!
     
Thread Status:
Not open for further replies.

Share This Page