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 caixaCrateHolder crate- Caixa que foi abertadouble amount- Quantidade de caixas abertas
Métodos:
getPlayer()- Obtém o jogadorgetCrate()- Obtém a caixagetAmount()- Obtém a quantidade de caixas abertasgetHandlers()- Obtém a lista de handlers do eventogetHandlerList()- 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!");
}
}