Ir para conteúdo

Como verificar se o inventário de um player esta vazio


RUSHyoutuber

Posts Recomendados

Ao criar o menu comando /clear desenvolvi este método que verificar por completo se o inventario do player esta vazio.

Bom uso a todos.

	// Método para verificar se o inventario já esta vazio
	private boolean inventoryIsEmpty(Player p) {
		PlayerInventory inv = p.getInventory();
		
		// Verificando se a itens do inventario
		for (ItemStack i : inv.getContents()) {
			if(i != null && !(i.getType() == Material.AIR)) return false;
		}
		
		// Verificando se a itens na armadura
		for (ItemStack i : inv.getArmorContents()) {
			if(i != null && !(i.getType() == Material.AIR)) return false;
		}
		
		// Verificando se a um item no cursor
		if (p.getItemOnCursor() != null && !(p.getItemOnCursor() .getType() == Material.AIR)) return false;

		return true;
	}
Link para o comentário
Compartilhar em outros sites

Eu me sinto estranho, consigo ler um código e não consigo fazer um, cruzes kkkkkk.


Faz uma src de quando o player fazer alguma ação (agachar, atacar, defender ou até mesmo andar) executar uma ação e ter como deixar off/on!


Link para o comentário
Compartilhar em outros sites

    public boolean isEmpty(Inventory inventory) {
        for (int i = 0; i < inventory.getSize(); i++) {
            if (inventory.getItem(i) != null) return false;
        }
        return true;
    }

Os outros métodos cria uma array temporária, que não é necessária:

    protected ItemStack[] asCraftMirror(List<net.minecraft.server.v1_12_R1.ItemStack> mcItems) {
        int size = mcItems.size();
        ItemStack[] items = new ItemStack[size];

        for(int i = 0; i < size; ++i) {
            net.minecraft.server.v1_12_R1.ItemStack mcItem = (net.minecraft.server.v1_12_R1.ItemStack)mcItems.get(i);
            items[i] = mcItem.isEmpty() ? null : CraftItemStack.asCraftMirror(mcItem);
        }

        return items;
    }

    public ItemStack[] getContents() {
        List<net.minecraft.server.v1_12_R1.ItemStack> mcItems = this.getInventory().getContents();
        return this.asCraftMirror(mcItems);
    }
Link para o comentário
Compartilhar em outros sites

 

Ou então usa o método Inventory#firstEmpty(); bem mais simples

private boolean isEmpty(Inventory inv) {
	return inv.firstEmpty() == -1;
}

ISso é pra verificar se o inv ta cheio '-' não pre verificar se ta vazio

@EDIT

firtEmpty retorna o número do primeiro slot vazio...

 

    public boolean isEmpty(Inventory inventory) {
        for (int i = 0; i < inventory.getSize(); i++) {
            if (inventory.getItem(i) != null) return false;
        }
        return true;
    }

Os outros métodos cria uma array temporária, que não é necessária:

    protected ItemStack[] asCraftMirror(List<net.minecraft.server.v1_12_R1.ItemStack> mcItems) {
        int size = mcItems.size();
        ItemStack[] items = new ItemStack[size];

        for(int i = 0; i < size; ++i) {
            net.minecraft.server.v1_12_R1.ItemStack mcItem = (net.minecraft.server.v1_12_R1.ItemStack)mcItems.get(i);
            items[i] = mcItem.isEmpty() ? null : CraftItemStack.asCraftMirror(mcItem);
        }

        return items;
    }

    public ItemStack[] getContents() {
        List<net.minecraft.server.v1_12_R1.ItemStack> mcItems = this.getInventory().getContents();
        return this.asCraftMirror(mcItems);
    }

 

Ambos os métodos não verificam se há um item no cursor ou se o player possui armadura...

Link para o comentário
Compartilhar em outros sites

ISso é pra verificar se o inv ta cheio '-' não pre verificar se ta vazio

@EDIT

firtEmpty retorna o número do primeiro slot vazio...

 

 

Ambos os métodos não verificam se há um item no cursor ou se o player possui armadura...

O método firstEmpty() retorna -1 se não tem slots vazios. Então o método vai retornar true se o inventário estiver vazio.

Não precisa verificar armadura ou item no cursor já que eles fazem parte do getContents() ...

Link para o comentário
Compartilhar em outros sites

O método firstEmpty() retorna -1 se não tem slots vazios. Então o método vai retornar true se o inventário estiver vazio.

Não precisa verificar armadura ou item no cursor já que eles fazem parte do getContents() ...

getContents() não avalia armaduras e muito menos o item no cursor, e por sinal você nem deve saber oque é o item no cursor.

Como que o método vai retornar true se ele tem que retornar uma int ??? ta ficando loco '-'

Link para o comentário
Compartilhar em outros sites

O método firstEmpty() retorna -1 se não tem slots vazios. Então o método vai retornar true se o inventário estiver vazio.

Não precisa verificar armadura ou item no cursor já que eles fazem parte do getContents() ...

 

Tua lógica tá meio bugada. Se o firstEmpty retorna -1 quando NÃO HÁ NENHUM SLOT VAZIO como que isso significa que o inventário está vazio? '-'

 

O firstEmpty retorna -1 quando todos os slots têm pelo menos UM item.

Link para o comentário
Compartilhar em outros sites

Simples porém bem útil, vai ajudar os iniciantes em bukkit! Parabéns.

vlw pai

 

Tua lógica tá meio bugada. Se o firstEmpty retorna -1 quando NÃO HÁ NENHUM SLOT VAZIO como que isso significa que o inventário está vazio? '-'

 

O firstEmpty retorna -1 quando todos os slots têm pelo menos UM item.

Exato

Link para o comentário
Compartilhar em outros sites

Participe da Conversa

Você pode postar agora e se cadastrar mais tarde. Se você tiver uma conta, a class='ipsType_brandedLink' href='https://gamersboard.com.br/login/' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title='Sign In Now'>acesse agora para postar com sua conta.
Observação: sua postagem exigirá aprovação do moderador antes de ficar visível.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.

Processando...
×
×
  • Criar Novo...