Skip to main content
CakeAuction предоставляет мощный и изолированный программный интерфейс для взаимодействия с экосистемой аукциона. API уже встроено в основной плагин, поэтому вам не нужно устанавливать его отдельно. Более подробную инструкцию по использованию API вы можете найти здесь.

🚀 Подключение

Используйте compileOnly (Gradle) или provided (Maven), чтобы API не попадало в ваш итоговый JAR-файл.

Gradle (Groovy)

repositories {
    maven { url 'https://jitpack.io' }
}

dependencies {
    compileOnly 'com.github.CakesStudio:CakeAuctionAPI:VERSION'
}

Maven

<dependencies>
    <dependency>
        <groupId>com.github.CakesStudio</groupId>
        <artifactId>CakeAuctionAPI</artifactId>
        <version>VERSION</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
(Замените VERSION на актуальную версию, например 1.3.3)
Важно: Не выполняйте релокацию (relocate) библиотек net.kyori (Adventure) или com.tcoded (FoliaLib). Плагин автоматически обрабатывает вызовы этих библиотек.

🧩 Система Аддонов

CakeAuction включает управляемую систему аддонов, которая берет на себя жизненный цикл вашего кода.

1. Метаданные (addon.yml)

Создайте файл addon.yml в папке resources:
name: MyAwesomeAddon
main: com.example.myaddon.MyAddon
version: 1.0.0
api-version: '1.3.3'
folia-supported: true
authors: [ "Developer" ]

2. Реализация (AbstractAddon)

Наследуйте ваш главный класс от AbstractAddon. Это обеспечит автоматическую очистку ресурсов (слушателей, команд, задач) при выключении.
public class MyAddon extends AbstractAddon {
    @Override
    protected void onEnable() {
        saveDefaultConfig();
        registerListener(new MyListener());
        registerCommand(new MyCommand());
    }
}

⚡ Потоки и Folia (Concurrency)

Для корректной работы на Folia, Paper и Spigot используйте встроенные методы планировщика. Это гарантирует безопасность региональных потоков и автоматическую отмену задач при выгрузке аддона.
// Асинхронная задача
runTaskAsync(() -> { /* логика */ });

// Задача с задержкой (регионально-безопасно)
runTaskLaterAsync(() -> { ... }, 20L);

🛠️ Основные Менеджеры API

Доступ к API осуществляется через CakeAuctionAPI.getApi().

⚖️ Аукцион (IAuctionManager)

Управление лотами, поиск и налоги.
IAuctionManager auction = api.getAuctionManager();

// Поиск: запрос, категория, тип сортировки
Collection<IAuctionItem> results = auction.search("Diamond", "Resources", "price_asc");

// Создание лота
api.createAuction(player, itemStack, 500.0, 3600L, false);

🆔 Идентификаторы (IUUIDManager)

Генерация UUID v7 (упорядоченных по времени) и коротких Base62 ID.
IUUIDManager uuid = api.getUUIDManager();
UUID random = uuid.random();
String shortId = uuid.toShortId(random); // напр. "7x2K9mPq1z"

📦 Предметы (IItemManager)

Сериализация в Base64 и создание уникальных цифровых подписей для защиты от дюпов.
IItemManager itemManager = api.getItemManager();
String base64 = itemManager.serialize(itemStack);
String signature = itemManager.getSignature(itemStack);

👤 Данные игроков (IUserManager)

Статистика, лимиты, история и активные абонементы (Passes).
IUserManager userManager = api.getUserManager();
if (userManager.isLimitReached(player)) {
    player.sendMessage("Лимит слотов достигнут!");
}

🎭 Кастомные действия (IActionManager)

Регистрация собственных тегов действий, которые можно использовать в любых конфигах.
// Регистрация тега [GIVE_REWARD]
api.getActionManager().registerAction("GIVE_REWARD", (player, loc, text) -> {
    player.sendMessage("Награда: " + text);
});

📅 Система Событий (Events)

СобытиеОписаниеОтменяемое
AuctionItemBuyProcessEventПеред покупкой лота
AuctionItemSellProcessEventПеред выставлением на продажу
AuctionItemTakeProcessEventПеред снятием лота продавцом
AuctionItemBuyEventПосле успешной покупки
AuctionItemSellEventПосле создания лота
AuctionItemAutoBuyEventПри выкупе сервером

💰 Экономика и провайдеры

Вы можете зарегистрировать собственный провайдер валюты:
api.getEconomyManager().registerProvider(new IEconomyProvider() {
    @Override public String getName() { return "gems"; }
    @Override public double getBalance(OfflinePlayer p) { ... }
    // ... остальные методы
});