Ir para conteúdo
  • 0

[DUVIDA] Pegar item / quantidade da config & remover quando executar um cmd


v1ctu

Pergunta

Erro no console:

3Mt1xPT.jpg

 

 

 

Codigo:

 

 

			if (getConfig().getBoolean("Item")) {
				ItemStack quantidade = new ItemStack(Material.valueOf(getConfig().getString("Item_ID")),
						getConfig().getInt("Item_Quantidade"));
				if (p.getInventory().contains(quantidade)) {
					for (Player p2 : Bukkit.getOnlinePlayers()) {
					p2.sendMessage("§b[ANUNCIAR] " + p.getDisplayName() + " §7» "
							+ mensagem.replaceAll("&", "§"));
					p.sendMessage("§aForam removidos §7" + getConfig().getInt("Item_Quantidade") + " " + getConfig().getString("Item_ID") + "§a do seu inventario.");
					falou.add(p);
					Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
						public void run() {
							if (falou.contains(p)) {
								falou.remove(p);
							}
						}
						
					}, getConfig().getInt("Tempo_Usar") * 20);
					p.getInventory()
							.removeItem(new ItemStack[] {
									new ItemStack(Material.getMaterial(getConfig().getString("Item_Quantidade")),
											getConfig().getInt("Item_ID")) });
					p.sendMessage("");
					}

				} else {
					p.sendMessage("§c§lERRO: §7Voce nao possui o item necessario");
					return true;
				}

 

 

 

Estou tentando fazer com que se o player estiver com o item necessario e a quantidade, que esta na config, ao executar o comando, o comando funcione se ele tiver e remova os items dele e se n tiver retorna.

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

Você está usando. 

ItemStack quantidade = new ItemStack(Material.valueOf(getConfig().getString("Item_ID")),
						getConfig().getInt("Item_Quantidade"));

Sendo que você deseja pegar o id. 

Pegue o id desta forma.

ItemStack info = new ItemStack(Material.getMaterial(getConfig().getInt("Material.ID")), getConfig().getInt("Quantidade")); 
Link para o comentário
Compartilhar em outros sites

 

Você está usando. 

ItemStack quantidade = new ItemStack(Material.valueOf(getConfig().getString("Item_ID")),
						getConfig().getInt("Item_Quantidade"));

Sendo que você deseja pegar o id. 

Pegue o id desta forma.

ItemStack info = new ItemStack(Material.getMaterial(getConfig().getInt("Material.ID")), getConfig().getInt("Quantidade")); 

vou tentar e aviso se der.

 

@edit

Dai no caso o resto do código ta certo? seria só alterar esse itemStack?

Editado por v1ctu
Link para o comentário
Compartilhar em outros sites

Altera e vê se o error vai persistir cara.

Não deu erro, mas ta falando que eu não possuo o item necessario. Eu tentei colocar o id numerico do item e o nome mas n vai

 

 

@Edit

 

Codigo agora:

	if (getConfig().getBoolean("Item")) {
				ItemStack info = new ItemStack(Material.getMaterial(getConfig().getInt("Item_ID")), getConfig().getInt("Item_Quantidade")); 
				if (p.getInventory().contains(info)) {
					for (Player p2 : Bukkit.getOnlinePlayers()) {
					p2.sendMessage("§b[ANUNCIAR] " + p.getDisplayName() + " §7» "
							+ mensagem.replaceAll("&", "§"));
					p.sendMessage("§aForam removidos §7" + getConfig().getInt("Item_Quantidade") + " " + getConfig().getInt("Item_ID") + "§a do seu inventario.");
					falou.add(p);
					Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
						public void run() {
							if (falou.contains(p)) {
								falou.remove(p);
							}
						}
						
					}, getConfig().getInt("Tempo_Usar") * 20);
					p.getInventory()
							.removeItem(new ItemStack[] {
									new ItemStack(Material.getMaterial(getConfig().getInt("Item_Quantidade")),
											getConfig().getInt("Item_ID")) });
					p.sendMessage("");
					}

				} else {
					p.sendMessage("§c§lERRO: §7Voce nao possui o item necessario");
					return true;
				}

Config: obs> já tentei colocar o id 1 e o nome STONE, mas não vai.

 

Item: false
Item_ID: 1
Item_Quantidade: 10
Editado por v1ctu
Link para o comentário
Compartilhar em outros sites

Eu acho que tem alguns erros ai que vão dar um lag do caralho.

 

Primeiro, tem um loop para todos os players online que executa o seguinte código pra cada player que estiver no servidor:

p2.sendMessage("§b[ANUNCIAR] " + p.getDisplayName() + " §7» "
							+ mensagem.replaceAll("&", "§"));
					p.sendMessage("§aForam removidos §7" + getConfig().getInt("Item_Quantidade") + " " + getConfig().getInt("Item_ID") + "§a do seu inventario.");
					falou.add(p);
					Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
						public void run() {
							if (falou.contains(p)) {
								falou.remove(p);
							}
						}
						
					}, getConfig().getInt("Tempo_Usar") * 20);
					p.getInventory()
							.removeItem(new ItemStack[] {
									new ItemStack(Material.getMaterial(getConfig().getInt("Item_Quantidade")),
											getConfig().getInt("Item_ID")) });
					p.sendMessage("");

Ou seja, pra cada jogador que estiver no servidor, tu vai:

 

- Adicionar o "p" na lista "falou" (Pra que adicionar isso tantas vezes?)

- Criar um runnable de alguns segundos (Ai meu processador, estou sentindo cheiro de servidor crashando)

- Remover um item do inventário do jogador

- E enviar uma mensagem vazia pra ele

 

 

@topic

 

A forma que tu pode usar pra verificar se o player tem ou não o item é a seguinte:

if(getConfig().getBoolean("Item")) {

    ItemStack info = new ItemStack(Material.getMaterial(getConfig().getInt("Item_ID")), getConfig().getInt("Item_Quantidade"));
    boolean possui = false;
    for(ItemStack item = p.getInventory().getContents()) {

        if(item.getItemMeta().isSemelhant(info.getItemMeta())) {
            
            possui = true;           
 
        }

    }
    
    if(possui) {
      //Executar o codigo caso o jogador tenha tal item no inventário
    } else {
      //Executar o codigo caso o jogador nao tenha tal item no inventário
    }

}
Link para o comentário
Compartilhar em outros sites

UP!

if (getConfig().getBoolean("Item")) {
				if(p.getInventory().contains(Material.getMaterial(getConfig().getString("Item_ID")))) {
					for (ItemStack item : p.getInventory().getContents()) {
						if (item.equals(Material.getMaterial(getConfig().getString("Item_ID")))) {
						if(item.getAmount() < getConfig().getInt("Item_Quantidade")) {
							p.sendMessage("§c§lERRO: §7Voce nao possui a quantidade necessaria.");
							return true;
						}
						int quantidade = item.getAmount() - getConfig().getInt("Item_Quantidade");
						p.getInventory().remove(new ItemStack(Material.getMaterial(getConfig().getString("Item_ID")), quantidade));
						p.sendMessage("§aForam removidos §7" + getConfig().getInt("Item_Quantidade") + " "
								+ getConfig().getInt("Item_ID") + "§a do seu inventario.");
						falou.add(p);
						Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
							public void run() {
								if (falou.contains(p)) {
									falou.remove(p);
								}
							}
						}, getConfig().getInt("Tempo_Usar") * 20);
						for (Player p2 : Bukkit.getOnlinePlayers()) {
							p2.sendMessage(
									"§b[ANUNCIAR] " + p.getDisplayName() + " §7» " + mensagem.replaceAll("&", "§"));
						}	
						}
					}
					
				return true;
				}
			p.sendMessage("§c§lERRO: §7Voce nao possui o item necessario.");
			return true;
			}
		}

Código atual: continua com erro

 

Erro no Console:

 lfsN1vm.jpg

 

 

No caso, o erro sempre da em: 

if(p.getInventory().contains(Material.getMaterial(getConfig().getString("Item_ID")))) {

e também em:

if (item.equals(Material.getMaterial(getConfig().getString("Item_ID")))) {
Editado por v1ctu
Link para o comentário
Compartilhar em outros sites

Coloca isso aki no llugar do q ta no cod:

ItemStack quantidade = new ItemStack(getConfig().getString("Item_ID")), getConfig().getInt("Item_Quantidade"));

config:

 

item_id: 5

item_quantidade: 64

Editado por yHunter
Link para o comentário
Compartilhar em outros sites

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