Resolvido [Ajuda] Como percorrer por dados de listas (não sou bom com títulos)

Discussão em 'Resolvidos' iniciado por WizardlyBump17, 4 Agosto 2019.

  1. WizardlyBump17
    Offline

    WizardlyBump17 Membro Ativo

    Afiliado:
    11 Março 2018
    Mensagens:
    758
    Sexo:
    Masculino
    Avaliações:
    +224 / -2
    Apelido no Minecraft:
    WizardlyBump17
    Hey guys, eu tenho isso na config:
    Código (Forge Crash):

    users:
      WizardlyBump17:
      groups:
      - membro
      permissions:
      - teste
      - 123.1
      options:
      prefix: '&4&l[Dono]'
      suffix: '&a[TOP]'
     
    O q eu quero fazer é pegar todos os users da config, WizardlyBump17 nesse caso, e salvar todos em uma String (for(String users : )).
    Depois de fazer isso, eu quero ver se esses dados q eu peguei contem algum grupo na lista groups. Eu tava tentando com esse codigo:
    Código (Forge Crash):

      @Override
       public List<IceUser> getUsers() {
         List<String> groups = Main.getPlugin().getConfig().getConfigurationSection("users").getStringList("groups");
         if(groups.contains(name)) {
           for(String users : Main.getPlugin().getConfig().getConfigurationSection("users").getKeys(false)) {
             IceUser user = new User(users);
             allUsers.add(user);
           }
         }
         return allUsers;
       }
     
    Só que não está dando certo. Como eu faço isso?
     
  2. Mr. Piva
    Offline

    Mr. Piva Veterano Veterano VIP Sabotador.com VIP Sabotador.com VIP Industrial Ex-Staff

    Afiliado:
    16 Outubro 2013
    Mensagens:
    474
    Sexo:
    Masculino
    Avaliações:
    +277 / -0
    Apelido no Minecraft:
    MrPiva
    (Coisas que podem ajudar):

    1. Use banco de dados para armazenar e consultar dados, config.yml não foi feito para isto, foi feito para armazenar informações do Plugin do servidor, seu desempenho e eficiência não se compara em armazenar dados em banco de dados

    2. Use a ferramenta debug da IDE, pesquise como usar a ferramenta de debug da sua IDE porque isto vai te ajudar muito a ver como é o processo do código e identificar qual parte dele não está dando certo, e ainda vai te dar mais informações sobre isso.
     
  3. WizardlyBump17
    Offline

    WizardlyBump17 Membro Ativo

    Afiliado:
    11 Março 2018
    Mensagens:
    758
    Sexo:
    Masculino
    Avaliações:
    +224 / -2
    Apelido no Minecraft:
    WizardlyBump17
    Pex ta em config e nem por isso ngm deixa de usá-lo
     
  4. Mr. Piva
    Offline

    Mr. Piva Veterano Veterano VIP Sabotador.com VIP Sabotador.com VIP Industrial Ex-Staff

    Afiliado:
    16 Outubro 2013
    Mensagens:
    474
    Sexo:
    Masculino
    Avaliações:
    +277 / -0
    Apelido no Minecraft:
    MrPiva
    Repetindo: seu desempenho e eficiência não se compara em armazenar dados em banco de dados
     
  5. WizardlyBump17
    Offline

    WizardlyBump17 Membro Ativo

    Afiliado:
    11 Março 2018
    Mensagens:
    758
    Sexo:
    Masculino
    Avaliações:
    +224 / -2
    Apelido no Minecraft:
    WizardlyBump17
    Ainda n me ajudou no meu problema
     
  6. luansinh0
    Offline

    luansinh0 Membro

    Afiliado:
    10 Junho 2018
    Mensagens:
    5
    Sexo:
    Masculino
    Avaliações:
    +7 / -0
    Apelido no Minecraft:
    luansinh0
    Boa... noite.

    Então, o seu problema é simples de se resolver. Entretanto, como nosso colega Mr. Piva orientou-lhe, é uma boa prática, dentro da programação de plugins, utilizar um banco de DADOS para guardar DADOS e um .yml para utilizar configurações (tais como o .xml e .json são). Entretanto, não há nenhum problema de utilizar uma configuração para guardar informações, mas é mais aconselhado criar-se uma configuração customizada. Vamos a resolução.

    Bem, pressupondo que todo e qualquer jogador que entrar no servidor será registrado nessa configuração, deve ser feito o seguinte:

    Instancia-se uma nova array:
    Código (Forge Crash):
    List<String> listPlayers = new ArrayList<String>();
    O seu primeiro erro está na instanciação da sua lista. Ela deve ser uma lista normal, você irá inserir os seus valores como abaixo (Obs. para toda lista, por precaução, deve-se usar o .getList).
    Código (Forge Crash):
    listPlayers.addAll(getConfig().getConfigurationSection("users").getKeys(false));
    Então, você deverá fazer a estrutura padrão padrão de um onCommand:
    Código (Forge Crash):
      if (sender instanceof Player) {
                Player p = (Player) sender;
                // Pressupondo que o comando seja /groups
                if (cmd.getName().equalsIgnoreCase("groups")) {
               // Lógica vem a seguir.
                }
            }
            return true;
        }
    Então, insere-se a lógica:
    Código (Forge Crash):
    for (String player : listPlayers) {
                        if (!getConfig().getList("users." + player + ".groups")
                                .isEmpty()) {
                            if ((getConfig().getList("users." + player + ".groups")
                                    .size() <= 1)) {
                                p.sendMessage(player + " tem o grupo " + getConfig()
                                        .getList("users." + player + ".groups"));

                                return true;
                            } else {
                                p.sendMessage(player + " tem os grupos " + getConfig()
                                        .getList("users." + player + ".groups"));
                                return true;
                            }
                        } else {
                            p.sendMessage(player + " não tem o grupo!");
                            return false;
                        }
                    }
    O código completo está abaixo:
    Código (Forge Crash):
    @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {

            List<String> listPlayers = new ArrayList<String>();

            listPlayers.addAll(
                    getConfig().getConfigurationSection("users").getKeys(false));

            if (sender instanceof Player) {
                Player p = (Player) sender;
                if (cmd.getName().equalsIgnoreCase("groups")) {
                    for (String player : listPlayers) {
                        if (!getConfig().getList("users." + player + ".groups")
                                .isEmpty()) {
                            if ((getConfig().getList("users." + player + ".groups")
                                    .size() <= 1)) {
                                p.sendMessage(player + " tem o grupo " + getConfig()
                                        .getList("users." + player + ".groups"));

                                return true;
                            } else {
                                p.sendMessage(player + " tem os grupos " + getConfig()
                                        .getList("users." + player + ".groups"));
                                return true;
                            }
                        } else {
                            p.sendMessage(player + " não tem o grupo!");
                            return false;
                        }
                    }
                }
            }
            return true;
        }
    Tenha uma boa noite. Espero ter ajudado. :)

    Obs. tente atribuir o caminho da configuração em uma variável, fica muito difícil de ler da forma que escrevi, mas agora estou sem tempo irmão para corrigir.

    Ass. luansinh0
     
    • Gostei Gostei x 2
    • Útil Útil x 2
    Última edição: 15 Agosto 2019
  7. 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
    Só uma simples dica, não há necessidade alguma de checar se o comando é o comando, a framework do bukkit já faz o registro certo e atribui corretamente, é por isso que você tem que registrar o comando na plugin.yml. Outra coisa retornar false durante a execução de um comando significa para o bukkit que a sintaxe do comando esta errada, em outras palavras, o bukkit enviará uma mensagem para o jogador com a sintaxe certa que foi pre-definida na plugin.yml e eu acho que esse não é o caso que você deseja.

    Agora para o Wizardly, já que você quer continuar usando arquivos de texto, recomendaria que você crie um para cada jogador e coloque numa pasta especial, sendo assim você poderia utilizar File#listFiles para listar todos os arquivos dentro da pasta e consequentemente todos os usuários. Esta estrutura também ajudaria na performance, já que ler 1 arquivo pequeno é infinitamente mais rápido do que ler um arquivo só, porém com muitos caracteres. Lembre-se também que talvez manter um cache dos usuários que já foram carregados seja uma forma eficiente de evitar leituras desnecessárias de arquivos
     
    • Vencedor Vencedor x 2
  8. WizardlyBump17
    Offline

    WizardlyBump17 Membro Ativo

    Afiliado:
    11 Março 2018
    Mensagens:
    758
    Sexo:
    Masculino
    Avaliações:
    +224 / -2
    Apelido no Minecraft:
    WizardlyBump17
    Já resolvi meu problema, e ele tinha nada a ver com q eu pensei q era
     

Compartilhe esta Página