Ir para conteúdo
  • 0

[Dúvida básica] Delay entre msgs, tipo WorldGuard


Metalflame12

Pergunta

Bom dia!

Eu quero saber como fazer para que o plugin mande mensagens para o players quando um evento BlockBreakEvent for cancelado, por exemplo, mas sem flood, mandando apenas quando o player quebrar, mesmo se ele continuar tentando quebrar o bloco, o plugin deve mandar a mgs depois de 3 segundo, por exemplo.

 

Tipo o "Hey! Sorry, but you can't break that block here." do WorldGuard, que repete a msg a cada meio segundo, eu acho.

 

 

Espero que tenham entendido. Obrigado!

 

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

Esse método funciona, usei ele hoje:

Map<String, Long> cooldown = new HashMap<>();

@EventHandler
private void onBreak(BlockBreakEvent e){
	Player p = e.getPlayer();
	if(cooldown.containsKey(p.getName()){
		long check = cooldown.get(p.getName()) - System.currentTimeMillis();
		if(check <= 0){
			//cooldown acabou
			cooldown.remove(p.getName());
		}else{
			//o cooldown ainda esta rolando, cancela o evento.
			e.setCancelled(true);
		}
	}else{
		cooldown.put(p.getName(), System.currentTimeMillis()+TimeUnit.SECONDS.toMillis(3)); // adiciona o jogador no cooldown de 3 segundos.
	}
}
Link para o comentário
Compartilhar em outros sites

// Em Cima da Classe

HashMap <Player, long> cooldown = new HashMap <Player, long>();
int segundos = TimeUnit.SECONDS.toMillis(2);

@EventHandler 
public void onBreak (BlockBreakEvent e) {
 // Remove do Cooldown 
  if (cooldown.containsKey(e.getPlayer())) { 
    if (cooldown.get(e.getPlayer()) > segundos) { 
   cooldown.remove(e.getPlayer()); 
  }
 }

// ..


 if (cooldown.containsKey(e.getPlayer()) { 
  // Envia mensagem
  e.getPlayer().sendMessage("tá em cooldown");
 } else { 
 e.setCancelled(true); 
 cooldown.put(e.getPlayer(),System.currentTimeMillis()); 
 } 
}

Olha, tá bem errado, eu não testei, deve tá tudo errado.

Se funcionar avisa.

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

olha um jeito simples de abranger todos os eventos é usando o protocollib, outro é usando o evento de quando um plugin ou jogador envia uma mensagem no chat e reconhecer a mensagem e cancelar o evento se o jogador estiver em cooldown daquele plugin (Acho esse método horrível, mas funciona também)

Link para o comentário
Compartilhar em outros sites

olha um jeito simples de abranger todos os eventos é usando o protocollib, outro é usando o evento de quando um plugin ou jogador envia uma mensagem no chat e reconhecer a mensagem e cancelar o evento se o jogador estiver em cooldown daquele plugin (Acho esse método horrível, mas funciona também)

eu tenho uma forma de usar delay, ela usa o calendario do pc/host

int s = Calendar.getInstance().get(Calendar.SECOND);
int time = Calendar.getInstance().get(Calendar.SECOND)+3; //o +3 é daqui 3 segundos, se botar +5 é daqui 5 seg
if(time > 56){ //o numero aqui é (60-1 - [numero ali de cima "3"])
	time = 0;
}
while (s != time){//atualiza o tempo até ele travar
	s = Calendar.getInstance().get(Calendar.SECOND);
}
if(s == time){
        e.getPlayer.sendMessage("Msg que vai aparecer");
}

Eu to sem tempo agr pra montar o esquema, se quiser dps eu faço, mas é basicamente isso que uso, pode usar a config para salvar o player e a hora, tipo:

 

//se o delay for diferente de 5 ele manda msg ou algo assim

Nick: 05

Link para o comentário
Compartilhar em outros sites

eu tenho uma forma de usar delay, ela usa o calendario do pc/host

int s = Calendar.getInstance().get(Calendar.SECOND);
int time = Calendar.getInstance().get(Calendar.SECOND)+3; //o +3 é daqui 3 segundos, se botar +5 é daqui 5 seg
if(time > 56){ //o numero aqui é (60-1 - [numero ali de cima "3"])
	time = 0;
}
while (s != time){//atualiza o tempo até ele travar
	s = Calendar.getInstance().get(Calendar.SECOND);
}
if(s == time){
        e.getPlayer.sendMessage("Msg que vai aparecer");
}

Eu to sem tempo agr pra montar o esquema, se quiser dps eu faço, mas é basicamente isso que uso, pode usar a config para salvar o player e a hora, tipo:

 

//se o delay for diferente de 5 ele manda msg ou algo assim

Nick: 05

Eita gambiarra, mais funciona.

 

Tem o meu método acima, é mais fácil.

Link para o comentário
Compartilhar em outros sites

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