API
A API fornece uma interface pública para desenvolvedores integrarem seus plugins ao sistema de eventos do yEventos, permitindo verificar eventos, obter dados e monitorar participações.
Obtendo a instância da API
A API é exposta através de um BukkitService assim como feito comumente no Vault.
Exemplo:
EventAPIHolder eventAPI;
try {
RegisteredServiceProvider<EventAPIHolder> rsp = Bukkit.getServer().getServicesManager().getRegistration(EventAPIHolder.class);
return rsp == null ? null : (EventAPIHolder)rsp.getProvider();
} catch (Throwable t) {
return null;
}
Métodos disponíveis
isInAnyEvent(Player player)
Verifica se um jogador está participando de algum evento.
if (eventAPI.isInAnyEvent(player)) {
System.out.println("Jogador está em um evento!");
}Parâmetros:
player- Objeto Player do Bukkit
Retorno:
truese o jogador está em um evento,falsecaso contrário
Observações:
- Verifica todos os eventos ativos
- Método rápido e seguro
- Útil para bloquear ações durante eventos
alreadyIn(Player player)
Retorna o evento em que o jogador está participando.
EventInPersonHolder event = eventAPI.alreadyIn(player);
if (event != null) {
System.out.println("Jogador está em: " + event.getName());
}Parâmetros:
player- Objeto Player do Bukkit
Retorno:
EventInPersonHolderdo evento ounullse não estiver em nenhum
Observações:
- Retorna null se jogador não está em evento
- Acesso direto ao objeto do evento
- Útil para obter informações do evento atual
getEventData(String key)
Recupera os dados configurados de um evento.
EventDataHolder eventData = eventAPI.getEventData("PARKOUR_1");Parâmetros:
key- Chave/ID do evento
Retorno:
EventDataHoldercom dados do evento ounull
Observações:
- Carrega dados do cache ou do banco de dados
- Contém configurações e recompensas
- Pode retornar null se o evento não existir
getEventQueue(String name)
Obtém a fila de um evento no servidor Bungee (assíncrono).
EventAPI.getEventQueue("PARKOUR").thenAccept(queue -> {
if (queue != null) {
System.out.println("Jogadores na fila: " + queue.getSize());
}
});Parâmetros:
name- Nome do evento
Retorno:
CompletableFuture<EventQueue>com dados da fila
Observações:
- Operação assíncrona
- Específico para arquitetura Bungee
- Use
.join()para bloqueador,.thenAccept()para callback
getEventQueues()
Obtém todas as filas de eventos no servidor Bungee (assíncrono).
EventAPI.getEventQueues().thenAccept(queues -> {
for (EventQueue queue : queues) {
System.out.println(queue.getName() + ": " + queue.getSize());
}
});Retorno:
CompletableFuture<List<EventQueue>>com todas as filas
Observações:
- Operação assíncrona
- Específico para arquitetura Bungee
- Retorna lista vazia se nenhuma fila existir
getEventQueueVelo(String name)
Obtém a fila de um evento no servidor Velocity (assíncrono).
EventAPI.getEventQueueVelo("RACE").thenAccept(queue -> {
if (queue != null) {
System.out.println("Tamanho da fila: " + queue.getSize());
}
});Parâmetros:
name- Nome do evento
Retorno:
CompletableFuture<EventQueue>com dados da fila
Observações:
- Operação assíncrona
- Específico para arquitetura Velocity
- Similar a
getEventQueue()mas para Velocity
getEventQueuesVelo()
Obtém todas as filas de eventos no servidor Velocity (assíncrono).
EventAPI.getEventQueuesVelo().thenAccept(queues -> {
System.out.println("Total de filas: " + queues.size());
});Retorno:
CompletableFuture<List<EventQueue>>com todas as filas
Observações:
- Operação assíncrona
- Específico para arquitetura Velocity
- Retorna lista vazia se nenhuma fila existir
Eventos disponíveis
EventStartEvent
Disparado quando um evento inicia.
@EventHandler
public void onEventStart(EventStartEvent event) {
EventType type = event.getEventType();
Bukkit.broadcastMessage("Evento iniciado: " + type.name());
}Métodos:
getEventType()- Obtém o tipo de evento
PlayerEnterEventEvent
Disparado quando um jogador entra em um evento.
Cancelável: Sim
@EventHandler
public void onPlayerEnterEvent(PlayerEnterEventEvent event) {
Player player = event.getPlayer();
EventType type = event.getEventType();
player.sendMessage("Você entrou no evento: " + type.name());
}Métodos:
getPlayer()- Obtém o jogadorgetEventType()- Obtém o tipo de eventoisCancelled()- Verifica se canceladosetCancelled(boolean)- Cancela a entrada
EventStopEvent
Disparado quando um evento termina.
@EventHandler
public void onEventStop(EventStopEvent event) {
EventType type = event.getEventType();
Bukkit.broadcastMessage("Evento finalizado: " + type.name());
}Métodos:
getEventType()- Obtém o tipo de evento
PlayerExitEventEvent
Disparado quando um jogador sai de um evento.
@EventHandler
public void onPlayerExitEvent(PlayerExitEventEvent event) {
Player player = event.getPlayer();
EventType type = event.getEventType();
PlayerExitEventEvent.EventExitType exitType = event.getEventExitType();
player.sendMessage("Você saiu do evento: " + exitType.name());
}Métodos:
getPlayer()- Obtém o jogadorgetEventType()- Obtém o tipo de eventogetEventExitType()- Obtém razão da saída (EXIT, DEAD, WIN)
PlayerWinEventEvent
Disparado quando um jogador vence um evento.
@EventHandler
public void onPlayerWinEvent(PlayerWinEventEvent event) {
Player player = event.getPlayer();
EventType type = event.getEventType();
player.sendMessage("Você venceu: " + type.name() + "!");
Bukkit.broadcastMessage(player.getName() + " venceu " + type.name());
}Métodos:
getPlayer()- Obtém o jogadorgetEventType()- Obtém o tipo de evento
Enums
EventType
Tipos de eventos disponíveis:
Eventos de Perguntas:
QUIZ- Quiz de perguntasJACKPOT- Adivinha o númeroMATH- Problema matemáticoPHRASE- Complete a fraseUNSCRAMBLE- Desembaralhe palavras
Eventos de Ação Rápida:
FASTCLICK- Clique rápidoLOTTERY- LoteriaFIRST- Primeiro a chegarVOTING- Votação
Eventos Baseados em Habilidades:
PARKOUR- ParkourRACE- CorridaREDSTONE- RedstoneMAZE- LabirintoSPLEEF- SpleefSPLEGG- SpleggPAINTBALL- PaintballFIGHT- Luta PvPSUMO- SumoDROPPER- DropperTNTRUN- TNT RunBOWSPLEEF- Bow Spleef
Eventos Deluxe:
TRAFFICLIGHTS- SemáforoDWARFANDGIANT- Anão e GiganteHOTPOTATO- Batata QuenteONECHAMBER- Uma CâmaraFROG- SapoMINEFIELD- Campo MinadoHIDEANDSEEK- Esconde-Esconde
Outros:
FASTCRAFT- Craft RápidoCUSTOM- Evento customizado
Boas práticas
- Sempre verifique
isInAnyEvent()antes de permitir ações sensíveis - Use
alreadyIn()para obter informações do evento atual - Operações assíncronas são não-bloqueantes (use em Bungee/Velocity)
- Valide
EventTypeantes de aplicar lógica específica - Use
PlayerWinEventEventpara dar recompensas - Verifique
EventExitTypeemPlayerExitEventEvent
Exemplos de uso
Bloquear ações durante evento
@EventHandler
public void onPlayerBlockPlace(BlockPlaceEvent event) {
if (eventAPI.isInAnyEvent(event.getPlayer())) {
event.setCancelled(true);
event.getPlayer().sendMessage("Você não pode construir durante um evento!");
}
}Obter informações do evento atual
public void showEventInfo(Player player) {
EventInPersonHolder event = eventAPI.alreadyIn(player);
if (event != null) {
player.sendMessage("Evento: " + event.getName());
player.sendMessage("Tipo: " + event.getType().name());
} else {
player.sendMessage("Você não está em nenhum evento");
}
}Dar recompensa ao vencer
@EventHandler
public void onPlayerWin(PlayerWinEventEvent event) {
Player player = event.getPlayer();
EventType type = event.getEventType();
double reward = 1000;
if (EventType.isDeluxe(type)) {
reward = 2000; // Eventos deluxe dão mais
}
addBalance(player.getName(), reward);
player.sendMessage("Recompensa: " + reward + " moedas!");
}Cancelar entrada em evento
@EventHandler
public void onPlayerEnter(PlayerEnterEventEvent event) {
Player player = event.getPlayer();
if (isPlayerBanned(player)) {
event.setCancelled(true);
player.sendMessage("Você está banido de eventos!");
}
}Verificar TNT Run
@EventHandler
public void onEventStart(EventStartEvent event) {
if (EventType.isTnt(event.getEventType())) {
Bukkit.broadcastMessage("Evento TNT iniciado!");
}
}Monitorar saídas de evento
@EventHandler
public void onPlayerExit(PlayerExitEventEvent event) {
Player player = event.getPlayer();
EventType type = event.getEventType();
PlayerExitEventEvent.EventExitType exitType = event.getEventExitType();
switch (exitType) {
case WIN:
player.sendMessage("Você venceu!");
break;
case DEAD:
player.sendMessage("Você morreu no evento");
break;
case EXIT:
player.sendMessage("Você saiu do evento");
break;
}
}Verificar fila do evento (Bungee)
public void checkEventQueue(String eventName) {
EventAPI.getEventQueue(eventName).thenAccept(queue -> {
if (queue != null) {
System.out.println(eventName + " - Jogadores na fila: " + queue.getSize());
}
}).exceptionally(throwable -> {
throwable.printStackTrace();
return null;
});
}Dashboard de evento
public void showEventDashboard(Player player) {
EventInPersonHolder currentEvent = eventAPI.alreadyIn(player);
player.sendMessage("═══════════════════════════");
player.sendMessage("STATUS DE EVENTO");
player.sendMessage("═══════════════════════════");
if (currentEvent != null) {
player.sendMessage("Status: ✓ PARTICIPANDO");
player.sendMessage("Evento: " + currentEvent.getName());
player.sendMessage("Tipo: " + currentEvent.getType().name());
} else {
player.sendMessage("Status: ✗ NÃO PARTICIPANDO");
player.sendMessage("Digite /evento para entrar em um!");
}
player.sendMessage("═══════════════════════════");
}