Ir para conteúdo

[BukkitAPI] Criando custom events!


Lüigi!

Posts Recomendados

      #OldButGold

 

 

Olá queridas pessoas

Hoje iremos aprender a fazer eventos personalizados para seu plugin, eu utilizo muito esses eventos personlizados quando eu tenho que constantemente adiconar métodos a um comando ou listener. Ou mesmo para complementar minhas APIs, mas você pode utilizar para o que quiser, e acredite em mim, isso irá facilitar sua vida, e é muito facil!.

Bom, imaginemos que temos um plugin de broadcast, irei inventar um código aqui pois estou sem IDE no momento:

public class BroadcastCmd implements CommandExecutor{

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
if(cmd.getName().equalsIgnoreCase("Broadcast"){
//faz de conta que tem todo o bang do broadcast, para ficar bonitin, vo inventar um void
broadcast(sender,mensagem);
}
return false;
}

}
Então nosso plugin permite o player da broadcast, o código bobo que postei não nos importa, é só uma base, o que importa e o que vem a seguir.

Crie uma classe para o evento, ele tem que dar extend Event e ter uma handler list, é o essencial, você não ira utilizar os handlerlist mas e um requerimento do construtorEvent então, vamos criar a classe com o nome do evento(mais pratico assim), PlayerBroadcastEvent.

public final class PlayerBroadcastEvent extends Event {
private static final HandlerList handlers = new HandlerList();

public HandlerList getHandlers() {
return handlers;
}

public static HandlerList getHandlerList() {
return handlers;
}
}

Pronto, temos nossa base criada! Simples não? Agora que vem a sua parte, o que seu evento irá precisar guardar? O que o programdor poderá mudar no evento? Isso é com você, mas para eu ensinar o resto vamos supor que nosso evento de bradcast irá permitir pegar o jogador que mandou o broadcast e pegar a mensagem, apenas isso  :tongue: Só faze o construtor e os getters and setters:

public final class PlayerBroadcastEvent extends Event {
private static final HandlerList handlers = new HandlerList();
private Player player;
private String mensagem;

public PlayerBroadcastEvent(Player player,String mensagem){
this.player = player;
this.mensagem = mensagem;
}
public Player getPlayer(){
return player;
}
public String getMensagem(){
return mensagem;
}
public HandlerList getHandlers() {
return handlers;
}

public static HandlerList getHandlerList() {
return handlers;
}
}

Pronto, nosso evento esta praticamente pronto, mas como ele vai advinhar que o player irá dar o broadcast? Simples, precisamos chamar o evento, vamos voltar a nossa classe do comando e chamar o evento, você vai entender facilmente:

public class BroadcastCmd implements CommandExecutor{

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
if(cmd.getName().equalsIgnoreCase("Broadcast"){
//faz de conta que tem todo o bang do broadcast, para ficar bonitin, vo inventar um void
broadcast(sender,mensagem);
Bukkit.getServer().getPluginManager().callEvent(new PlayerBroadcastEvent(sender,mensagem));//chama o evento, e define seus atributos.

}
return false;
}
}

Pronto, nosso evento ta feito! para usar só fazer ele nomalmente como event handler

@EventHandler
public void testeEvento(PlayerBroadcastMessageEvent e){
String msg = e.getMessage();
Player player = e.getPlayer();
}

Pronto galera, facil não? Gostou? Comente!

COMO PERMITIR QUE O EVENTO SER CANCELAVEL

 A única diferença é que você implementa Cancellable, como é simples, eu postarei o código para vocês terem um exemplo

public final class PlayerBroadcastEvent extends Event implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private Player player;
private String mensagem; 
private boolean cancelled;

public PlayerBroadcastEvent(Player player,String mensagem){
this.player = player;
this.mensagem = mensagem;
}
public Player getPlayer(){
return player;
}
public String getMensagem(){
return mensagem;
}
public boolean isCancelled() {
return cancelled;
}
public void setCancelled(boolean cancel) {
cancelled = cancel;
}
public HandlerList getHandlers() {
return handlers;
}

public static HandlerList getHandlerList() {
return handlers;
}
}
public class BroadcastCmd implements CommandExecutor{

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
if(cmd.getName().equalsIgnoreCase("Broadcast"){
//faz de conta que tem todo o bang do broadcast, para ficar bonitin, vo inventar um void
PlayerBroadcastEventevent evento = new PlayerBroadcastEvent(sender,mensagem);
Bukkit.getServer().getPluginManager().callEvent(evento);//chama o evento, e define seus atributos.
if(!evento.isCancelled()){
broadcast(sender,mensagem);//CHECA SE O EVENTO NÃO FOI CANCELADO
}
}
return false;
}
}
Link para o comentário
Compartilhar em outros sites

boa cara , apesar de não manjar nada de java aposto que foi um bom tutorial.

 

aonde você aprendeu java?

 

 Vlw!

 Respondendo sua duvida, aqui uma print que falei exatamente sobre isso em meu tópico de apresentação:

  4a94a3a96c2d4d448727d9c80600ec33.png

Boa xD, '-' não sabia criar customevents, vlws

 

Bom ter ajudado xD

Editado por Lüigi!
Link para o comentário
Compartilhar em outros sites

#OldButGold kkkkkkkkkkkkkkkkk

 

 

boa!! em todo fórum tem que ter esse seu tutorial kkkk

 

 

~tira essa foto, ela é bonita d+

 Claro né... Não posso deixar eles morrerem facilmente kk

 

 (vou pensar a respeito da ft)

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