LogoyStore

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:

  • true se é uma espada de farm, false caso 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("═══════════════════════════");
}

Nesta página