Ducky Postado Outubro 23, 2017 Denunciar Compartilhar Postado Outubro 23, 2017 (editado) Olá, hoje estou com uma dúvida um pouco mais complexa.. Procurei em alguns tutoriais, porém nada chegava a minha duvida diretamente, enfim.. Minha dúvida é de como posso criar uma lista de INT por player. E nessa lista, como posso adicionar/remover/definir numeros para INT de cada player em apenas 1 lista EX: A cada 10 blocos quebrados é adicionado 1 pro player que quebrou na lista. Não precisa ser salvo essa lista Editado Outubro 23, 2017 por Burpo Link para o comentário Compartilhar em outros sites More sharing options...
bieel1503 Postado Outubro 24, 2017 Denunciar Compartilhar Postado Outubro 24, 2017 (editado) O que tem de errado? if (args.length == 1) { Player p = (Player)sender; if (args[0].equalsIgnoreCase("ver")) { p.sendMessage(String.valueOf(kills.get(p.getName()))); } if (args[0].equalsIgnoreCase("por")) { kills.put(p.getName(), 1); return true; Sempre quando digito, o comando pra por +1, ele fica apenas 1. Posso digitar qnts x quiser pra adicionar +1, qnd vai ver qtns tem com o /ver fica 1 "kills.put(p.getName(), 1);" você está setando pra "1", você precisa pegar a quantia que já tem no "map" e adicionar "+1". Tenta dar uma lidinha na outra resposta que mandei. Editado Outubro 24, 2017 por gaah1503 Link para o comentário Compartilhar em outros sites More sharing options...
Kees_T Postado Outubro 23, 2017 Denunciar Compartilhar Postado Outubro 23, 2017 (editado) Se quer armazenar valores separados por jogadores, use HashMap, exemplo: HashMap<String, Integer> meuMap = new HashMap<>() Ele armazena quantos valores que você quiser, para adicionar um número a um player use: MeuMap.put(jogador.getName(), 2) Pra verificar se existe um player no mapa, use: if (meuMap.containsKey(jogador.getName())) { //Algo } Pra pegar um valor, use meuMap.get(jogador.getName()) Se quiser pegar todos os valores: for (String jogador : meuMap.keySet()) { Bukkit.broadcastMessage("O jogador " + jogador + " tem " + String.valueOf(meuMap.get(jogador)) + " pontos!") } Editado Outubro 23, 2017 por Kees_T 1 Link para o comentário Compartilhar em outros sites More sharing options...
Ducky Postado Outubro 23, 2017 Autor Denunciar Compartilhar Postado Outubro 23, 2017 Se quer armazenar valores separados por jogadores, use HashMap, exemplo: HashMap<String, Integer> meuMap = new HashMap<>() Pra verificar se existe um player no mapa, use: meuMap.containsKey(jogador.getName()) E se não existir no Mapa, apenas adiciona um INT e automaticamente ele terá ? Link para o comentário Compartilhar em outros sites More sharing options...
Kees_T Postado Outubro 23, 2017 Denunciar Compartilhar Postado Outubro 23, 2017 E se não existir no Mapa, apenas adiciona um INT e automaticamente ele terá ? Sim: If (!meuMap.containsKey(jogador.getName())) { meuMap.put(jogador.getName(), 1); { Eu usei o ! na frente da condição que inverte ela, ou seja, se ele não tiver na map vai retornar false, porém ele inverteu pra true e entrou no bloco pra adicioná-lo.. 1 Link para o comentário Compartilhar em outros sites More sharing options...
Ducky Postado Outubro 23, 2017 Autor Denunciar Compartilhar Postado Outubro 23, 2017 Esse método não está adicionando. kills.put(p.getPlayer().getName(), 2); Quando eu verifico com: p.sendMessage(String.valueOf(kills.get(p.getPlayer().getName()))); Sempre fica 2 Sim:If (!meuMap.containsKey(jogador.getName())) {meuMap.put(jogador.getName(), 1);{Eu usei o ! na frente da condição que inverte ela, ou seja, se ele não tiver na map vai retornar false, porém ele inverteu pra true e entrou no bloco pra adicioná-lo.. Link para o comentário Compartilhar em outros sites More sharing options...
TenerPVP Postado Outubro 23, 2017 Denunciar Compartilhar Postado Outubro 23, 2017 If (!meuMap.containsKey(jogador.getName())) {meuMap.put(jogador.getName(), 1);{Eu usei o ! na frente da condição que inverte ela, ou seja, se ele não tiver na map vai retornar false, porém ele inverteu pra true e entrou no bloco pra adicioná-lo.. correto : If (!(meuMap.containsKey(jogador.getName()))) { meuMap.put(jogador.getName(), 1);{Eu usei o ! na frente da condição que inverte ela, ou seja, se ele não tiver na map vai retornar false, porém ele inverteu pra true e entrou no bloco pra adicioná-lo.. Link para o comentário Compartilhar em outros sites More sharing options...
Kees_T Postado Outubro 23, 2017 Denunciar Compartilhar Postado Outubro 23, 2017 Burpo, em 23 Out 2017 - 21:06, disse: Esse método não está adicionando. kills.put(p.getPlayer().getName(), 2); Quando eu verifico com: p.sendMessage(String.valueOf(kills.get(p.getPlayer().getName()))); Sempre fica 2 Como assim? Você está adicionando 2 ali em cima ele vai ficar 2. Link para o comentário Compartilhar em outros sites More sharing options...
TenerPVP Postado Outubro 23, 2017 Denunciar Compartilhar Postado Outubro 23, 2017 mano usa break e continue, mais facil Link para o comentário Compartilhar em outros sites More sharing options...
Kees_T Postado Outubro 23, 2017 Denunciar Compartilhar Postado Outubro 23, 2017 TenerPVP, em 23 Out 2017 - 21:31, disse: If (!meuMap.containsKey(jogador.getName())) { meuMap.put(jogador.getName(), 1); { Eu usei o ! na frente da condição que inverte ela, ou seja, se ele não tiver na map vai retornar false, porém ele inverteu pra true e entrou no bloco pra adicioná-lo.. correto : If (!(meuMap.containsKey(jogador.getName()))) { meuMap.put(jogador.getName(), 1); { Eu usei o ! na frente da condição que inverte ela, ou seja, se ele não tiver na map vai retornar false, porém ele inverteu pra true e entrou no bloco pra adicioná-lo.. Não tem necessidade de colocar outro () pois estou apenas verificando uma só, se tivesse duas no If aí sim eu adicionaria.. Link para o comentário Compartilhar em outros sites More sharing options...
TenerPVP Postado Outubro 23, 2017 Denunciar Compartilhar Postado Outubro 23, 2017 kees dps do ! nao vem um (, exemploe !(Condiçao), ele so !Condiçao Link para o comentário Compartilhar em outros sites More sharing options...
Ducky Postado Outubro 23, 2017 Autor Denunciar Compartilhar Postado Outubro 23, 2017 Como assim? Você está adicionando 2 ali em cima ele vai ficar 2. Eu fiz um comando teste, para adicionar sempre 2, mas sempre apenas fica 2. Eu digito o comando 10x, mas fica sempre 2. Link para o comentário Compartilhar em outros sites More sharing options...
bieel1503 Postado Outubro 23, 2017 Denunciar Compartilhar Postado Outubro 23, 2017 (editado) Se for pelo exemplo que você deu: EX: A cada 10 blocos quebrados é adicionado 1 pro player que quebrou na lista. Você pode criar um "HashMap" que tenha um valor "Integer", tipo assim: #A "key" sendo o nome do jogador. private Map<String, Integer> map = new HashMap<>(); e a cada bloco que você colocar, você adiciona +1 nesse valor, tipo assim: @EventHandler void event(BlockBreakEvent evt){ String pname = evt.getPlayer().getName(); #Checando se o nome do jogador já está no "map". if(map.containsKey(pname)){ #Aqui dentro, ele está pegando a quantia que já contém do jogador e adicionando +1 para essa quantia. int quantia = map.get(pname); map.put(pname, quantia + 1); return; } #Aqui, caso não tenha passado pelo "if", significa que ele não está no "map" ainda, então adicionamos ele no "map" e colocamos o valor para 1. map.put(pname, 1); } Depois é só fazer um "while", tipo assim: Integer convert(String playername){ int get = map.containsKey(playername) ? map.get(playername) : 0; int quantia = 0; if(get >= 10){ while(get > 10){ quantia++; get -= 10; } } return quantia; } Editado Outubro 23, 2017 por gaah1503 Link para o comentário Compartilhar em outros sites More sharing options...
Ducky Postado Outubro 24, 2017 Autor Denunciar Compartilhar Postado Outubro 24, 2017 Se for pelo exemplo que você deu: Você pode criar um "HashMap" que tenha um valor "Integer", tipo assim: #A "key" sendo o nome do jogador. private Map<String, Integer> map = new HashMap<>(); e a cada bloco que você colocar, você adiciona +1 nesse valor, tipo assim: @EventHandler void event(BlockBreakEvent evt){ String pname = evt.getPlayer().getName(); #Checando se o nome do jogador já está no "map". if(map.containsKey(pname)){ #Aqui dentro, ele está pegando a quantia que já contém do jogador e adicionando +1 para essa quantia. int quantia = map.get(pname); map.put(pname, quantia + 1); return; } #Aqui, caso não tenha passado pelo "if", significa que ele não está no "map" ainda, então adicionamos ele no "map" e colocamos o valor para 1. map.put(pname, 1); } Depois é só fazer um "while", tipo assim: Integer convert(String playername){ int get = map.containsKey(playername) ? map.get(playername) : 0; int quantia = 0; if(get >= 10){ while(get > 10){ quantia++; get -= 10; } } return quantia; } O que tem de errado? if (args.length == 1) { Player p = (Player)sender; if (args[0].equalsIgnoreCase("ver")) { p.sendMessage(String.valueOf(kills.get(p.getName()))); } if (args[0].equalsIgnoreCase("por")) { kills.put(p.getName(), 1); return true; Sempre quando digito, o comando pra por +1, ele fica apenas 1. Posso digitar qnts x quiser pra adicionar +1, qnd vai ver qtns tem com o /ver fica 1 Link para o comentário Compartilhar em outros sites More sharing options...
jeta Postado Outubro 24, 2017 Denunciar Compartilhar Postado Outubro 24, 2017 O que tem de errado? if (args.length == 1) { Player p = (Player)sender; if (args[0].equalsIgnoreCase("ver")) { p.sendMessage(String.valueOf(kills.get(p.getName()))); } if (args[0].equalsIgnoreCase("por")) { kills.put(p.getName(), 1); return true; Sempre quando digito, o comando pra por +1, ele fica apenas 1. Posso digitar qnts x quiser pra adicionar +1, qnd vai ver qtns tem com o /ver fica 1 você não ta incrementando, lê oque comentaram.... Link para o comentário Compartilhar em outros sites More sharing options...
Ducky Postado Outubro 24, 2017 Autor Denunciar Compartilhar Postado Outubro 24, 2017 (editado) "kills.put(p.getName(), 1);" você está setando pra "1", você precisa pegar a quantia que já tem no "map" e adicionar "+1". Tenta dar uma lidinha na outra resposta que mandei. Assim né? if (args.length == 1) { Player pe = (Player)sender; if (args[0].equalsIgnoreCase("ver")) { p.sendMessage(String.valueOf(kills.get(pe.getName()))); } if (args[0].equalsIgnoreCase("a")) { if(kills.containsKey(pe.getName())){ int quantia = kills.get(pe.getName()); kills.put(pe.getName(), quantia + 1); return true; } kills.put(pe.getName(), 1); } } } } Continua ficando com apenas 1 Editado Outubro 24, 2017 por Burpo Link para o comentário Compartilhar em outros sites More sharing options...
bieel1503 Postado Outubro 24, 2017 Denunciar Compartilhar Postado Outubro 24, 2017 Assim né? if (args.length == 1) { Player pe = (Player)sender; if (args[0].equalsIgnoreCase("ver")) { p.sendMessage(String.valueOf(kills.get(pe.getName()))); } if (args[0].equalsIgnoreCase("a")) { if(kills.containsKey(pe.getName())){ int quantia = kills.get(pe.getName()); kills.put(pe.getName(), quantia + 1); return true; } kills.put(pe.getName(), 1); } } } } Continua ficando com apenas 1 Não está dando...? Okay, só para você testar, tente colocar este código dentro da sua classe de comando: private static Map<String, Integer> map = new HashMap<>(); public boolean onCommand(CommandSender sender, Command cmd, String cmdLabel, String[] args){ if(map.containsKey(sender.getName())){ int quantia = map.get(sender.getName()); map.put(sender.getName(), quantia+1); }else{ map.put(sender.getName(), 1); } sender.sendMessage("" + map.get(sender.getName())); return true; } Link para o comentário Compartilhar em outros sites More sharing options...
Leeow Postado Outubro 24, 2017 Denunciar Compartilhar Postado Outubro 24, 2017 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
Ducky
Olá, hoje estou com uma dúvida um pouco mais complexa.. Procurei em alguns tutoriais, porém nada chegava a minha duvida diretamente, enfim..
Minha dúvida é de como posso criar uma lista de INT por player.
E nessa lista, como posso adicionar/remover/definir numeros para INT de cada player em apenas 1 lista
EX: A cada 10 blocos quebrados é adicionado 1 pro player que quebrou na lista.
Não precisa ser salvo essa lista
Editado por BurpoLink para o comentário
Compartilhar em outros sites
17 respostass a esta questão
Posts Recomendados