Creating a optional argument

Discussion in 'Plugin Development' started by seang96, Jul 14, 2013.

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

    seang96

    I would like to make a optional args[3] (the 4th argument) to make someone confirm what they are about to do. However when it is executed i get a java.lang.ArrayIndexOutOfBoundsException when confirm is not used. What would be the proper route of doing this?

    Code:java
    1. if(args.length > 3) {
    2. if(args[3].equalsIgnoreCase("confirm")) {
    3. log.info(String.format(args[3]));
    4. if(currentamount == totalamount) {
    5. EconomyResponse r = econ.withdrawPlayer(p.getName(), totalprice);
    6. if(r.transactionSuccess()) {
    7. ItemStack is = new ItemStack (mat, currentamount);
    8. p.getInventory().addItem(is);
    9. sender.sendMessage(String.format("You have bought " + totalamount + " of " + mat + " for " + totalprice + "."));
    10. }
    11. }
    12. }
    13. }
    14. else {
    15. if(currentamount == totalamount) {
    16. sender.sendMessage(String.format("You will pay " + totalprice + " for " + amount + " of " + mat + "."));
    17. for(k = 1; k <= data.getInt("Total"); k++) {
    18. if((data.getString(k + ".Check").equals("F"))) {
    19. loadYamls();
    20. data.set(k + ".Check", "T");
    21. saveYamls();
    22. }
    23. }
    24. }
    25. }
     
  2. Offline

    chasechocolate

    Instead of checking if it is > 3, check if args.length == 3 || args.length == 4.
     
  3. Offline

    seang96



    Like this? It still gives the same error.
    Code:java
    1. if(enough.equals("True")) {
    2. if(args.length == 4) {
    3. if(args[3].equalsIgnoreCase("confirm")) {
    4. log.info(String.format(args[3]));
    5. if(currentamount == totalamount) {
    6. EconomyResponse r = econ.withdrawPlayer(p.getName(), totalprice);
    7. if(r.transactionSuccess()) {
    8. ItemStack is = new ItemStack (mat, currentamount);
    9. p.getInventory().addItem(is);
    10. sender.sendMessage(String.format("You have bought " + totalamount + " of " + mat + " for " + totalprice + "."));
    11. }
    12. }
    13. }
    14. }
    15. if(args.length == 3) {
    16. if(currentamount == totalamount) {
    17. sender.sendMessage(String.format("You will pay " + totalprice + " for " + amount + " of " + mat + "."));
    18. for(k = 1; k <= data.getInt("Total"); k++) {
    19. if((data.getString(k + ".Check").equals("F"))) {
    20. loadYamls();
    21. data.set(k + ".Check", "T");
    22. saveYamls();
    23. }
    24. }
    25. }
    26. }
     
  4. Offline

    SnipsRevival

    What line is the error on? Can we see the rest of the command?
     
  5. Offline

    seang96

    https://github.com/seang96/TradingPost/blob/master/TradingPost.java

    Here is the error:

    Code:
    2013-07-14 23:56:59 [SEVERE] null
    org.bukkit.command.CommandException: Unhandled exception executing command 'shop' in plugin TradingPost v1.0.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46)
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:189)
        at org.bukkit.craftbukkit.v1_6_R1.CraftServer.dispatchCommand(CraftServer.java:523)
        at net.minecraft.server.v1_6_R1.PlayerConnection.handleCommand(PlayerConnection.java:983)
        at net.minecraft.server.v1_6_R1.PlayerConnection.chat(PlayerConnection.java:901)
        at net.minecraft.server.v1_6_R1.PlayerConnection.a(PlayerConnection.java:858)
        at net.minecraft.server.v1_6_R1.Packet3Chat.handle(SourceFile:49)
        at net.minecraft.server.v1_6_R1.NetworkManager.b(NetworkManager.java:293)
        at net.minecraft.server.v1_6_R1.PlayerConnection.d(PlayerConnection.java:118)
        at net.minecraft.server.v1_6_R1.ServerConnection.b(SourceFile:37)
        at net.minecraft.server.v1_6_R1.DedicatedServerConnection.b(SourceFile:30)
        at net.minecraft.server.v1_6_R1.MinecraftServer.t(MinecraftServer.java:591)
        at net.minecraft.server.v1_6_R1.DedicatedServer.t(DedicatedServer.java:226)
        at net.minecraft.server.v1_6_R1.MinecraftServer.s(MinecraftServer.java:487)
        at net.minecraft.server.v1_6_R1.MinecraftServer.run(MinecraftServer.java:420)
        at net.minecraft.server.v1_6_R1.ThreadServerApplication.run(SourceFile:582)
    Caused by: java.lang.ArrayIndexOutOfBoundsException: 3
        at com.spgrn.tradingpost.TradingPost.onCommand(TradingPost.java:234)
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
        ... 15 more
    
     
  6. Offline

    SnipsRevival

    seang96 The problem I see is that although you check how many args you have at the beginning, you still continue to go through your method even if you don't have enough or too many args. That is why you are getting that exception.
     
  7. Offline

    seang96

    I just got it fixed myself. Thanks for helping out. I appreciate it. :p
     
Thread Status:
Not open for further replies.

Share This Page