Help me with this error

Discussion in 'Plugin Development' started by beatcomet, Jul 11, 2011.

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

    beatcomet

    Here is the error i'm getting :

    Code:
     [SEVERE] null
    org.bukkit.command.CommandException: Unhandled exception executing command 'freeze' in plugin Freeze plugin v1.1
    	at org.bukkit.command.PluginCommand.execute(PluginCommand.java:37)
    	at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:129)
    	at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:298)
    	at net.minecraft.server.NetServerHandler.handleCommand(NetServerHandler.java:711)
    	at net.minecraft.server.NetServerHandler.chat(NetServerHandler.java:676)
    	at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:669)
    	at net.minecraft.server.Packet3Chat.a(Packet3Chat.java:33)
    	at net.minecraft.server.NetworkManager.b(NetworkManager.java:226)
    	at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:84)
    	at net.minecraft.server.NetworkListenThread.a(SourceFile:105)
    	at net.minecraft.server.MinecraftServer.h(MinecraftServer.java:451)
    	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:361)
    	at net.minecraft.server.ThreadServerApplication.run(SourceFile:422)
    Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
    	at me.beatcomet.Freeze.Frz.onCommand(Frz.java:128)
    	at org.bukkit.command.PluginCommand.execute(PluginCommand.java:35)
    	... 12 more
    This is the error, it says that the error is in line 128

    This is what I have in line 128 :

    Code:java
    1. if(args[0] == null){


    If you need the whole class file just tell me...
     
  2. It's because you are trying to access the element in the args-array at index 0, and you apparently called the command without arguments.
    So args is empty and args[0] doesn't exist (thus throws an exception and doesn't return null/undefined like it would in JavaScript or whatever ;)).

    To check if args[0] is given, use "args.length > 0".
     
  3. Offline

    beatcomet

    Here is the whole main class :

    Code:java
    1. package me.beatcomet.Freeze;
    2.  
    3. import java.io.File;
    4. import java.util.logging.Logger;
    5.  
    6. import org.bukkit.ChatColor;
    7. import org.bukkit.command.Command;
    8. import org.bukkit.command.CommandSender;
    9. import org.bukkit.entity.Player;
    10. import org.bukkit.event.Event;
    11. import org.bukkit.plugin.PluginDescriptionFile;
    12. import org.bukkit.plugin.PluginManager;
    13. import org.bukkit.plugin.java.JavaPlugin;
    14. import org.bukkit.util.config.Configuration;
    15.  
    16. public class Frz extends JavaPlugin {
    17.  
    18. // Creating a new data file
    19. File configFile = new File("plugins/" + "Freeze" + "/data.ass");
    20. File cfgfile = new File("plugins/" + "Freeze" + "/status.ass");
    21.  
    22. Configuration config = new Configuration(configFile);
    23.  
    24. Configuration cfg = new Configuration(cfgfile);
    25.  
    26. // getting Minecraft logger to send console messages
    27. Logger log = Logger.getLogger("Minecraft");
    28.  
    29. // creating Player Listener reference
    30. PListener playerListener = new PListener(this);
    31. EListener entityListener = new EListener(this);
    32.  
    33. // What happens when the plugin is being disabled
    34. public void onDisable() {
    35. // saving the data
    36. config.save();
    37.  
    38. // Getting info from plugin.yml
    39. PluginDescriptionFile PDFile = this.getDescription();
    40.  
    41. // sending console message saying the plugin has been disabled
    42.  
    43. log.info(PDFile.getName() + " Version " + PDFile.getVersion()
    44. + " is DISABLED!");
    45. }
    46.  
    47. public void onEnable() {
    48. // Sending a console message saying the plugin has been enabled
    49.  
    50. // Getting info from plugin.yml
    51. PluginDescriptionFile PDFile = this.getDescription();
    52.  
    53. log.info(PDFile.getName() + " Version " + PDFile.getVersion()
    54. + " is ENABLED!");
    55.  
    56. // making a new file if a data file dose not exist
    57. new File("plugins/" + PDFile.getName()).mkdir();
    58. if (!configFile.exists()) {
    59. try {
    60. configFile.createNewFile();
    61.  
    62. } catch (Exception e) {
    63. // sending console message in case the data file could not be
    64. // created
    65. log.info("[Freeze] Error when creating config file.");
    66. }
    67. }
    68. // Loading data file
    69. config.load();
    70.  
    71. new File("plugins/" + PDFile.getName()).mkdir();
    72. if (!cfgfile.exists()) {
    73. try {
    74. cfgfile.createNewFile();
    75.  
    76. } catch (Exception e) {
    77. // sending console message in case the data file could not be
    78. // created
    79. log.info("[Freeze] Error when creating config file.");
    80. }
    81. }
    82. // Loading data file
    83. config.load();
    84.  
    85. // getting the plugin manager to register events
    86. PluginManager pm = this.getServer().getPluginManager();
    87.  
    88. // player join event registration
    89. pm.registerEvent(Event.Type.PLAYER_JOIN, playerListener,
    90. Event.Priority.Normal, this);
    91. pm.registerEvent(Event.Type.PLAYER_MOVE, playerListener,
    92. Event.Priority.Normal, this);
    93. pm.registerEvent(Event.Type.ENTITY_DAMAGE, entityListener,
    94. Event.Priority.Normal, this);
    95. }
    96.  
    97. public boolean onCommand(CommandSender sender, Command cmd,
    98. String commandLabel, String[] args) {
    99. if (!(sender instanceof Player)) {
    100. if (commandLabel.equalsIgnoreCase("Freeze")
    101. || commandLabel.equalsIgnoreCase("f")) {
    102. String name = args[0];
    103. if (args[0] == null) {
    104. this.log.info("No player name inserted");
    105. }
    106. if ((Boolean) this.config.getProperty(name) == false) {
    107. this.config.setProperty(name, true);
    108. this.log.info(name + " Has been freezed!");
    109. this.config.save();
    110. return true;
    111. }
    112. if ((Boolean) this.config.getProperty(name) == true) {
    113. this.config.setProperty(name, false);
    114. this.log.info(name + " Has been unfreezed!");
    115. this.config.save();
    116. return true;
    117. } else {
    118. this.log.info(name + " Does not exist in the data file");
    119. this.config.setProperty(name, false);
    120. this.config.save();
    121. return true;
    122. }
    123. }
    124. // try now
    125. }
    126. if (sender instanceof Player) {
    127. if (sender.isOp()) {
    128. if (commandLabel.equalsIgnoreCase("Freeze")
    129. || commandLabel.equalsIgnoreCase("f")) {
    130.  
    131. if (args[0] == null) {
    132. sender.sendMessage(ChatColor.LIGHT_PURPLE + "[Freeze] "
    133. + ChatColor.AQUA + " No name inserted!");
    134. }
    135.  
    136. String name = args[0];
    137. if ((Boolean) this.config.getProperty(name) == false) {
    138. this.config.setProperty(name, true);
    139. this.config.save();
    140. sender.sendMessage(ChatColor.LIGHT_PURPLE + "[Freeze] "
    141. + ChatColor.AQUA + name + " Has been freezed!");
    142. return true;
    143. }
    144. if ((Boolean) this.config.getProperty(name) == true) {
    145. this.config.setProperty(name, false);
    146. this.config.save();
    147. sender.sendMessage(ChatColor.LIGHT_PURPLE + "[Freeze] "
    148. + ChatColor.AQUA + name
    149. + " Has been unfreezed!");
    150. return true;
    151. } else {
    152. sender.sendMessage(ChatColor.LIGHT_PURPLE + "[Freeze] "
    153. + ChatColor.AQUA + name
    154. + " Does not exist in the data file");
    155. this.config.setProperty(name, false);
    156. this.config.save();
    157. return true;
    158. }
    159. }
    160. }
    161. }
    162. if (sender instanceof Player && sender.isOp()) {
    163. if (commandLabel.equalsIgnoreCase("check")) {
    164. if (args[0] == null) {
    165. sender.sendMessage(ChatColor.LIGHT_PURPLE + "[Freeze]"
    166. + ChatColor.AQUA
    167. + "Pleas insert a players name to get status");
    168. }
    169. String name = args[0];
    170. if ((Boolean) this.config.getProperty(name) == true) {
    171. sender.sendMessage(ChatColor.GOLD + name + ChatColor.RED
    172. + " - Freezed");
    173. return true;
    174. }
    175. if ((Boolean) this.config.getProperty(name) == false) {
    176. sender.sendMessage(ChatColor.GOLD + name + ChatColor.BLUE
    177. + " - Not Freezed");
    178. return true;
    179. }
    180. }
    181. }
    182. if (sender instanceof Player && sender.isOp()) {
    183. if (commandLabel.equalsIgnoreCase("status")) {
    184. String construct = null;
    185. for (Player p : getServer().getOnlinePlayers()) {
    186. if ((Boolean) this.config.getProperty(p.getName()) == true) {
    187. this.cfg.setProperty(p.getName(), ": Freezed");
    188. }
    189. if ((Boolean) this.config.getProperty(p.getName()) == false) {
    190. this.cfg.setProperty(p.getName(), ": Not Freezed");
    191. }
    192. construct = ChatColor.GOLD + p.getName() + ChatColor.AQUA
    193. + this.cfg.getProperty(p.getName())
    194. + ChatColor.BLACK + " | ";
    195. }
    196. sender.sendMessage(construct);
    197.  
    198. }
    199.  
    200. }
    201. return true;
    202.  
    203. }
    204.  
    205. }


    It's the main class before I changed it.
    It's in line 164 (the problematic if statement)
     
  4. Did you read my reply?

    In Java, you can't check if something is set through comparing it to null!
     
  5. Offline

    cholo71796

    My workaround was checking to see
    Code:java
    1. if (args.length == 0)
     
  6. Offline

    beatcomet

    The idea was that it checks if there is no argument after the command label
    I didn't knew that this is how it works...
     
Thread Status:
Not open for further replies.

Share This Page