Ir para conteúdo
  • 0

Checa com Material mas não com itemstack


zNicolas__

Pergunta

Bom dia gostaria de entender um processo que estou executando em meu plugin, queria checar se o item requerido tem [tal nome], e isso só funciona com itemstack se eu n me engano (pq ai eu poderia pegar o itemmeta). Mas quando ele checa no meu inventario nao acontece nada já com Material funciona

 

 

Check de Itemstack

@EventHandler
	public void morrer(PlayerDeathEvent e) {
		if (e.getEntity().getPlayer().getInventory().contains(new ItemStack(Material.FEATHER))) {
			e.getEntity().sendMessage("Teste com Itemstack");
		}
	}

já esse codigo abaixo funciona mas eu n quero checar por Material, quero checar por Itemstack pois ai posso pegar o getAmount(), getDisplayName e etc..

 

Check com Material

@EventHandler
	public void morrer(PlayerDeathEvent e) {
		if (e.getEntity().getPlayer().getInventory().contains(Material.FEATHER)) {
			e.getEntity().sendMessage("Teste com Material");
		}
	}
Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

Tenta.

@EventHandler
public void morrer(PlayerDeathEvent e) {
  Inventory inv = e.getEntity().getPlayer().getInventory();
  int indexDoItem = inv.first(Material.FEATHER);
  
  // https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/inventory/Inventory.html#first-org.bukkit.Material-
  // Se for -1 significa que o jogador não tem esse item.
  if (indexDoItem != -1) {
    ItemStack item = inv.getItem(indexDoItem);
    
    // pega displayName etc aqui
  }
}

Fiz aqui mesmo.

Link para o comentário
Compartilhar em outros sites

    @EventHandler
    public void morrer(PlayerDeathEvent e) {
        ItemStack item = new ItemStack(Material.FEATHER);
        ItemMeta itemMeta = item.getItemMeta();
        itemMeta.setDisplayName("NOME DO ITEM");
        item.setItemMeta(itemMeta);
        
        if (e.getEntity().getPlayer().getInventory().contains(item)) {
            e.getEntity().sendMessage("Teste com Itemstack");
        }
    }

Se eu entendi direito, é isso.

Link para o comentário
Compartilhar em outros sites

Tentei dessa forma que me enviou e nao aconteceu nada :/

	@EventHandler
	public void morrer(PlayerDeathEvent e) {
		ItemStack item = new ItemStack(Material.FEATHER);
		ItemMeta itemMeta = item.getItemMeta();
		itemMeta.setDisplayName("Teste");
		item.setItemMeta(itemMeta);

		if (e.getEntity().getPlayer().getInventory().contains(item)) {
			e.getEntity().sendMessage("Teste com Itemstack");
		}
	}

post-8838-0-31582800-1506622438_thumb.png

Link para o comentário
Compartilhar em outros sites

O primeiro código não está funcionando porque você está criando um novo "ItemStack", então o método "contains" vai procurar um "ItemStack" parecido, que não tem, por isso não vai.(tire suas dúvidas sobre isso aqui: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/inventory/Inventory.html#contains-int-)

Link para o comentário
Compartilhar em outros sites

O primeiro código não está funcionando porque você está criando um novo "ItemStack", então o método "contains" vai procurar um "ItemStack" parecido, que não tem, por isso não vai.(tire suas dúvidas sobre isso aqui: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/inventory/Inventory.html#contains-int-)

 

Tem alguma forma de pegar  um itemstack que está no inventario e nao criar outro?

Link para o comentário
Compartilhar em outros sites

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