LogoyStore

API

A API fornece eventos públicos para desenvolvedores integrarem seus plugins ao sistema de floresta do yFloresta, permitindo monitorar quebra de blocos e participações.

Obtendo acesso aos eventos

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

Exemplo:

@EventHandler
public void onFlorestaBreakBlock(FlorestaBreakBlockEvent event) {
    // Manipular evento de quebra de bloco
}

@EventHandler
public void onFlorestaJoin(FlorestaJoinEvent event) {
    // Manipular evento de entrada
}

@EventHandler
public void onFlorestaQuit(FlorestaQuitEvent event) {
    // Manipular evento de saída
}

Eventos disponíveis

FlorestaBreakBlockEvent

Disparado quando um jogador quebra um bloco na floresta.

Cancelável: Sim

@EventHandler
public void onFlorestaBreakBlock(FlorestaBreakBlockEvent event) {
    Player player = event.getPlayer();
    Block block = event.getBlock();
    
    System.out.println(player.getName() + " quebrou um bloco em: " + 
                       block.getLocation());
}

Propriedades:

  • Player player - Jogador que quebrou o bloco
  • Block block - Bloco que foi quebrado

Métodos:

  • getPlayer() - Obtém o jogador
  • getBlock() - Obtém o bloco
  • isCancelled() - Verifica se cancelado
  • setCancelled(boolean) - Cancela a quebra do bloco

Observações:

  • Evento cancelável permite bloquear a quebra
  • Útil para aplicar multiplicadores ou recompensas
  • Bloco contém informações de tipo e localização

FlorestaJoinEvent

Disparado quando um jogador entra na floresta.

@EventHandler
public void onFlorestaJoin(FlorestaJoinEvent event) {
    Player player = event.getPlayer();
    player.sendMessage("Bem-vindo à floresta!");
}

Propriedades:

  • Player player - Jogador que entrou

Métodos:

  • getPlayer() - Obtém o jogador

Observações:

  • Dispara quando jogador entra na área da floresta
  • Útil para dar itens iniciais ou efeitos
  • Não é cancelável

FlorestaQuitEvent

Disparado quando um jogador sai da floresta.

@EventHandler
public void onFlorestaQuit(FlorestaQuitEvent event) {
    Player player = event.getPlayer();
    player.sendMessage("Você saiu da floresta!");
}

Propriedades:

  • Player player - Jogador que saiu

Métodos:

  • getPlayer() - Obtém o jogador

Observações:

  • Dispara quando jogador sai da área da floresta
  • Útil para limpar efeitos ou salvar dados
  • Não é cancelável

Boas práticas

  • Use isCancelled() para validar antes de processar eventos
  • Evite operações pesadas dentro dos event handlers
  • Use getBlock().getType() para filtrar tipos específicos
  • Registre estatísticas de blocos quebrados
  • Combine eventos JOIN e QUIT para rastrear sessões
  • Valide permissões antes de permitir quebras

Exemplos de uso

Bloquear quebra de blocos específicos

@EventHandler
public void onFlorestaBreakBlock(FlorestaBreakBlockEvent event) {
    Block block = event.getBlock();
    
    if (block.getType() == Material.BEDROCK) {
        event.setCancelled(true);
        event.getPlayer().sendMessage("Você não pode quebrar bedrock!");
    }
}

Aplicar multiplicador de recompensa

@EventHandler
public void onFlorestaBreakBlock(FlorestaBreakBlockEvent event) {
    Player player = event.getPlayer();
    Block block = event.getBlock();
    
    if (!event.isCancelled()) {
        // Dar recompensa customizada
        double baseReward = 100;
        double multiplier = getPlayerMultiplier(player);
        addBalance(player.getName(), baseReward * multiplier);
    }
}

Registrar estatísticas de blocos

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

@EventHandler
public void onFlorestaBreakBlock(FlorestaBreakBlockEvent event) {
    Player player = event.getPlayer();
    String key = player.getName();
    
    blockBreaks.put(key, blockBreaks.getOrDefault(key, 0) + 1);
    
    if (blockBreaks.get(key) % 100 == 0) {
        player.sendMessage("Você quebrou " + blockBreaks.get(key) + " blocos!");
    }
}

Notificação de entrada

@EventHandler
public void onFlorestaJoin(FlorestaJoinEvent event) {
    Player player = event.getPlayer();
    player.sendMessage("§6Bem-vindo à floresta!");
    player.sendMessage("§6Quebre blocos para ganhar recompensas!");
    
    // Dar itens iniciais
    player.getInventory().addItem(new ItemStack(Material.WOODEN_AXE));
}

Limpar ao sair

@EventHandler
public void onFlorestaQuit(FlorestaQuitEvent event) {
    Player player = event.getPlayer();
    
    // Remover efeitos
    player.removePotionEffect(PotionEffectType.HASTE);
    
    // Salvar dados
    savePlayerData(player);
    
    player.sendMessage("Dados da floresta salvos!");
}

Sistema de streaks

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

@EventHandler
public void onFlorestaBreakBlock(FlorestaBreakBlockEvent event) {
    if (event.isCancelled()) return;
    
    Player player = event.getPlayer();
    String key = player.getName();
    
    breakStreaks.put(key, breakStreaks.getOrDefault(key, 0) + 1);
    int streak = breakStreaks.get(key);
    
    if (streak % 50 == 0) {
        player.sendMessage("§c§l⚡ STREAK: " + streak + " blocos quebrados!");
        player.addPotionEffect(new PotionEffect(
            PotionEffectType.SPEED, 
            200, 
            1, 
            false, 
            false
        ));
    }
}

@EventHandler
public void onFlorestaQuit(FlorestaQuitEvent event) {
    breakStreaks.remove(event.getPlayer().getName());
}

Verificar tipo de bloco

@EventHandler
public void onFlorestaBreakBlock(FlorestaBreakBlockEvent event) {
    Block block = event.getBlock();
    Player player = event.getPlayer();
    
    double reward = 0;
    switch (block.getType()) {
        case OAK_LOG:
            reward = 50;
            break;
        case BIRCH_LOG:
            reward = 75;
            break;
        case DARK_OAK_LOG:
            reward = 100;
            break;
        default:
            reward = 25;
    }
    
    addBalance(player.getName(), reward);
}

Dashboard de sessão

private Map<String, Long> sessionStart = new HashMap<>();

@EventHandler
public void onFlorestaJoin(FlorestaJoinEvent event) {
    Player player = event.getPlayer();
    sessionStart.put(player.getName(), System.currentTimeMillis());
}

@EventHandler
public void onFlorestaQuit(FlorestaQuitEvent event) {
    Player player = event.getPlayer();
    Long start = sessionStart.remove(player.getName());
    
    if (start != null) {
        long duration = System.currentTimeMillis() - start;
        long minutes = duration / 60000;
        
        player.sendMessage("═══════════════════════════");
        player.sendMessage("RESUMO DA SESSÃO");
        player.sendMessage("═══════════════════════════");
        player.sendMessage("Duração: " + minutes + " minutos");
        player.sendMessage("═══════════════════════════");
    }
}

Sistema de áreas protegidas

private Set<Region> protectedRegions = new HashSet<>();

@EventHandler
public void onFlorestaBreakBlock(FlorestaBreakBlockEvent event) {
    Block block = event.getBlock();
    
    for (Region region : protectedRegions) {
        if (region.contains(block.getLocation())) {
            event.setCancelled(true);
            event.getPlayer().sendMessage("Esta área está protegida!");
            return;
        }
    }
}

Notificação de drop de item raro

@EventHandler
public void onFlorestaBreakBlock(FlorestaBreakBlockEvent event) {
    if (event.isCancelled()) return;
    
    Block block = event.getBlock();
    Player player = event.getPlayer();
    
    // 5% de chance de drop raro
    if (Math.random() < 0.05) {
        ItemStack rareItem = new ItemStack(Material.DIAMOND);
        block.getWorld().dropItemNaturally(block.getLocation(), rareItem);
        
        Bukkit.broadcastMessage("§c✦ " + player.getName() + 
            " encontrou um item raro na floresta!");
    }
}

Nesta página