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

GitHub Репозиторий

Исходный код и последние релизы API.

JitPack

Подключение зависимости в ваш проект.

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

Используйте 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.5.0)
Важно: Основное ядро CakeAuction выполняет релокацию библиотек net.kyori (Adventure) и com.tcoded (FoliaLib). Чтобы избежать ошибки NoSuchMethodError, ваш аддон ОБЯЗАН выполнить релокацию этих библиотек в тот же пакет:
tasks.shadowJar {
    relocate 'net.kyori', 'dev.cakestudio.cakeauction.libs.kyori'
    relocate 'com.tcoded.folialib', 'dev.cakestudio.cakeauction.libs.folialib'
}

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

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

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

Создайте файл addon.yml в папке resources:
name: MyAwesomeAddon
main: com.example.myaddon.MyAddon
version: 1.0.0
api-version: '1.5.0'
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);

// Динамическая регистрация категории с предикатом-фильтром
ItemStack icon = new ItemStack(Material.GOLDEN_APPLE);
auction.registerCategory(
    "mythic_gear",
    "<gradient:#ffd700:#ff4500>Mythic Gear</gradient>",
    icon,
    itemStack -> {
        if (itemStack == null || !itemStack.hasItemMeta()) return false;
        return itemStack.getItemMeta().getDisplayName().contains("Mythic");
    }
);

// Динамическая регистрация кастомной формулы сортировки
auction.registerSortingType(
    "seller_name_length",
    "<aqua>Seller Name Length</aqua>",
    Comparator.comparingInt(item -> item.getSellerName().length())
);

🆔 Идентификаторы (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("Лимит слотов достигнут!");
}

🔌 Интеграция предметов (IHookManager)

Регистрация кастомных провайдеров предметов (например, для Oraxen, ItemsAdder или самописных систем) для динамического разрешения идентификаторов предметов:
IHookManager hooks = api.getHookManager();

hooks.registerProvider(new IItemHookProvider() {
    @Override
    public @Nullable ItemStack getItem(@NonNull String id) {
        if (id.equalsIgnoreCase("ruby_gem")) {
            return new ItemStack(Material.EMERALD); // ваш кастомный предмет
        }
        return null;
    }

    @Override
    public @Nullable String getItemId(@NonNull ItemStack item) {
        if (item.getType() == Material.EMERALD) {
            return "ruby_gem";
        }
        return null;
    }

    @Override
    public @NonNull String getPrefix() {
        return "myprovider"; // Будет обрабатывать запросы типа "myprovider:ruby_gem"
    }
});

🎭 Кастомные действия (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) { ... }
    // ... остальные методы
});