Ir para conteúdo

Detecção de itens


BIDU

Posts Recomendados

1 hora atrás, Checkium disse:

Não sei se é o melhor metodo de fazer, mas costumo usar um loop por todos os itens no inventario e verificar um a um se o tipo e metadata do item são os mesmos, caso queira saber quantos tem pode ir somando em alguma variavel.

Entao, eu tentei usar um for para detectar, mas eu tinha q detectar o inv inteiro de uma vez, por exemplo, se no inv tem o item q eu quero, eu mando uma msg, mas se n tiver, eu mando outra. Mas quando ele ta num slot e tem outro no slot 1, por exemplo, ele considera q n tem.

Link para o comentário
Compartilhar em outros sites

20 horas atrás, BIDU disse:

Entao, eu tentei usar um for para detectar, mas eu tinha q detectar o inv inteiro de uma vez, por exemplo, se no inv tem o item q eu quero, eu mando uma msg, mas se n tiver, eu mando outra. Mas quando ele ta num slot e tem outro no slot 1, por exemplo, ele considera q n tem.

Teria como mandar o codigo para verificar se tem algum erro?

Link para o comentário
Compartilhar em outros sites

2 horas atrás, Checkium disse:

Teria como mandar o codigo para verificar se tem algum erro?

Claro, vou mandar o codigo.

 

@Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        
        Player p = (Player)sender;
        
        if(label.equalsIgnoreCase("vender")) {
            
            for(ItemStack itens : p.getInventory().getContents())
            
                if(itens.getType() == Material.LAPIS_BLOCK) {
                    
                    p.sendMessage("oi");
                    return true;
                    
                }else {
                    
                    p.sendMessage("nao");
                    return true;
                    
                }
                
        }
        
        return false;
    }

Link para o comentário
Compartilhar em outros sites

17 horas atrás, BIDU disse:

Claro, vou mandar o codigo.

 

@Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        
        Player p = (Player)sender;
        
        if(label.equalsIgnoreCase("vender")) {
            
            for(ItemStack itens : p.getInventory().getContents())
            
                if(itens.getType() == Material.LAPIS_BLOCK) {
                    
                    p.sendMessage("oi");
                    return true;
                    
                }else {
                    
                    p.sendMessage("nao");
                    return true;
                    
                }
                
        }
        
        return false;
    }

Você está executando a verificação e enviando a mensagem a cada item o que faz com que varias verificações dêm não mesmo sendo o item desejado. Recomendo usar uma boolean setada originalmente como false e dentro da verificaçao caso o item seja o desejado altera-la para true, assim depois que o loop acabar você pode usar essa boolean para saber se existe algum item.

Link para o comentário
Compartilhar em outros sites

Desisti de programar em bukkit, mas acho que é algo assim ou parecido

 

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if (!(sender instanceof Player))
        return true;

    Player p = (Player) sender;
    if (command.getName().equalsIgnoreCase("exemplo")) {

        if (p.getInventory().contains(new ItemStack(Material.DIRT, 1))) {
            p.getInventory().removeItem(new ItemStack[] { new ItemStack(Material.DIRT, 1) });
            p.updateInventory();

            p.sendMessage("'Perdi a terra");
        } else
            p.sendMessage("Não tenho o item terra");
    }
}

Editado por Guilherme9
esqueci de uma chave
Link para o comentário
Compartilhar em outros sites

Em 13/02/2019 em 19:19, Guilherme9 disse:

Desisti de programar em bukkit, mas acho que é algo assim ou parecido

 

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if (!(sender instanceof Player))
        return true;

    Player p = (Player) sender;
    if (command.getName().equalsIgnoreCase("exemplo")) {

        if (p.getInventory().contains(new ItemStack(Material.DIRT, 1))) {
            p.getInventory().removeItem(new ItemStack[] { new ItemStack(Material.DIRT, 1) });
            p.updateInventory();

            p.sendMessage("'Perdi a terra");
        } else
            p.sendMessage("Não tenho o item terra");
    }
}

Esse código apenas funciona caso você queira detetar apenas stacks com uma terra, além de não ser possivel saber a quantidade de todos os stacks do inventario, o que vai contra o intuito do post original.

Link para o comentário
Compartilhar em outros sites

Em 13/02/2019 em 15:14, Checkium disse:

Você está executando a verificação e enviando a mensagem a cada item o que faz com que varias verificações dêm não mesmo sendo o item desejado. Recomendo usar uma boolean setada originalmente como false e dentro da verificaçao caso o item seja o desejado altera-la para true, assim depois que o loop acabar você pode usar essa boolean para saber se existe algum item.

entendo, mas não tenho ideia de como fazer isto

Link para o comentário
Compartilhar em outros sites

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