LogoyStore

API

A API fornece eventos públicos para desenvolvedores integrarem seus plugins ao sistema de caixas virtuais do yCratesVirtuais, permitindo monitorar aberturas de caixas.

Obtendo acesso aos eventos

Os eventos do yCratesVirtuais são eventos padrão do Bukkit e podem ser escutados como qualquer outro evento.

Exemplo:

@EventHandler
public void onCrateOpen(CrateOpenEvent event) {
    // Manipular evento de abertura de caixa
}

Eventos disponíveis

CrateOpenEvent

Disparado quando um jogador abre uma caixa virtual.

@EventHandler
public void onCrateOpen(CrateOpenEvent event) {
    Player player = event.getPlayer();
    CrateHolder crate = event.getCrate();
    double amount = event.getAmount();
}

Propriedades:

  • Player player - Jogador que abriu a caixa
  • CrateHolder crate - Caixa que foi aberta
  • double amount - Quantidade de caixas abertas

Métodos:

  • getPlayer() - Obtém o jogador
  • getCrate() - Obtém a caixa
  • getAmount() - Obtém a quantidade de caixas abertas
  • getHandlers() - Obtém a lista de handlers do evento
  • getHandlerList() - Obtém a lista estática de handlers

Estrutura de dados

CrateHolder

Representa uma caixa virtual.

Propriedades principais:

  • ID da caixa
  • Nome da caixa
  • Recompensas disponíveis
  • Chance de cada recompensa
  • Configurações da caixa

Boas práticas

  • Sempre verifique se o jogador é válido antes de aplicar efeitos
  • Use eventos para registrar estatísticas de aberturas
  • Evite operações pesadas dentro do event handler
  • Considere usar tarefas assíncronas para banco de dados
  • Valide a caixa antes de manipular recompensas

Exemplos de uso

Registrar aberturas de caixas

@EventHandler
public void onCrateOpen(CrateOpenEvent event) {
    Player player = event.getPlayer();
    CrateHolder crate = event.getCrate();
    double amount = event.getAmount();
    
    String message = player.getName() + " abriu " + amount + "x " + 
                     crate.getName();
    Bukkit.getLogger().info(message);
    logDatabase(message);
}

Aplicar bônus de abertura rápida

@EventHandler
public void onCrateOpen(CrateOpenEvent event) {
    if (event.getAmount() >= 10) {
        Player player = event.getPlayer();
        player.sendMessage("Bônus aplicado: +50% de chance de recompensa rara!");
        applyOpeningBonus(player);
    }
}

Notificar chat global

@EventHandler
public void onCrateOpen(CrateOpenEvent event) {
    Player player = event.getPlayer();
    CrateHolder crate = event.getCrate();
    
    if (crate.isRare()) {
        Bukkit.broadcastMessage("§6" + player.getName() + 
            " §eabriu uma caixa rara: " + crate.getName() + "!");
    }
}

Sistema de estatísticas

private final Map<String, Integer> crateOpens = new HashMap<>();

@EventHandler
public void onCrateOpen(CrateOpenEvent event) {
    Player player = event.getPlayer();
    String key = player.getName();
    
    crateOpens.put(key, crateOpens.getOrDefault(key, 0) + 
                   (int) event.getAmount());
}

public int getPlayerOpens(Player player) {
    return crateOpens.getOrDefault(player.getName(), 0);
}

Integração com economia

@EventHandler
public void onCrateOpen(CrateOpenEvent event) {
    Player player = event.getPlayer();
    double amount = event.getAmount();
    double costPerCrate = 100;
    double totalCost = amount * costPerCrate;
    
    if (getBalance(player.getName()) < totalCost) {
        player.sendMessage("Saldo insuficiente!");
        return;
    }
    
    removeBalance(player.getName(), totalCost);
}

Sistema de cooldown

private final Map<String, Long> lastCrateOpen = new HashMap<>();
private static final long COOLDOWN = 1000; // 1 segundo

@EventHandler
public void onCrateOpen(CrateOpenEvent event) {
    Player player = event.getPlayer();
    String key = player.getName();
    long now = System.currentTimeMillis();
    
    if (lastCrateOpen.containsKey(key)) {
        long lastOpen = lastCrateOpen.get(key);
        if (now - lastOpen < COOLDOWN) {
            player.sendMessage("Aguarde antes de abrir outra caixa!");
            return;
        }
    }
    
    lastCrateOpen.put(key, now);
}

Dashboard de caixas abertas

public void showCrateStats(Player player) {
    player.sendMessage("═══════════════════════════");
    player.sendMessage("ESTATÍSTICAS DE CAIXAS");
    player.sendMessage("═══════════════════════════");
    
    PlayerData data = getPlayerData(player.getName());
    player.sendMessage("Caixas Abertas: " + data.getCrateOpens());
    player.sendMessage("Última Abertura: " + data.getLastCrateOpen());
    player.sendMessage("Recompensas Obtidas: " + data.getRewardsCount());
    
    player.sendMessage("═══════════════════════════");
}

Filtro por tipo de caixa

@EventHandler
public void onCrateOpen(CrateOpenEvent event) {
    CrateHolder crate = event.getCrate();
    Player player = event.getPlayer();
    
    if (crate.getName().contains("Lendária")) {
        player.addPotionEffect(new PotionEffect(
            PotionEffectType.GLOWING, 
            200, 
            0, 
            false, 
            false
        ));
        
        Bukkit.broadcastMessage("§c§l✦ §6" + player.getName() + 
            " §eabriu uma caixa §c§lLendária§e!");
    }
}

Sistema de achievement

@EventHandler
public void onCrateOpen(CrateOpenEvent event) {
    Player player = event.getPlayer();
    double totalOpens = getTotalCrateOpens(player);
    
    if (totalOpens == 100) {
        unlockAchievement(player, "CRATE_MASTER");
        player.sendMessage("§6Você desbloqueou o achievement: Mestre das Caixas!");
    }
}

Nesta página