NullPointerException

Discussion in 'Plugin Development' started by Ghost_Sailor, Aug 10, 2012.

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

    Ghost_Sailor

    I'm sure that I'm a newb, and it's really obvious, but I don't code in Java much. I looked around, and messed with the code a lot, but to no avail, so I came here.
    Caused by: java.lang.NullPointerException
    at org.bukkit.inventory.ItemStack.<init>(ItemStack.java:57)
    at cc.co.ghostsailor.CopyBook.CopyBook.chestCreate(CopyBook.java:134)
    at cc.co.ghostsailor.CopyBook.CopyBook.onCommand(CopyBook.java:112)
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:40)
    ... 15 more

    Sorry if my code is a mess. I try to keep it organized, but it gets out of control sometimes.
    My source is
    Code:java
    1. package cc.co.ghostsailor.CopyBook;
    2.  
    3. import java.util.*;
    4. import java.util.logging.Logger;
    5. import org.bukkit.Material;
    6. import org.bukkit.block.Block;
    7. import org.bukkit.block.Chest;
    8. import org.bukkit.entity.Player;
    9. import org.bukkit.inventory.ItemStack;
    10. import org.bukkit.inventory.PlayerInventory;
    11. import org.bukkit.permissions.Permission;
    12. import org.bukkit.plugin.java.JavaPlugin;
    13. import org.bukkit.command.*;
    14.  
    15. public class CopyBook extends JavaPlugin
    16. implements CommandExecutor
    17. {
    18.  
    19. public CopyBook()
    20. {
    21. }
    22.  
    23. public void onEnable()
    24. {
    25. log = getLogger();
    26. log.info("CopyBook online.");
    27. }
    28.  
    29. public void onDisable()
    30. {
    31. log.info("CopyBook offline.");
    32. }
    33.  
    34. public boolean onCommand(CommandSender cs, Command command, String arg2, String cmd[])
    35. {
    36. if(command.getName().equalsIgnoreCase("copybook") || command.getName().equalsIgnoreCase("cb"))
    37. {
    38. Player player;
    39. if(cs instanceof Player)
    40. {
    41. player = (Player)cs;
    42. } else
    43. {
    44. cs.sendMessage("You must run this command as a player, as it relies on the item you have in your hand.");
    45. return false;
    46. }
    47. if (player.hasPermission("CopyBook")) {
    48. PlayerInventory inv = player.getInventory();
    49. int slot = inv.getHeldItemSlot();
    50. ItemStack book = inv.getItem(slot);
    51. if(!book.getType().equals(Material.BOOK_AND_QUILL) && !book.getType().equals(Material.WRITTEN_BOOK))
    52. {
    53. cs.sendMessage("Please hold the book and quill or written book that you wish to copy and try again.");
    54. return false;
    55. }
    56. int ti = -1;
    57. ItemStack ts = null;
    58. Map tss = inv.all(Material.INK_SACK);
    59. for(Iterator iterator = tss.entrySet().iterator(); iterator.hasNext();)
    60. {
    61. java.util.Map.Entry entry = (java.util.Map.Entry)iterator.next();
    62. ti = ((Integer)entry.getKey()).intValue();
    63. ts = (ItemStack)entry.getValue();
    64. if(ts.getData().getData() == 0)
    65. break;
    66. }
    67.  
    68. if(ts == null || ts.getData().getData() != 0)
    69. {
    70. cs.sendMessage("You do not have enough ink sacs.");
    71. return false;
    72. }
    73. if(!inv.contains(Material.BOOK))
    74. {
    75. cs.sendMessage("You do not have enough books.");
    76. return false;
    77. }
    78. if(!inv.contains(Material.FEATHER))
    79. {
    80. cs.sendMessage("You do not have enough feathers.");
    81. return false;
    82. }
    83. if(ts.getAmount() == 1)
    84. inv.setItem(ti, new ItemStack(Material.AIR));
    85. else
    86. ts.setAmount(ts.getAmount() - 1);
    87. ti = inv.first(Material.BOOK);
    88. ts = inv.getItem(ti);
    89. if(ts.getAmount() == 1)
    90. inv.setItem(ti, new ItemStack(Material.AIR));
    91. else
    92. ts.setAmount(ts.getAmount() - 1);
    93. ti = inv.first(Material.FEATHER);
    94. ts = inv.getItem(ti);
    95. if(ts.getAmount() == 1)
    96. inv.setItem(ti, new ItemStack(Material.AIR));
    97. else
    98. ts.setAmount(ts.getAmount() - 1);
    99. //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
    100. Block lookingBlock = ((Player)cs).getTargetBlock(null, 0);
    101. Block targetBlock;
    102. if(lookingBlock.getType() == Material.SNOW)
    103. targetBlock = lookingBlock;
    104. else
    105. targetBlock = lookingBlock.getRelative(0, 1, 0);
    106. if(targetBlock.getType() != Material.AIR && targetBlock.getType() != Material.SNOW)
    107. {
    108. cs.sendMessage((new StringBuilder(String.valueOf(prefix))).append("Could not copy, the block above target is not air.").toString());
    109. return true;
    110. }
    111. if(targetBlock==null){return false;}else{
    112. if(chestCreate(cs, targetBlock))
    113. {
    114. return true;
    115. }
    116. }
    117. }
    118. return true;
    119. } else
    120. {
    121. return false;
    122. }
    123. }
    124. private boolean chestCreate(CommandSender cs, Block targetBlock)
    125. {
    126. Material mat = null;
    127. Byte bdata = null;
    128. Player player;
    129. player = (Player)cs;
    130. PlayerInventory inv = player.getInventory();
    131. int slot = inv.getHeldItemSlot();
    132. ItemStack book = inv.getItem(slot);
    133. if(book == null){return false;} else {
    134. ItemStack iStack = new ItemStack(mat, 1, (short)0, bdata);
    135. targetBlock.setTypeId(54);
    136. Chest chest = (Chest)targetBlock.getState();
    137. for(int i = 0; i <= 26; i++)
    138. chest.getInventory().addItem(new ItemStack[] {
    139. book.clone()
    140. });
    141.  
    142. cs.sendMessage((new StringBuilder(String.valueOf(prefix))).append("Created a full chest of \2477").append(mat.toString()).append("\247f for you!").toString());
    143. return true;
    144. }
    145. }
    146. Logger log;
    147. public CopyBook fc;
    148. String prefix;
    149. Permission copybook;
    150. Permission reload;
    151. }
     
  2. Offline

    ZeusAllMighty11

    What is on line:

    at cc.co.ghostsailor.CopyBook.CopyBook.chestCreate(CopyBook.java:134) <---- line 134
    at cc.co.ghostsailor.CopyBook.CopyBook.onCommand(CopyBook.java:112) <---- line 112
     
  3. Offline

    Ghost_Sailor

    Line 134 is ItemStack iStack = new ItemStack(mat, 1, (short)0, bdata);
    Line 112 is calling it, if(chestCreate(cs, targetBlock))
     
  4. Offline

    travja

    Line 134: ItemStack iStack =new ItemStack(mat, 1, (short)0, bdata);

    Line 112: if(chestCreate(cs, targetBlock))
     
  5. both, mat and bdata are null:
    Material mat = null;
    Byte bdata = null;
     
  6. Offline

    Ghost_Sailor

    Oh, okay. I knew it was going to be totally obvious and I'd miss it.
    Thanks.
     
Thread Status:
Not open for further replies.

Share This Page