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á comprandoString owner- Nome do dono da lojaString provider- Nome do provedor/economiadouble amount- Quantidade de itens compradosdouble priceBuyer- Preço pago pelo compradordouble priceOwner- Preço recebido pelo donoItemStack itemStack- Item sendo comprado
Métodos getter:
getPlayer()- Obtém o jogadorgetOwner()- Obtém o dono da lojagetProvider()- Obtém o provedor/economiagetAmount()- Obtém a quantidadegetPriceBuyer()- Obtém o preço pago pelo compradorgetPriceOwner()- Obtém o preço recebido pelo donogetItemStack()- Obtém o item
Métodos setter:
setAmount(double)- Define a quantidadesetPriceBuyer(double)- Define o preço do compradorsetPriceOwner(double)- Define o preço do dono
Cancelamento:
isCancelled()- Verifica se o evento está canceladosetCancelled(boolean)- Cancela ou permite a compra
ShopSellEvent
Disparado quando um jogador vende itens para uma loja.
Propriedades:
Player player- Jogador que está vendendoString owner- Nome do dono da lojaString provider- Nome do provedor/economiadouble amount- Quantidade de itens vendidosdouble priceSeller- Preço recebido pelo vendedordouble priceOwner- Preço pago pelo donoItemStack itemStack- Item sendo vendido
Métodos getter:
getPlayer()- Obtém o jogadorgetOwner()- Obtém o dono da lojagetProvider()- Obtém o provedor/economiagetAmount()- Obtém a quantidadegetPriceSeller()- Obtém o preço recebido pelo vendedorgetPriceOwner()- Obtém o preço pago pelo donogetItemStack()- Obtém o item
Métodos setter:
setAmount(double)- Define a quantidadesetPriceSeller(double)- Define o preço do vendedorsetPriceOwner(double)- Define o preço do dono
Cancelamento:
isCancelled()- Verifica se o evento está canceladosetCancelled(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!");
}
}