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) { ... }
// ... остальные методы
});