Ir para conteúdo

[Tutorial] Como usar corretamente prioridades nos eventos Bukkit!


RUSHyoutuber

Posts Recomendados

Olá pessoal da Gamer'sBoard! 

 
No tutorial de hoje irei ensinar como funciona o sistema de Prioridades nos eventos do Bukkit e irei ensinar como colocar a prioridade correta no seu evento para previr bugs e fazer com que seu plugin funcione da maneira correta!
 


INTRODUÇÃO

Primeiramente irei explicar para quem não sabe oque é o sistema de Prioridades e porque é tão importante você implementa-lo de maneira correta no seu plugin.
Bom pra quem não sabe o Bukkit possui um sistema onde você pode escolher a prioridade com que seu evento é chamado e pode ainda ignorar o seu evento caso ele esteja sendo cancelado por outro plugin.
As prioridades são muito importantes pois são elas que possibilitam varios plugins usarem o mesmo evento, como por exemplo BlockBreakEvent.
 
As prioridades são chamadas da seguinte maneira:
1ª - EventPriority.LOWEST
2ª - EventPriority.LOW
3ª - EventPriority.NORMAL
4ª - EventPriority.HIGH
5ª - EventPriority.HIGHEST
6ª - EventPriority.MONITOR
 
Resumindo, se você criar 1 evento com prioridade LOWEST ele sera chamado antes que o evento com prioridade HIGH. 
OBS: Se você não colocar prioridade no seu evento o bukkit ira colocar prioridade NORMAL por padrão.

 


COMEÇANDO O TRABALHO

Agora que vocês já sabem o basico vamos colocar a mão na massa!
Vamos criar um plugin de teste basico com o evento BlockBreakEvent para testar as prioridades!
 
0kNVUJWlRQefOqucN5xDLw.png
 
Dentro do jogo:
i2f1tHu5Sea6rkYa-HXRQA.png
 
Como vocês puderam notar a ordem é essa!
 
Então você me pergunta: Mas RUSH como vou saber que prioridade devo colocar no meu evento? Simples!
Se o seu evento estiver cancelando outros (e.setCanelled(true)) você deve usar prioridades baixas! LOW ou LOWEST!
Se o seu evento não deve ser executado caso for cancelado então você deve usar HIGHEST ou Monitor...
 
Vamos parar com a teoria e vamos para a pratica novamente!
Imagine que você tem um plugin que bloqueia os blocos de serem colocados no SPAWN e imagine que você possui um plugin de spawners que envia uma mensagem no CHAT quando um spawner é colocado no chão...
 
Caso você não coloque prioridade nos eventos você tera problemas porque o evento sera cancelado mas mesmo assim a mensagem sera exibida! Veja:
 
pbFtu6U3QjO9mnoz2_He5Q.png
 
Dentro do jogo:
HVGqF-ZKTbmNVH7G_VhTQg.png
 
Para corrigirmos este erro nós temos 2 soluções possíveis! Nós podemos:
 
1- Verificar se o evento é cancelado usando isCancelled();
2- Adicionando a anotação @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
 
Agora que vocês já sabem como corrigir vamos por a mão na massa novamente!

 
 
dUon3sYgT6WMHWaCWUpGvQ.png
 
Dentro do jogo:
sN9LnKVoTMWSwDeYqBBe3w.png
 
Como vocês puderam ver tudo ocorreu perfeitamente!
 
Sempre que nós colocarmos ignoreCancelled = true na anotação @EventHandler o evento não sera chamado se ele for canelado!
Ou seja, se você cancelar o evento no LOWEST e colocar ignoreCancelled = true nos eventos com maiores prioridades os eventos não serão chamados! Ou seja, isto otimiza o desempenho e previne BUGS, então alem de você definir prioridade você deve sempre verificar se é necessário colocar o ignoreCancelled.
 


RESUMO

Se você quer cancelar um evento sempr e use prioridades baixas como LOWEST E LOW.
Se você esta trabalho com um evento não que que ele seja executado caso cancelado, ou não quer que ele seja chamado caso cancelado você deve usar prioridades altas como HIGH, HIGHEST ou MONITOR e necessario ou se possivel usar 'ignoreCancelled = true'
 
 


CONCLUSÃO

Tanto a 'priority' quanto o 'ignoreCancelled' são muito importantes na construção de plugins de qualidade, então é muito recomendado que você não um seja retardado como o BaconCodes e implemente o sistema de prioridades nos seus eventos.

Link para o comentário
Compartilhar em outros sites

 

Eu com toda minha experiência na área, ainda não sabia a real

utilidade de 'ignoreCancelled' e agora eu sei.

 

Obrigado por compartilhar.

:)

 

Vivendo e aprendendo haha

Eu aprendi esse sistema de prioridades semana passada depois de 6 meses programando ><

 

 

Tenho certeza que vai ajudante bastante gente. Parabéns :)

 

 

Ai sim gostei já sabia um pouco agr tá completo TOP

 

 

Vlw galera <3

Link para o comentário
Compartilhar em outros sites

Como assim cancelar só com prioridade baixa? Qualquer plugin de login usa HIGHEST

?? Se o cara criar um comando usando evento em vez de registrar e colocar prioridade LOWEST no comando, o comando vai ser executado antes de ser cancelado '-' pq o LOWEST é chamado antes do HIGHEST não é essa a lógica?

Link para o comentário
Compartilhar em outros sites


	@EventHandler(priority = EventPriority.LOWEST)
	public void aoExecutarComando1(PlayerCommandPreprocessEvent e) {
		String cmd = e.getMessage().toLowerCase();
		if (cmd.equals("/vip")) {
			e.getPlayer().teleport(AreaVIP);
			e.getPlayer().sendMessage("§aTeleportado com sucesso para a area vip.");
		}
	}
	
	@EventHandler(priority = EventPriority.HIGHEST)
	public void aoExecutarComando2(PlayerCommandPreprocessEvent e) {
		String cmd = e.getMessage().toLowerCase();
		if (loginList.contains(e.getPlayer())) {
			e.getPlayer().sendMessage("§cVocê precisa logar para poder usar comandos");
			e.setCancelled(true);
		}
	}

Oque você acha que vai acontecer se esse código for executado?

Link para o comentário
Compartilhar em outros sites

Como assim cancelar só com prioridade baixa? Qualquer plugin de login usa HIGHEST

Se você vier e mostrar (com provas) que as citações e códigos acima estão errados então eu irei de maneira honrosa pedir para deletar o tópico e irei criar um novo tópico corrigido e com créditos a você... tudo o que eu apresentei a cima foi baseado na WIKI do bukkit, nas discussões que eu li no spigot e nos testes feitos in Game.

 

Inclusive aquele exemplo que eu dei do plugin de spawners é real...

 

Então fica a proposta pra você a presentar um conteúdo contraditório ao meu e documentado. 

Link para o comentário
Compartilhar em outros sites

Em 19/08/2019 em 11:52, LorettaMen disse:

Eu ja fiz um cabo assim eu funciona muito bem, agora acho que seria legal mostrar pro pessoal como é a instalaçao

As fotos dos conectores, é visto de frente ou de tras?

?????????????????????????

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...