LogoyStore

API

A API fornece eventos públicos para desenvolvedores integrarem seus plugins ao sistema de lojas de baú do yChestShop, permitindo monitorar e manipular compras e vendas.

Obtendo acesso aos eventos

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

Exemplo:

@EventHandler
public void onShopBuy(ShopBuyEvent event) {
    // Manipular evento de compra
}

@EventHandler
public void onShopSell(ShopSellEvent event) {
    // Manipular evento de venda
}

Eventos disponíveis

ShopBuyEvent

Disparado quando um jogador compra itens de uma loja.

Propriedades:

  • Player player - Jogador que está comprando
  • String owner - Nome do dono da loja
  • String provider - Nome do provedor/economia
  • double amount - Quantidade de itens comprados
  • double priceBuyer - Preço pago pelo comprador
  • double priceOwner - Preço recebido pelo dono
  • ItemStack itemStack - Item sendo comprado

Métodos getter:

  • getPlayer() - Obtém o jogador
  • getOwner() - Obtém o dono da loja
  • getProvider() - Obtém o provedor/economia
  • getAmount() - Obtém a quantidade
  • getPriceBuyer() - Obtém o preço pago pelo comprador
  • getPriceOwner() - Obtém o preço recebido pelo dono
  • getItemStack() - Obtém o item

Métodos setter:

  • setAmount(double) - Define a quantidade
  • setPriceBuyer(double) - Define o preço do comprador
  • setPriceOwner(double) - Define o preço do dono

Cancelamento:

  • isCancelled() - Verifica se o evento está cancelado
  • setCancelled(boolean) - Cancela ou permite a compra

ShopSellEvent

Disparado quando um jogador vende itens para uma loja.

Propriedades:

  • Player player - Jogador que está vendendo
  • String owner - Nome do dono da loja
  • String provider - Nome do provedor/economia
  • double amount - Quantidade de itens vendidos
  • double priceSeller - Preço recebido pelo vendedor
  • double priceOwner - Preço pago pelo dono
  • ItemStack itemStack - Item sendo vendido

Métodos getter:

  • getPlayer() - Obtém o jogador
  • getOwner() - Obtém o dono da loja
  • getProvider() - Obtém o provedor/economia
  • getAmount() - Obtém a quantidade
  • getPriceSeller() - Obtém o preço recebido pelo vendedor
  • getPriceOwner() - Obtém o preço pago pelo dono
  • getItemStack() - Obtém o item

Métodos setter:

  • setAmount(double) - Define a quantidade
  • setPriceSeller(double) - Define o preço do vendedor
  • setPriceOwner(double) - Define o preço do dono

Cancelamento:

  • isCancelled() - Verifica se o evento está cancelado
  • setCancelled(boolean) - Cancela ou permite a venda

Diferenças entre compra e venda

ShopBuyEvent

  • Comprador paga priceBuyer
  • Dono recebe priceOwner
  • Geralmente priceBuyer >= priceOwner (diferença é comissão/taxa)

ShopSellEvent

  • Vendedor recebe priceSeller
  • Dono paga priceOwner
  • Geralmente priceOwner >= priceSeller (diferença é comissão/taxa)

Boas práticas

  • Sempre verifique o item com getItemStack() antes de manipular
  • Cuidado ao modificar preços - pode gerar exploit
  • Use cancelamento com moderação para não quebrar a economia
  • Registre atividades suspeitas em compras/vendas de alto valor
  • Evite manipulações frequentes em eventos de alta frequência

Exemplos de uso

Monitorar compras de itens raros

@EventHandler
public void onShopBuy(ShopBuyEvent event) {
    ItemStack item = event.getItemStack();
    
    if (item.getType() == Material.DIAMOND_BLOCK) {
        Player player = event.getPlayer();
        player.sendMessage("Compra de diamante detectada!");
        // Log, notificação, etc.
    }
}

Aplicar taxa extra em transações

@EventHandler
public void onShopBuy(ShopBuyEvent event) {
    double originalPrice = event.getPriceBuyer();
    double taxAmount = originalPrice * 0.10; // 10% de taxa
    
    event.setPriceBuyer(originalPrice + taxAmount);
    event.getPlayer().sendMessage("Taxa de 10% aplicada!");
}

Bloquear vendas abusivas

@EventHandler
public void onShopSell(ShopSellEvent event) {
    if (event.getAmount() > 1000) {
        event.setCancelled(true);
        event.getPlayer().sendMessage("Quantidade máxima de venda é 1000!");
    }
}

Sistema de log de transações

@EventHandler
public void onShopBuy(ShopBuyEvent event) {
    Player player = event.getPlayer();
    String owner = event.getOwner();
    double amount = event.getAmount();
    double price = event.getPriceBuyer();
    
    logTransaction("BUY", player.getName(), owner, amount, price);
}

@EventHandler
public void onShopSell(ShopSellEvent event) {
    Player player = event.getPlayer();
    String owner = event.getOwner();
    double amount = event.getAmount();
    double price = event.getPriceSeller();
    
    logTransaction("SELL", player.getName(), owner, amount, price);
}

private void logTransaction(String type, String player, String shop, double amount, double price) {
    // Salvar em arquivo, banco de dados, etc.
}

Notificar dono de loja sobre transações

@EventHandler
public void onShopBuy(ShopBuyEvent event) {
    Player player = event.getPlayer();
    String owner = event.getOwner();
    
    Player ownerPlayer = Bukkit.getPlayer(owner);
    if (ownerPlayer != null && ownerPlayer.isOnline()) {
        ownerPlayer.sendMessage(player.getName() + " comprou " + 
            event.getAmount() + "x de sua loja por " + 
            event.getPriceBuyer());
    }
}

Aplicar bônus de experiência em compras

@EventHandler
public void onShopBuy(ShopBuyEvent event) {
    Player player = event.getPlayer();
    double priceAmount = event.getPriceBuyer();
    
    // A cada 100 moedas gastas, ganha 1 exp
    int expGain = (int) (priceAmount / 100);
    player.giveExp(expGain);
    
    if (expGain > 0) {
        player.sendMessage("Ganhou " + expGain + " experiência!");
    }
}

Verificar preços anormais

@EventHandler
public void onShopBuy(ShopBuyEvent event) {
    double priceBuyer = event.getPriceBuyer();
    double priceOwner = event.getPriceOwner();
    
    // Detectar se há uma diferença suspeita
    double difference = priceBuyer - priceOwner;
    double percentageDifference = (difference / priceBuyer) * 100;
    
    if (percentageDifference > 50) {
        Bukkit.getLogger().warning("Transação suspeita detectada!");
    }
}

Nesta página