mikept Postado Junho 30, 2018 Denunciar Compartilhar Postado Junho 30, 2018 Estou criando um comando de top 5, mas estou com uma dúvida... Está tudo funcionando certinho, mas em vez de me dar o nome do jogador da-me um numero... Alguem me ajuda? Agradeço pela ajuda :) PlayerData File: Código: Link para o comentário Compartilhar em outros sites More sharing options...
0 leonardosc Postado Junho 30, 2018 Denunciar Compartilhar Postado Junho 30, 2018 Assim? http://prntscr.com/k15nm1 Não, lá no data.put é: data.put(key, Main.plugin.playerData ... etc) O outro é: Bukkit.getOfflinePlayer(UUID.fromString(e.getKey())).getName(); tava faltando um ) Link para o comentário Compartilhar em outros sites More sharing options...
0 Wolf_131 Postado Junho 30, 2018 Denunciar Compartilhar Postado Junho 30, 2018 private void sortPlayers(List<String> uuids) { try { Collections.sort(uuids, new Comparator<String>() { @Override public int compare(String a1, String a2) { Integer o1 = base.get(a1); Integer o2 = base.get(a2); return o2.compareTo(o1); } }); } catch (NullPointerException e) {} } public void usar(Player p) { List<String> uuids = new ArrayList<String>(); for(String st : base.keySet()) { uuids.add(st); } sortPlayers(uuids); int rank = 1; for(String player : uuids) { p.sendMessage("§e" + rank + "º: " + player + " - " + base.get(player)); rank++; } } Eu creio que assim dê. Desculpe pelos espaços, ficou meio estranho quando copiei para aqui ._. Link para o comentário Compartilhar em outros sites More sharing options...
0 Sr_Edition Postado Junho 30, 2018 Denunciar Compartilhar Postado Junho 30, 2018 public int compare(String a, String b) { if (base.get(a) >= base.get(b)) { return 1; }else { return -1; } } Basta trocar o retorno da comparação de -1 para 1 e vice versa Link para o comentário Compartilhar em outros sites More sharing options...
0 mikept Postado Junho 30, 2018 Autor Denunciar Compartilhar Postado Junho 30, 2018 public int compare(String a, String b) { if (base.get(a) >= base.get(b)) { return 1; }else { return -1; } } Basta trocar o retorno da comparação de -1 para 1 e vice versa Ficou na mesma... private void sortPlayers(List<String> uuids) { try { Collections.sort(uuids, new Comparator<String>() { @Override public int compare(String a1, String a2) { Integer o1 = base.get(a1); Integer o2 = base.get(a2); return o2.compareTo(o1); } }); } catch (NullPointerException e) {} } public void usar(Player p) { List<String> uuids = new ArrayList<String>(); for(String st : base.keySet()) { uuids.add(st); } sortPlayers(uuids); int rank = 1; for(String player : uuids) { p.sendMessage("§e" + rank + "º: " + player + " - " + base.get(player)); rank++; } } Eu creio que assim dê. Desculpe pelos espaços, ficou meio estranho quando copiei para aqui ._. Nao percebo esse codigo... não percebo onde tenho de colocar isso. Poderá dar uma ajudinha? Link para o comentário Compartilhar em outros sites More sharing options...
0 leonardosc Postado Junho 30, 2018 Denunciar Compartilhar Postado Junho 30, 2018 Óbvio. Ali na linha 35 você está adicionando os minutos como chave e valor na hashmap. Muda o primeiro argumento do data.put pra key, e lá na linha 62 você coloca String pname = Bukkit.getOfflinePlayer(UUID.fromString(e.getKey())).getName(); Link para o comentário Compartilhar em outros sites More sharing options...
0 Sr_Edition Postado Junho 30, 2018 Denunciar Compartilhar Postado Junho 30, 2018 Você também pode estar alterando como a mensagem é exibida: antes: for (int i = 1; i < 6; i++) { Entry<String, Integer> e = sorted_map.pollFirstEntry(); String pname = e.getKey(); int score = e.getValue(); p.sendMenssage(i + ". §6" + pname + ": §f" + score); } depois: for (int i = 6; i > 1; i--) { Entry<String, Integer> e = sorted_map.pollFirstEntry(); String pname = e.getKey(); int score = e.getValue(); p.sendMenssage(i + ". §6" + pname + ": §f" + score); } Link para o comentário Compartilhar em outros sites More sharing options...
0 mikept Postado Junho 30, 2018 Autor Denunciar Compartilhar Postado Junho 30, 2018 Óbvio. Ali na linha 35 você está adicionando os minutos como chave e valor na hashmap. Muda o primeiro argumento do data.put pra key, e lá na linha 62 você coloca String pname = Bukkit.getOfflinePlayer(UUID.fromString(e.getKey()).getName(); Assim? http://prntscr.com/k15nm1 Link para o comentário Compartilhar em outros sites More sharing options...
0 Wolf_131 Postado Junho 30, 2018 Denunciar Compartilhar Postado Junho 30, 2018 Ficou na mesma... Nao percebo esse codigo... não percebo onde tenho de colocar isso. Poderá dar uma ajudinha? Em vez do comparador que você está usando, pode usar esse. Para pôr a lista de UUIDs ordenada por tempo, você apenas precisa de colocar o método no código. Depois, você exibe a lista com um simples for. Espero ter ajudado. Link para o comentário Compartilhar em outros sites More sharing options...
0 lucakiksd07 Postado Julho 3, 2018 Denunciar Compartilhar Postado Julho 3, 2018 Sua dúvida foi marcada como [Resolvido] e movido à área de dúvidas resolvidas.Atenciosamente,Gamer's Board Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
mikept
Estou criando um comando de top 5, mas estou com uma dúvida...
Está tudo funcionando certinho, mas em vez de me dar o nome do jogador da-me um numero...
Alguem me ajuda?
Agradeço pela ajuda :)
PlayerData File:
Código:
Link para o comentário
Compartilhar em outros sites
9 respostass a esta questão
Posts Recomendados