Need help with an error in my plugin

Discussion in 'Plugin Development' started by Prothean_IGS, Jan 19, 2014.

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

    Prothean_IGS

    Alright so I've been trying everything to resolve this error but nothing has worked. When the command "givecredits {playername} {amount}" is run by console it gives me an error and does not give the player their credits.
    here's the error I am getting when the command is run: http://pastebin.com/XjrVyn7G

    If am I reading that error report correctly it is having the error on line 147 which is:
    Code:java
    1. int targetPlayerCredits = getConfig().getInt("Players." + targetPlayer.getName() + ".Credits");


    Now I initially thought that since it says nullpointerexception that maybe this error would happen when that specific section doesn't actually exist in the config file, so I tried checking for that when the player logs in and creating the section if it didn't already exist. That did not work.

    Does anyone know why this is happening and how I can fix it?

    here's my entire class with all the code:
    Code:java
    1. package me.Prothean_IGS.PermissionCredits;
    2.  
    3. import java.io.File;
    4. import java.io.IOException;
    5. import java.util.logging.Logger;
    6.  
    7. import org.bukkit.Bukkit;
    8. import org.bukkit.ChatColor;
    9. import org.bukkit.command.Command;
    10. import org.bukkit.command.CommandSender;
    11. import org.bukkit.configuration.file.FileConfiguration;
    12. import org.bukkit.entity.Player;
    13. import org.bukkit.event.EventHandler;
    14. import org.bukkit.event.Listener;
    15. import org.bukkit.event.player.PlayerLoginEvent;
    16. import org.bukkit.plugin.PluginDescriptionFile;
    17. import org.bukkit.plugin.java.JavaPlugin;
    18.  
    19. import ru.tehkode.permissions.PermissionUser;
    20. import ru.tehkode.permissions.bukkit.PermissionsEx;
    21.  
    22. public class PermissionCredits extends JavaPlugin implements Listener {
    23.  
    24. public final Logger logger = Logger.getLogger("Minecraft");
    25.  
    26.  
    27. @Override
    28. public void onDisable() {
    29. PluginDescriptionFile pdfFile = this.getDescription();
    30. this.logger.info(pdfFile.getName() + " Has Been Disabled!");
    31.  
    32.  
    33. }
    34.  
    35. @Override
    36. public void onEnable() {
    37. saveConfig();
    38. try {
    39. setupConfig(getConfig());
    40. } catch (IOException e) {
    41. e.printStackTrace();
    42. }
    43. saveConfig();
    44. PluginDescriptionFile pdfFile = this.getDescription();
    45. this.logger.info(pdfFile.getName() + " Version " + pdfFile.getVersion() + " Has Been Enabled!");
    46. }
    47.  
    48. private void setupConfig(FileConfiguration config) throws IOException {
    49. if(!new File(getDataFolder(),"Reset.file").exists()) {
    50.  
    51.  
    52. config.set("Config.PermissionTimerAmount", 86400);
    53. config.set("Config.CreditsNeededOne", 3);
    54. config.set("Config.CreditsNeededTwo", 5);
    55. config.set("Config.MessageOne", "You have extra permissions for the next 24 hours!");
    56. config.set("Config.MessageTwo", "You have more extra permissions for the next 24 hours!");
    57. config.set("Config.PermissionWorld", "ExampleWorld");
    58. config.set("Config.PermissionsOne", "example.perm,example.perm.2,example.perm.3,ect");
    59. config.set("Config.PermissionsTwo", "example.perm,example.perm.2,example.perm.3,ect");
    60.  
    61. config.set("Players.Prothean_IGS.Credits", 0);
    62. config.set("Players.Prothean_IGS.TimeStamp1", 0);
    63. config.set("Players.Prothean_IGS.TimeStamp2", 0);
    64.  
    65. new File(getDataFolder(), "Reset.file").createNewFile();
    66. }
    67.  
    68. }
    69.  
    70.  
    71. public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    72.  
    73. // Commands for Op'd players
    74. if (commandLabel.equalsIgnoreCase("givecredits")) {
    75. if (sender instanceof Player) {
    76. Player player = (Player) sender;
    77. if (player.isOp()) {
    78. if (args.length == 2) {
    79. try {
    80. String m1 = getConfig().getString("Config.MessageOne");
    81. String m2 = getConfig().getString("Config.MessageTwo");
    82. int time = getConfig().getInt("Config.PermissionTimerAmount");
    83. String w = getConfig().getString("Config.PermissionWorld");
    84. int creditsNeeded1 = getConfig().getInt("Config.CreditsNeededOne");
    85. int creditsNeeded2 = getConfig().getInt("Config.CreditsNeededTwo");
    86. String[] permsOne = getConfig().getString("Config.PermissionsOne").split(",");
    87. String[] permsTwo = getConfig().getString("Config.PermissionsTwo").split(",");
    88. Player targetPlayer = player.getServer().getPlayer(args[0]);
    89. int targetPlayerCredits = getConfig().getInt("PlayerCredits." + targetPlayer.getName());
    90. int amount = Integer.parseInt(args[1]);
    91. int newAmount = targetPlayerCredits + amount;
    92. PermissionUser permUser = PermissionsEx.getUser(targetPlayer);
    93.  
    94. getConfig().set("Players." + targetPlayer.getName() + ".Credits", newAmount);
    95. saveConfig();
    96. targetPlayer.sendMessage(ChatColor.GOLD + "You've just recieved " + amount + " credits!");
    97.  
    98. if (newAmount == creditsNeeded1) {
    99. targetPlayer.sendMessage(ChatColor.GOLD + m1);
    100. int timestamp = (int) System.currentTimeMillis();
    101. getConfig().set("Players." + targetPlayer.getName() + ".TimeStamp1", timestamp);
    102. saveConfig();
    103. for (String s : permsOne) {
    104. permUser.addTimedPermission(s, w, time);
    105. }
    106. }
    107. else if (newAmount == creditsNeeded2) {
    108. targetPlayer.sendMessage(ChatColor.GOLD + m2);
    109. int timestamp = (int) System.currentTimeMillis();
    110. getConfig().set("Players." + targetPlayer.getName() + ".TimeStamp2", timestamp);
    111. saveConfig();
    112. for (String s : permsTwo) {
    113. permUser.addTimedPermission(s, w, time);
    114. }
    115. // Resetting their credits
    116. getConfig().set("Players." + targetPlayer.getName() + ".Credits", 0);
    117. saveConfig();
    118. }
    119. }
    120. catch (Exception e) {
    121. e.printStackTrace();
    122. }
    123.  
    124.  
    125.  
    126. }
    127. else {
    128. player.sendMessage(ChatColor.RED + "Invalid, use like this /givecredits [name] [amount]");
    129. }
    130. }
    131. else {
    132. player.sendMessage(ChatColor.DARK_RED + "You do not have permission for that!");
    133. }
    134. }
    135. else {
    136. if (args.length == 2) {
    137. try {
    138. String m1 = getConfig().getString("Config.MessageOne");
    139. String m2 = getConfig().getString("Config.MessageTwo");
    140. int time = getConfig().getInt("Config.PermissionTimerAmount");
    141. String w = getConfig().getString("Config.PermissionWorld");
    142. int creditsNeeded1 = getConfig().getInt("Config.CreditsNeededOne");
    143. int creditsNeeded2 = getConfig().getInt("Config.CreditsNeededTwo");
    144. String[] permsOne = getConfig().getString("Config.PermissionsOne").split(",");
    145. String[] permsTwo = getConfig().getString("Config.PermissionsTwo").split(",");
    146. Player targetPlayer = getServer().getPlayer(args[0]);
    147. int targetPlayerCredits = getConfig().getInt("Players." + targetPlayer.getName() + ".Credits");
    148. int amount = Integer.parseInt(args[1]);
    149. int newAmount = targetPlayerCredits + amount;
    150. PermissionUser permUser = PermissionsEx.getUser(targetPlayer);
    151.  
    152. getConfig().set("Players." + targetPlayer.getName() + ".Credits", newAmount);
    153. saveConfig();
    154. targetPlayer.sendMessage(ChatColor.GOLD + "You've just recieved " + amount + " credits!");
    155.  
    156. if (newAmount == creditsNeeded1) {
    157. targetPlayer.sendMessage(ChatColor.GOLD + m1);
    158. int timestamp = (int) System.currentTimeMillis();
    159. getConfig().set("Players." + targetPlayer.getName() + ".TimeStamp1", timestamp);
    160. saveConfig();
    161. for (String s : permsOne) {
    162. permUser.addTimedPermission(s, w, time);
    163. }
    164. }
    165. else if (newAmount == creditsNeeded2) {
    166. targetPlayer.sendMessage(ChatColor.GOLD + m2);
    167. int timestamp = (int) System.currentTimeMillis();
    168. getConfig().set("Players." + targetPlayer.getName() + ".TimeStamp2", timestamp);
    169. saveConfig();
    170. for (String s : permsTwo) {
    171. permUser.addTimedPermission(s, w, time);
    172. }
    173. // Resetting their credits
    174. getConfig().set("Players." + targetPlayer.getName() + ".Credits", 0);
    175. saveConfig();
    176. }
    177. }
    178. catch (Exception e) {
    179. e.printStackTrace();
    180. }
    181.  
    182.  
    183.  
    184. }
    185.  
    186. }
    187. return false;
    188. }
    189. else if (commandLabel.equalsIgnoreCase("takecredits")) {
    190. if (sender instanceof Player){
    191. Player player = (Player) sender;
    192. if (player.isOp()) {
    193. if (args.length == 2) {
    194. try{
    195. Player targetPlayer = player.getServer().getPlayer(args[0]);
    196. int amount = Integer.parseInt(args[1]);
    197. int credits = getConfig().getInt("PlayerCredits." + targetPlayer.getName());
    198.  
    199. getConfig().set("Players." + targetPlayer.getName() + ".Credits", credits - amount);
    200. saveConfig();
    201. player.sendMessage(ChatColor.GREEN + "You have taken " + amount + " credits away from " + targetPlayer.getName() + "!");
    202. }
    203. catch (Exception e) {
    204. e.printStackTrace();
    205. }
    206. }
    207. }
    208. else {
    209. player.sendMessage(ChatColor.DARK_RED + "You do not have permission for that!");
    210. }
    211. }
    212. else {
    213. if (args.length == 2) {
    214. try{
    215. Player targetPlayer = getServer().getPlayer(args[0]);
    216. int amount = Integer.parseInt(args[1]);
    217. int credits = getConfig().getInt("Players." + targetPlayer.getName() + ".Credits");
    218.  
    219. getConfig().set("Players." + targetPlayer.getName() + ".Credits", credits - amount);
    220. saveConfig();
    221. }
    222. catch (Exception e) {
    223. e.printStackTrace();
    224. }
    225. }
    226. return false;
    227. }
    228. }
    229. else if (commandLabel.equalsIgnoreCase("credits")) {
    230. if (sender instanceof Player) {
    231. Player player = (Player) sender;
    232. try {
    233. int pc = getConfig().getInt("Players." + player.getName() + ".Credits");
    234.  
    235. player.sendMessage(ChatColor.GOLD + "You have " + pc + " credits! Be sure to vote everyday for more!");
    236.  
    237. }
    238. catch (Exception e) {
    239. e.printStackTrace();
    240. }
    241. }
    242. else {
    243. sender.sendMessage("Only players can use this command!");
    244. return false;
    245. }
    246.  
    247. }
    248.  
    249. return false;
    250. }
    251.  
    252. @EventHandler
    253. public void onPlayerLogin (PlayerLoginEvent event) {
    254. Player player = (Player) event.getPlayer();
    255. if (getConfig().contains("Players." + player.getName())) {
    256. int time = getConfig().getInt("Config.PermissionTimerAmount");
    257. String w = getConfig().getString("Config.PermissionWorld");
    258. String[] permsOne = getConfig().getString("Config.PermissionsOne").split(",");
    259. String[] permsTwo = getConfig().getString("Config.PermissionsTwo").split(",");
    260. PermissionUser permUser = PermissionsEx.getUser(player);
    261. try {
    262. int timeStamp1 = getConfig().getInt("Players." + player.getName() + "TimeStamp1");
    263. int timeStamp2 = getConfig().getInt("Players." + player.getName() + "TimeStamp1");
    264. int timeLimit1 = timeStamp1 + 86400000;
    265. int timeLimit2 = timeStamp2 + 86400000;
    266. int currentTime = (int) System.currentTimeMillis();
    267.  
    268. if (currentTime < timeLimit1) {
    269. player.sendMessage(ChatColor.GOLD + "Your extra permissions have been added back for the remaining time.");
    270. for (String s : permsOne) {
    271. permUser.addTimedPermission(s, w, time);
    272. }
    273. }
    274. if (currentTime < timeLimit2) {
    275. player.sendMessage(ChatColor.GOLD + "Your extra permissions have been added back for the remaining time.");
    276. for (String s : permsTwo) {
    277. permUser.addTimedPermission(s, w, time);
    278. }
    279. }
    280. }
    281. catch (Exception e) {
    282. e.printStackTrace();
    283. }
    284. }
    285. else {
    286. getConfig().set("Players." + player.getName() + ".Credits", 0);
    287. getConfig().set("Players." + player.getName() + ".TimeStamp1", 0);
    288. getConfig().set("Players." + player.getName() + ".TimeStamp2", 0);
    289. saveConfig();
    290. }
    291.  
    292.  
    293.  
    294. }
    295. }
    296.  
     
  2. Offline

    coldandtired

    targetPlayer is null from line 88. I think you need to have the exact case when grabbing a player.
     
  3. Offline

    xMrPoi

    Have a check on the player.
    Code:java
    1. Player targetPlayer = bukkit.getPlayer(args[0]);
    2. if(targetPlayer == null){
    3. sender.sendMessage(args[0] + " is not a valid player!");
    4. } else {
    5. //Do the rest here
    6. }
     
  4. Offline

    Prothean_IGS

    xMrPoi You have it as
    Code:java
    1. Player targetPlayer = bukkit.getPlayer(args[0]);

    does it still work the way I have it:
    Code:java
    1. Player targetPlayer = player.getServer().getPlayer(args[0]);

    or should I have it your way?
     
  5. Offline

    xMrPoi

    @Protean_IGS Try my way
     
  6. Offline

    Prothean_IGS

    xMrPoi Ah yes, I did need to do it your way, as my way was calling upon the player during a console command. Thank you!
     
  7. Offline

    xMrPoi

Thread Status:
Not open for further replies.

Share This Page