LogoyStore

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:

  • true se o jogador está em um evento, false caso 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:

  • EventInPersonHolder do evento ou null se 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:

  • EventDataHolder com dados do evento ou null

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 jogador
  • getEventType() - Obtém o tipo de evento
  • isCancelled() - Verifica se cancelado
  • setCancelled(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 jogador
  • getEventType() - Obtém o tipo de evento
  • getEventExitType() - 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 jogador
  • getEventType() - Obtém o tipo de evento

Enums

EventType

Tipos de eventos disponíveis:

Eventos de Perguntas:

  • QUIZ - Quiz de perguntas
  • JACKPOT - Adivinha o número
  • MATH - Problema matemático
  • PHRASE - Complete a frase
  • UNSCRAMBLE - Desembaralhe palavras

Eventos de Ação Rápida:

  • FASTCLICK - Clique rápido
  • LOTTERY - Loteria
  • FIRST - Primeiro a chegar
  • VOTING - Votação

Eventos Baseados em Habilidades:

  • PARKOUR - Parkour
  • RACE - Corrida
  • REDSTONE - Redstone
  • MAZE - Labirinto
  • SPLEEF - Spleef
  • SPLEGG - Splegg
  • PAINTBALL - Paintball
  • FIGHT - Luta PvP
  • SUMO - Sumo
  • DROPPER - Dropper
  • TNTRUN - TNT Run
  • BOWSPLEEF - Bow Spleef

Eventos Deluxe:

  • TRAFFICLIGHTS - Semáforo
  • DWARFANDGIANT - Anão e Gigante
  • HOTPOTATO - Batata Quente
  • ONECHAMBER - Uma Câmara
  • FROG - Sapo
  • MINEFIELD - Campo Minado
  • HIDEANDSEEK - Esconde-Esconde

Outros:

  • FASTCRAFT - Craft Rápido
  • CUSTOM - 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 EventType antes de aplicar lógica específica
  • Use PlayerWinEventEvent para dar recompensas
  • Verifique EventExitType em PlayerExitEventEvent

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("═══════════════════════════");
}

Nesta página