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 blocoBlock block- Bloco que foi quebrado
Métodos:
getPlayer()- Obtém o jogadorgetBlock()- Obtém o blocoisCancelled()- Verifica se canceladosetCancelled(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!");
}
}