Ir para conteúdo
  • 0

Dúvida Sistema de Lista


Ducky

Pergunta

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 Burpo
Link para o comentário
Compartilhar em outros sites

17 respostass a esta questão

Posts Recomendados

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 por gaah1503
Link para o comentário
Compartilhar em outros sites

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 por Kees_T
Link para o comentário
Compartilhar em outros sites

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

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..

Link para o comentário
Compartilhar em outros sites

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

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

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

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

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

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 por gaah1503
Link para o comentário
Compartilhar em outros sites

 

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

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

"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 por Burpo
Link para o comentário
Compartilhar em outros sites

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

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...