Resolvido [Ajuda] Um "pequeno" erro com args[]

Discussão em 'Resolvidos' iniciado por WizardlyBump17, 3 Fevereiro 2019.

  1. WizardlyBump17
    Offline

    WizardlyBump17 Membro Ativo

    Afiliado:
    11 Março 2018
    Mensagens:
    758
    Sexo:
    Masculino
    Avaliações:
    +224 / -2
    Apelido no Minecraft:
    WizardlyBump17
    Código (Forge Crash):

              if(args.length == 0) {
                   AoCriar.add(uuid);
                   p.sendMessage("§7> §eDigite o a tag que você quer criar");
                   p.sendMessage("§7> §eDigite 'cancelar' para cencelar");
                 } else {
                   try {
                     StringBuilder sb = new StringBuilder();
                     for(int i = 1; i < args.length; i++) {
                       if(i > 1) sb.append(" ");
                       sb.append(args[i]);
                     }
                     boolean existe = SQLite.comando2("SELECT tag FROM tags WHERE tag = '" + sb + "';").next();
                     if(!existe) {
                       TagAPI.register(args[1]); //Essa é a linha 45
                       TagAPI.setTag(uuid, sb.toString());
                       p.sendMessage("§aTag " + sb.toString().replace("&", "§") + " §acriada com sucesso!");
                       p.sendMessage("§aTag " + sb.toString().replace("&", "§") + " §atem a permissão: wtags.tag." + args[1]);
                       p.sendMessage("§aTag " + sb.toString().replace("&", "§") + " §asetada com sucesso!");
                     } else {
                       p.sendMessage("§cTag " + sb + " já existe!");
                     }
                   } catch (SQLException e) {
                     e.printStackTrace();
                   }
                 }
     
    Olha só q maravilha acontece se eu só digito /tag criar
    Código (Forge Crash):

    [14:21:53 ERROR]: null
    org.bukkit.command.CommandException: Unhandled exception executing command 'tag'
     in plugin WTags v2.0.0-beta
      at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[cra
    ftbukkit.jar:git-Bukkit-12698ea]
      at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:14
    0) ~[craftbukkit.jar:git-Bukkit-12698ea]
      at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServe
    r.java:620) ~[craftbukkit.jar:git-Bukkit-12698ea]
      at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerCon
    nection.java:1106) [craftbukkit.jar:git-Bukkit-12698ea]
      at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java
    :966) [craftbukkit.jar:git-Bukkit-12698ea]
      at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(SourceFile:37) [craft
    bukkit.jar:git-Bukkit-12698ea]
      at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(SourceFile:9) [craftb
    ukkit.jar:git-Bukkit-12698ea]
      at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:1
    3) [craftbukkit.jar:git-Bukkit-12698ea]
      at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [
    ?:1.8.0_201]
      at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_201]
      at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [craftbukki
    t.jar:git-Bukkit-12698ea]
      at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:6
    73) [craftbukkit.jar:git-Bukkit-12698ea]
      at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:3
    35) [craftbukkit.jar:git-Bukkit-12698ea]
      at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:6
    29) [craftbukkit.jar:git-Bukkit-12698ea]
      at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java
    :537) [craftbukkit.jar:git-Bukkit-12698ea]
      at java.lang.Thread.run(Unknown Source) [?:1.8.0_201]
    Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
      at wtags.comandos.TagCMD.onCommand(TagCMD.java:45) ~[?:?]
      at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[cra
    ftbukkit.jar:git-Bukkit-12698ea]
      ... 15 more
    >
     
     
  2. Artur2324
    Offline

    Artur2324 Membro Conhecido VIP Sabotador.com

    Afiliado:
    20 Outubro 2014
    Mensagens:
    127
    Sexo:
    Masculino
    Avaliações:
    +142 / -1
    Apelido no Minecraft:
    Jarvasf
    A solução para isso seria atualizar o java, Atualize-o :relieved:
     
    • Não Gostei Não Gostei x 2
    • Engraçado Engraçado x 1
  3. HeyZeer0
    Offline

    HeyZeer0 Líder do Aventura Equipe GameMods Equipe do Aventura Moderador do Fórum Moderador do Discord VIP Industrial

    Afiliado:
    6 Agosto 2011
    Mensagens:
    606
    Sexo:
    Masculino
    Avaliações:
    +417 / -0
    Apelido no Minecraft:
    HeyZeer0
    Manda a classe inteira, ficaria mais fácil de ler a stacktrace, mas basicamente na linha 45 da classe TagCMD, você esta tentando chamar um valor de uma array com um indice invalido.
    Por exemplo:
    Suponhamos que voce tenha uma array teste = { 1, 2, 3, 4}, para pegar o primeiro valor você poderia utilizar teste[0], isso retornaria o primeiro valor, ou seja, o número 1, toda e qualquer coisa em java sempre irá começar contando do 0.
    Agora se na mesma array você tentar pegar o 5 valor, que no caso não existe, com teste[4], ira ser expedido a excessão que você obteve, no caso um AIOOBE (ArrayOutOfBoundsException) que basicamente significa que você esta tentando pegar um valor de uma lista com um indíce que não esta presente na lista
     
  4. WizardlyBump17
    Offline

    WizardlyBump17 Membro Ativo

    Afiliado:
    11 Março 2018
    Mensagens:
    758
    Sexo:
    Masculino
    Avaliações:
    +224 / -2
    Apelido no Minecraft:
    WizardlyBump17
    Código (Forge Crash):

    package wtags.comandos;

    import java.sql.SQLException;
    import java.util.UUID;

    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;

    import wtags.apis.SQLite;
    import wtags.apis.TagAPI;
    import wtags.eventos.AoCriar;
    import wtags.eventos.AoSetarP;
    import wtags.eventos.AoTirar;
    import wtags.eventos.AoUsar;

    public class TagCMD implements CommandExecutor {
       
       @Override
       public boolean onCommand(CommandSender sender, Command cmd, String lbl, String[] args) {
         
         if(cmd.getName().equalsIgnoreCase("tag")) {
           if(sender instanceof Player) {
             Player p = (Player) sender;
             if(args.length == 0) {
               //gui pra dps
             } else {
               UUID uuid = p.getUniqueId();
               switch(args[0]) {
               case "criar":
                 if(args.length == 0) {
                   AoCriar.add(uuid);
                   p.sendMessage("§7> §eDigite o a tag que você quer criar");
                   p.sendMessage("§7> §eDigite 'cancelar' para cencelar");
                 } else {
                   try {
                     StringBuilder sb = new StringBuilder();
                     for(int i = 1; i < args.length; i++) {
                       if(i > 1) sb.append(" ");
                       sb.append(args[i]);
                     }
                     boolean existe = SQLite.comando2("SELECT tag FROM tags WHERE tag = '" + sb + "';").next();
                     if(!existe) {
                       TagAPI.register(args[1]);
                       TagAPI.setTag(uuid, sb.toString());
                       p.sendMessage("§aTag " + sb.toString().replace("&", "§") + " §acriada com sucesso!");
                       p.sendMessage("§aTag " + sb.toString().replace("&", "§") + " §atem a permissão: wtags.tag." + args[1]);
                       p.sendMessage("§aTag " + sb.toString().replace("&", "§") + " §asetada com sucesso!");
                     } else {
                       p.sendMessage("§cTag " + sb + " já existe!");
                     }
                   } catch (SQLException e) {
                     e.printStackTrace();
                   }
                 }
               break;
               case "usar":
                 AoUsar.add(uuid);
                 p.sendMessage("§7> §eDigite o nome da tag que você quer usar");
                 p.sendMessage("§7> §eDigite 'cancelar' para cencelar");
                 break;
               case "tirar":
                 if(TagAPI.containsTag(uuid)) {
                   AoTirar.add(uuid);
                   p.sendMessage("§7> §eDigite 'sim' para retirar sua tag");
                   p.sendMessage("§7> §eDigite 'nao' para não retirar");
                 } else {
                   p.sendMessage("§cVocê já está sem tag!");
                 }
                 break;
               case "forceTag":
                 AoSetarP.add(uuid);
                 p.sendMessage("§7> §eDigite o nome do player");
                 p.sendMessage("§7> §eDigite 'cancelar' para cencelar");
                 break;
               case "forcetag":
                 AoSetarP.add(uuid);
                 p.sendMessage("§7> §eDigite o nome do player");
                 p.sendMessage("§7> §eDigite 'cancelar' para cencelar");
                 break;
               default:
                 p.sendMessage("§cArgumento " + args[0] + " inexistente!");
               }
             }
           }
         }
         
         return false;
       }

    }

     
     
  5. Lucas_Gamer13
    Offline

    Lucas_Gamer13 Veterano Veterano VIP Sabotador.com VIP Sabotador.com VIP Industrial

    Afiliado:
    17 Novembro 2015
    Mensagens:
    1,725
    Sexo:
    Masculino
    Avaliações:
    +1,619 / -0
    Apelido no Minecraft:
    Lucas_gamer13
    Tu ta querendo pegar um argumento que não existe...
    Antes verifique se ele existe ou não...
     
    • Concordo Concordo x 1
  6. WizardlyBump17
    Offline

    WizardlyBump17 Membro Ativo

    Afiliado:
    11 Março 2018
    Mensagens:
    758
    Sexo:
    Masculino
    Avaliações:
    +224 / -2
    Apelido no Minecraft:
    WizardlyBump17
     
  7. Lucas_Gamer13
    Offline

    Lucas_Gamer13 Veterano Veterano VIP Sabotador.com VIP Sabotador.com VIP Industrial

    Afiliado:
    17 Novembro 2015
    Mensagens:
    1,725
    Sexo:
    Masculino
    Avaliações:
    +1,619 / -0
    Apelido no Minecraft:
    Lucas_gamer13
    Você está verificando se existe algum argumento, e não se o argumento [1] existe...
    No caso, o argumento [0] existe, então o if roda. Mas o [1] não...
     
  8. WizardlyBump17
    Offline

    WizardlyBump17 Membro Ativo

    Afiliado:
    11 Março 2018
    Mensagens:
    758
    Sexo:
    Masculino
    Avaliações:
    +224 / -2
    Apelido no Minecraft:
    WizardlyBump17
    eu ja testei e... n deu
     
    • Triste Triste x 1
  9. Mr_Bilbis
    Offline

    Mr_Bilbis Líder dos Ajudantes, de Publicidade e do Discord Equipe GameMods Criador de Conteúdo Ajudante do Servidor Moderador do Discord Construtor Veterano VIP Sabotador.com VIP Sabotador.com VIP Industrial

    Afiliado:
    23 Novembro 2014
    Mensagens:
    2,911
    Avaliações:
    +2,266 / -1
    Apelido no Minecraft:
    Mr_Bilbis
    Pode enviar o código do seu teste?
     
  10. Lucas_Gamer13
    Offline

    Lucas_Gamer13 Veterano Veterano VIP Sabotador.com VIP Sabotador.com VIP Industrial

    Afiliado:
    17 Novembro 2015
    Mensagens:
    1,725
    Sexo:
    Masculino
    Avaliações:
    +1,619 / -0
    Apelido no Minecraft:
    Lucas_gamer13
    if(args[0] != null && args[1] !=null){}


    @edit:
    cencelar? :sweat_smile::sweat_smile:
     
    Última edição: 3 Fevereiro 2019
  11. WizardlyBump17
    Offline

    WizardlyBump17 Membro Ativo

    Afiliado:
    11 Março 2018
    Mensagens:
    758
    Sexo:
    Masculino
    Avaliações:
    +224 / -2
    Apelido no Minecraft:
    WizardlyBump17
    cara agr eu n posso mas amanha eu posso (tenho q sair e n to afim de esperar o eclipse abrir)
     
  12. HeyZeer0
    Offline

    HeyZeer0 Líder do Aventura Equipe GameMods Equipe do Aventura Moderador do Fórum Moderador do Discord VIP Industrial

    Afiliado:
    6 Agosto 2011
    Mensagens:
    606
    Sexo:
    Masculino
    Avaliações:
    +417 / -0
    Apelido no Minecraft:
    HeyZeer0
    O código dele está certo, o if so passa quando a QUANTIDADE de argumentos é igual a 0, ou seja só se ele digitar /tag. Porém de acordo com a ordem que ele quer executar isso é impossível por que é /tag > Manda pra uma gui else testa o if denovo e manda um texto (???)

    Teu problema é na hora de checar a quantidade de argumentos. A solução do Lucas funcionaria mas é extremamente disperdiciosa de recursos já que na versão dele ele pega o valor da array pelo índice o que faz com que o Java tenha q processar a array ate achar o índice.
    O caminho mais eficaz seria args.length < quantidadeMinimaDeArgumentos

    ^-^
     
    • Informativo Informativo x 1
  13. armelin1
    Offline

    armelin1 Moderador Sênior do Fórum Equipe GameMods Moderador do Fórum Veterano VIP Sabotador.com VIP Sabotador.com VIP Industrial

    Afiliado:
    5 Maio 2014
    Mensagens:
    1,907
    Sexo:
    Masculino
    Avaliações:
    +651 / -0
    Apelido no Minecraft:
    armelin1
    Não é nem checar a quantidade de argumentos porque ele executou sem o segundo argumento sendo que o comando precisa de 2 argumentos, dar erro é o correto, provavelmente se ele digitar com 2 argumentos vai funcionar corretamente.
    --- Post duplo mesclado, 4 Fevereiro 2019 ---
    Na verdade o erro está aqui, mude para args.length == 1.
     
    Última edição: 4 Fevereiro 2019

Compartilhe esta Página