API
A API fornece uma interface pública para desenvolvedores integrarem seus plugins ao sistema de espadas customizadas do yEspadasFarm, permitindo verificar enchantments e bônus de farm.
Obtendo a instância da API
A API é exposta através de um BukkitService assim como feito comumente no Vault.
Exemplo:
EspadasFarmAPIHolder espadasFarmAPI;
try {
RegisteredServiceProvider<EspadasFarmAPIHolder> rsp = Bukkit.getServer().getServicesManager().getRegistration(EspadasFarmAPIHolder.class);
return rsp == null ? null : (EspadasFarmAPIHolder)rsp.getProvider();
} catch (Throwable t) {
return null;
}
Métodos disponíveis
isFarmSword(ItemStack item)
Verifica se um item é uma espada de farm.
if (espadasFarmAPI.isFarmSword(item)) {
System.out.println("É uma espada de farm!");
}Parâmetros:
item- ItemStack a verificar
Retorno:
truese é uma espada de farm,falsecaso contrário
Observações:
- Verifica se a tag NBT "yEspadasFarm-Sword" existe
- Método seguro contra items nulos
- Rápido e eficiente
getLootingLevel(ItemStack item)
Obtém o nível de looting de uma espada de farm.
double lootingLevel = espadasFarmAPI.getLootingLevel(item);Parâmetros:
item- ItemStack da espada
Retorno:
- Valor double do nível de looting
Observações:
- Recupera da tag NBT "yEspadasFarm-Sword"
- Valores típicos: 1.0 a 5.0
- Afeta quantidade de drops de mobs
getLucky(ItemStack item)
Obtém o bônus do enchantment "Lucky" (Sorte).
double luckyBonus = EspadasFarmAPI.getLucky(item);Parâmetros:
item- ItemStack da espada
Retorno:
- Valor double do bônus de sorte (0.0 se não possuir)
Observações:
- Método estático
- Calcula multiplicador baseado no nível do enchantment
- Usado para aumentar drops de itens raros
getLuckyBossArena(ItemStack item)
Obtém o bônus do enchantment "Lucky Boss Arena".
double luckyBossBonus = EspadasFarmAPI.getLuckyBossArena(item);Parâmetros:
item- ItemStack da espada
Retorno:
- Valor double do bônus em arena de boss (0.0 se não possuir)
Observações:
- Método estático
- Específico para derrotar bosses em arena
- Calcula multiplicador baseado no nível
getDoubleReward(ItemStack item)
Obtém o bônus do enchantment "Double Reward" (Recompensa Dupla).
double doubleRewardBonus = EspadasFarmAPI.getDoubleReward(item);Parâmetros:
item- ItemStack da espada
Retorno:
- Valor double do bônus de recompensa dupla (0.0 se não possuir)
Observações:
- Método estático
- Aumenta recompensas monetárias de kills
- Calcula multiplicador baseado no nível
getStack(ItemStack item)
Obtém o bônus do enchantment "Stack" (Acúmulo).
double stackBonus = EspadasFarmAPI.getStack(item);Parâmetros:
item- ItemStack da espada
Retorno:
- Valor double do bônus de stack (0.0 se não possuir)
Observações:
- Método estático
- Permite acumular drops em pilhas maiores
- Calcula multiplicador baseado no nível
getDivine(ItemStack item)
Obtém o bônus do enchantment "Divine" (Divino).
double divineBonus = EspadasFarmAPI.getDivine(item);Parâmetros:
item- ItemStack da espada
Retorno:
- Valor double do bônus divino (0.0 se não possuir)
Observações:
- Método estático
- Enchantment poderoso com efeitos especiais
- Calcula multiplicador baseado no nível
getKillStack(ItemStack item)
Obtém o multiplicador do enchantment "Kill Stack" (Stack de Kills).
double killStackMultiplier = EspadasFarmAPI.getKillStack(item);Parâmetros:
item- ItemStack da espada
Retorno:
- Valor double entre 0.0 e 1.0 representando o multiplicador
Observações:
- Método estático
- Valor é limitado a máximo de 1.0
- Padrão 1.0 se item não possuir o enchantment
- Afeta acúmulo de kills consecutivos
Estrutura de dados
PluginEnchant
Representa um enchantment customizado do plugin.
Propriedades principais:
- Nome do enchantment
- ID único
- Bônus por nível
- Nível máximo
- Descrição
Boas práticas
- Sempre verifique
isFarmSword()antes de aplicar bônus - Valide items nulos antes de passar para os métodos
- Cache resultados dos bônus para operações frequentes
- Use os bônus para calcular drops dinâmicos
- Combine múltiplos enchantments para sinergia
Exemplos de uso
Verificar se item é espada de farm
ItemStack item = player.getInventory().getItemInMainHand();
if (espadasFarmAPI.isFarmSword(item)) {
double lootingLevel = espadasFarmAPI.getLootingLevel(item);
player.sendMessage("Espada de farm com nível " + lootingLevel);
}Calcular drops baseado em enchantments
public int calculateDropAmount(ItemStack sword, int baseAmount) {
if (!espadasFarmAPI.isFarmSword(sword)) {
return baseAmount;
}
double lootingLevel = espadasFarmAPI.getLootingLevel(sword);
double stackBonus = EspadasFarmAPI.getStack(sword);
int finalAmount = (int) (baseAmount * lootingLevel * (1 + stackBonus));
return finalAmount;
}Aplicar bônus Lucky em drops raros
@EventHandler
public void onMobDeath(EntityDeathEvent event) {
Entity killer = event.getEntity().getKiller();
if (!(killer instanceof Player)) return;
Player player = (Player) killer;
ItemStack sword = player.getInventory().getItemInMainHand();
if (espadasFarmAPI.isFarmSword(sword)) {
double luckyBonus = EspadasFarmAPI.getLucky(sword);
// Aumentar chance de drops raros
if (Math.random() < luckyBonus) {
event.getDrops().add(new ItemStack(Material.DIAMOND));
}
}
}Sistema de recompensa com enchantments
public void giveReward(Player player, double baseReward) {
ItemStack sword = player.getInventory().getItemInMainHand();
if (!espadasFarmAPI.isFarmSword(sword)) {
addBalance(player.getName(), baseReward);
return;
}
double doubleRewardBonus = EspadasFarmAPI.getDoubleReward(sword);
double multiplier = 1 + doubleRewardBonus;
double finalReward = baseReward * multiplier;
addBalance(player.getName(), finalReward);
player.sendMessage("Recompensa: " + finalReward);
}Bônus de boss arena
@EventHandler
public void onBossDefeat(BossDefeatEvent event) {
Player player = event.getPlayer();
ItemStack sword = player.getInventory().getItemInMainHand();
if (espadasFarmAPI.isFarmSword(sword)) {
double bossBonusLevel = EspadasFarmAPI.getLuckyBossArena(sword);
if (bossBonusLevel > 0) {
double reward = 5000 * (1 + bossBonusLevel);
addBalance(player.getName(), reward);
player.sendMessage("Bônus de boss: " + reward);
}
}
}Análise completa de enchantments
public void analyzeWeapon(ItemStack sword) {
if (!espadasFarmAPI.isFarmSword(sword)) {
System.out.println("Não é uma espada de farm");
return;
}
System.out.println("═══════════════════════════");
System.out.println("ANÁLISE DE ESPADA");
System.out.println("═══════════════════════════");
System.out.println("Looting: " + espadasFarmAPI.getLootingLevel(sword));
System.out.println("Lucky: " + EspadasFarmAPI.getLucky(sword));
System.out.println("Lucky Boss: " + EspadasFarmAPI.getLuckyBossArena(sword));
System.out.println("Double Reward: " + EspadasFarmAPI.getDoubleReward(sword));
System.out.println("Stack: " + EspadasFarmAPI.getStack(sword));
System.out.println("Divine: " + EspadasFarmAPI.getDivine(sword));
System.out.println("Kill Stack: " + EspadasFarmAPI.getKillStack(sword));
System.out.println("═══════════════════════════");
}Sistema de combo de kills
private Map<String, Integer> killStreaks = new HashMap<>();
@EventHandler
public void onMobKill(EntityDeathEvent event) {
Entity killer = event.getEntity().getKiller();
if (!(killer instanceof Player)) return;
Player player = (Player) killer;
ItemStack sword = player.getInventory().getItemInMainHand();
if (espadasFarmAPI.isFarmSword(sword)) {
double killStackMultiplier = EspadasFarmAPI.getKillStack(sword);
String key = player.getName();
int streak = killStreaks.getOrDefault(key, 0) + 1;
killStreaks.put(key, streak);
double bonusReward = 100 * streak * killStackMultiplier;
addBalance(player.getName(), bonusReward);
if (streak % 10 == 0) {
player.sendMessage("Combo: " + streak + " kills!");
}
}
}Dashboard de espada atual
public void showWeaponStats(Player player) {
ItemStack sword = player.getInventory().getItemInMainHand();
player.sendMessage("═══════════════════════════");
player.sendMessage("STATS DE ESPADA");
player.sendMessage("═══════════════════════════");
if (espadasFarmAPI.isFarmSword(sword)) {
player.sendMessage("Status: ✓ Espada de Farm");
player.sendMessage("Nível: " + espadasFarmAPI.getLootingLevel(sword));
double lucky = EspadasFarmAPI.getLucky(sword);
if (lucky > 0) {
player.sendMessage("Lucky: " + lucky);
}
double doubleReward = EspadasFarmAPI.getDoubleReward(sword);
if (doubleReward > 0) {
player.sendMessage("Double Reward: " + doubleReward);
}
} else {
player.sendMessage("Status: ✗ Sem espada de farm");
}
player.sendMessage("═══════════════════════════");
}