Ir para conteúdo
  • 0

[DÚVIDA] COMO ADICIONAR DELAY NISSO?


Lelfe

Pergunta

Como eu coloco um delay para quando um player clicar no item "Confirmar" e comprar o item ele só poder comprar novamente por um delay determinado pela config?


 


eu não consegui (eu sou iniciante ainda ;-;)



public void aoClicar(InventoryClickEvent e){
if(!(e.getWhoClicked() instanceof Player)){
return;
}

if(e.getInventory().getName().contains(getConfig().getString("nome_inv").replace("&", "§"))){
if(e.getCurrentItem().getItemMeta().getDisplayName().contains("§aConfirmar")) {

Player p = (Player)e.getWhoClicked();
if(econ.getBalance(p.getName()) >= getConfig().getInt("valor")){
p.sendMessage(getConfig().getString("sucesso_compra").replace("&", "§").replace("@player", p.getName()));
e.setCancelled(true);
p.closeInventory();
}else{
p.sendMessage("§cVocê não tenho dinheiro suficiente, você precisa de §f" + getConfig().getInt("valor" + " §ccoins"));
e.setCancelled(true);
p.closeInventory();
}
}

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

Hoje em dia tenho minha própria classe de delay...

 

Antes de criar a minha eu usava a do , clique aqui para acessa-lá

 

@Edit:

Fiz aqui, sem a classe que passei a cima, não testei mas deve funcionar:

	private Map<UUID, Long> delay = new HashMap<>();
	
        @EventHandler
	public void aoClicar(InventoryClickEvent e){
		if(!(e.getWhoClicked() instanceof Player)){
			return;
		}

		if(e.getInventory().getName().contains(getConfig().getString("nome_inv").replace("&", "§"))){
			if(e.getCurrentItem().getItemMeta().getDisplayName().contains("§aConfirmar")) {
				Player p = (Player)e.getWhoClicked();
				if(delay.containsKey(p.getUniqueId())){
					if(System.currentTimeMillis() >= delay.get(p.getUniqueId())){
						delay.remove(p.getUniqueId());
					}else{
						//o delay ainda nao acabou, envia mensagem pro player falando que ainda está em delay
						e.setCancelled(true);
						return;
					}
				}
				if(econ.getBalance(p.getName()) >= getConfig().getInt("valor")){
					p.sendMessage(getConfig().getString("sucesso_compra").replace("&", "§").replace("@player", p.getName()));
                                        int tempo = 30; //delay em segundos
					delay.put(p.getUniqueId(), System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(tempo));
					e.setCancelled(true);
					p.closeInventory();
				}else{
					p.sendMessage("§cVocê não tenho dinheiro suficiente, você precisa de §f" + getConfig().getInt("valor" + " §ccoins"));
					e.setCancelled(true);
					p.closeInventory();
				}
			}
		}
	}
Editado por TequilAxBr
Link para o comentário
Compartilhar em outros sites

Use o tempo da maquina ao seu favor para fazer isto. A lógica é bem facil, crie uma map com a uuid do player e o tempo, adicione na map a uuid com tempo da maquina mais o tempo que você quer para usar no delay.

Map<UUID, Long> cooldown = new Map<>();

public void putcooldown(Player p, int time){
    cooldown.put(p.getUniqueId, System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(time));
}

public boolean hasCooldown(Player p){
    if(cooldown.get(p.getUniqueId) == null)return false;
    if(cooldown.get(p.getUniqueId) < System.currentTimeMillis())return true;
    return false;
}
Editado por Skizz
Link para o comentário
Compartilhar em outros sites

 

Hoje em dia tenho minha própria classe de delay...

 

Antes de criar a minha eu usava a do , clique aqui para acessa-lá

 

@Edit:

Fiz aqui, sem a classe que passei a cima, não testei mas deve funcionar:

	private Map<UUID, Long> delay = new HashMap<>();
	
        @EventHandler
	public void aoClicar(InventoryClickEvent e){
		if(!(e.getWhoClicked() instanceof Player)){
			return;
		}

		if(e.getInventory().getName().contains(getConfig().getString("nome_inv").replace("&", "§"))){
			if(e.getCurrentItem().getItemMeta().getDisplayName().contains("§aConfirmar")) {
				Player p = (Player)e.getWhoClicked();
				if(delay.containsKey(p.getUniqueId())){
					if(System.currentTimeMillis() >= delay.get(p.getUniqueId())){
						delay.remove(p.getUniqueId());
					}else{
						//o delay ainda nao acabou, envia mensagem pro player falando que ainda está em delay
						e.setCancelled(true);
						return;
					}
				}
				if(econ.getBalance(p.getName()) >= getConfig().getInt("valor")){
					p.sendMessage(getConfig().getString("sucesso_compra").replace("&", "§").replace("@player", p.getName()));
                                        int tempo = 30; //delay em segundos
					delay.put(p.getUniqueId(), System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(tempo));
					e.setCancelled(true);
					p.closeInventory();
				}else{
					p.sendMessage("§cVocê não tenho dinheiro suficiente, você precisa de §f" + getConfig().getInt("valor" + " §ccoins"));
					e.setCancelled(true);
					p.closeInventory();
				}
			}
		}
	}

Obrigado por repassar a class e obrigado pelo código, me ajudou bastante.

 

 

Use o tempo da maquina ao seu favor para fazer isto. A lógica é bem facil, crie uma map com a uuid do player e o tempo, adicione na map a uuid com tempo da maquina mais o tempo que você quer para usar no delay.

Map<UUID, Long> cooldown = new Map<>();

public void putcooldown(Player p, int time){
    cooldown.put(p.getUniqueId, System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(time));
}

public boolean hasCooldown(Player p){
    if(cooldown.get(p.getUniqueId) == null)return false;
    if(cooldown.get(p.getUniqueId) < System.currentTimeMillis())return true;
    return false;
}

obrigado amigao, ajudou mt!

Link para o comentário
Compartilhar em outros sites

logo-forum.png




Sua dúvida foi marcada como [Resolvido] e movido à área de dúvidas resolvidas.


Atenciosamente,
Gamer's Board

logo-forum.png




Sua dúvida foi marcada como [Resolvido] e movido à área de dúvidas resolvidas.


Atenciosamente,
Gamer's Board
Link para o comentário
Compartilhar em outros sites

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