ДОКУМЕНТАЦИЯ

ПЛАГИН · § 011

Настройка автоматической выдачи

Плагин подключается к backend, опрашивает очередь доставок и выполняет нужные команды прямо в консоли сервера. RCON - отправляет команды сразу.

Paper / Spigot 1.13+Java 8+Kotlin · Bukkit API~3 минуты установка

§ 011.01

Что делает плагин

Один JAR, который выдаёт оплаченные покупки на сервере

  1. 01 -

    Раз в N секунд (по умолчанию 10s) плагин ходит на /plugin/deliveries/pending, передаёт список игроков онлайн и спрашивает "есть что выдать?"

  2. 02 -

    Бекенд отдаёт только то, что можно выдать прямо сейчас: товары без требования онлайна и покупки игроков, которые на сервере. Остальное ждёт в очереди на бекенде, плагин выполняет команды через консоль.

  3. 03 -

    На PlayerJoinEvent через 2 секунды после захода игрока опрашивает бекенд ещё раз, чтобы выдать накопившееся без ожидания следующего опроса.

  4. 04 -

    После выдачи рапортует результат в /plugin/deliveries/:id/result - успех или лог каждой команды. Платёж в панели переходит в статус delivered, а если часть команд упала, бекенд позже повторит только их.

§ 011.02

Шаг 01 - Получить API-ключ

Без ключа плагин получит 401/403 от бекенда и ничего не выдаст

  1. 1. Открой админ-панель - Настройки - раздел Плагин.
  2. 2. Нажми "Сгенерировать токен" - появится длинная случайная строка. Скопируй.
  3. 3. Этот токен - секрет. Не коммить его в git, не показывай в стримах.

※ Токен можно перевыпустить в любой момент - старый сразу перестанет работать. Полезно если он утёк.

§ 011.03

Шаг 02 - Скачать JAR

Готовая сборка лежит в Releases на Github

Скачай последний релиз и закинь его в папку plugins/ своего Minecraft-сервера:

SHELL

wget https://github.com/Fresh-Donate/plugin/releases/latest/download/FreshDonate.jar

mv FreshDonate.jar /path/to/server/plugins/

Если предпочитаешь собрать сам:

SHELL

git clone https://github.com/Fresh-Donate/plugin.git

cd plugin

./gradlew shadowJar

# готовый JAR появится в build/libs/

※ Перезапусти сервер после копирования JAR - плагин подгрузится и создаст дефолтный plugins/FreshDonate/config.yml.

§ 011.04

Шаг 03 - Настроить config.yml

Три поля: URL бекенда, API-ключ, интервал опроса

Открой plugins/FreshDonate/config.yml и заполни:

plugins/FreshDonate/config.yml

# FreshDonate Plugin Configuration

api:
  # URL вашего FreshDonate Backend API
  url: "https://api.your-domain.com"

  # API-ключ из админ-панели - Настройки - Плагин
  apiKey: "вставь-сгенерированный-токен"

  # Как часто плагин опрашивает API (в секундах)
  pollInterval: 10

api.url

Полный URL твоего backend, без слэша на конце. На проде - HTTPS-домен из WEBHOOK_BASE_URL в .env бекенда.

api.apiKey

Токен из шага 01. Передаётся в заголовке X-Api-Key с каждым запросом плагина.

api.pollInterval

Секунды между запросами в API. Дефолт 10. Меньше 5 ставить не стоит.

※ После правки конфига выполни /fd reload - не нужно перезапускать сервер.

§ 011.05

Шаг 04 - Проверка подключения

Зайди на сервер с правами оператора и выполни:

MINECRAFT CHAT

/fd test

Возможные ответы:

✓ успешно

Плагин достучался до бекенда и ключ принят. Можно делать пробную покупку.

✗ не удалось

Проверь api.url (должен быть достижим с сервера Minecraft) и api.apiKey (нет ли пробелов / кавычек внутри). Логи плагина - в logs/latest.log.

§ 011.06

Команды плагина

Все требуют права freshdonate.admin (по умолчанию - только OP)

/fd status

Текущий URL бекенда, интервал опроса, сколько доставок ждут офлайн-игроков и кого именно.

/fd test

Проверка подключения к API. Отвечает "успешно" или "не удалось - проверь url и apiKey".

/fd poll

Принудительный опрос API прямо сейчас, не дожидаясь следующего тика. Полезно после ручной правки в панели.

/fd reload

Перечитать config.yml без перезапуска сервера. Применяет новый URL/ключ/интервал.

※ Алиас: /freshdonate работает идентично /fd.

§ 011.07

Переменные в командах товара

Плагин подставит их перед выполнением - пиши шаблоны в админ-панели

В админ-панели у каждого товара есть список команд, которые выполнятся при выдаче. Туда можно вставлять плейсхолдеры:

{player}

Ник игрока-получателя (так, как он указал на витрине магазина).

{amount}

Количество единиц товара с учётом userSelectedCount. Например, если купили "10 алмазов × 3" → 30.

{product}

Название товара из админ-панели - удобно для логов или broadcast-команд.

Пример набора команд для товара "VIP-привилегия + 1000 рублей в игре":

ПРИМЕР

lp user {player} parent set vip

eco give {player} {amount}

broadcast {player} только что купил {product}!

※ Команды выполняются от имени консоли, так что можно использовать любые админские команды любых плагинов.

§ 011.08

Доставка офлайн-игрокам

Что делать если у тебя сервер с регистрацией или если игрок ушёл сразу после покупки

У каждого товара в админке есть флаг forceDelivery:

выключен (по умолчанию)

Если игрок офлайн - покупка ждёт его в очереди на бекенде. Команды выполнятся через 2 секунды после захода. Подходит для команд вроде give и tp, которым нужен игрок онлайн.

включен

Плагин выполнит команды сразу, даже если игрока нет на сервере. Подходит для команд через LuckPerms (lp user X parent set vip), которые работают с офлайн-данными игрока.

§ 011.09

Альтернатива: RCON без плагина

Если не хочется ставить JAR на сервер

Backend умеет выдавать покупки сам через RCON-протокол ванильного Minecraft. Это режим "push" вместо "pull" - backend сам стучится в сервер при оплате, без опроса и плагина.

ПЛАГИН (РЕКОМЕНДУЕТСЯ)

Pull через HTTPS

  • ✓ Не нужно открывать порт RCON наружу
  • ✓ Работает за NAT и firewall
  • ✓ Очередь для офлайн-игроков
  • ✓ Подробные логи каждой команды

RCON

Push через TCP

  • ✓ Не нужен JAR на сервере
  • ✗ Backend должен видеть IP/порт сервера
  • ✗ Сам ванильный RCON слабее по логам
  • ✗ Нужно открывать порт (или VPN)

Включить RCON-режим: в админ-панели - Настройки - RCON - указать хост, порт и пароль. Затем у каждого товара выбрать "Доставка через RCON" вместо "Плагин".

※ Можно совмещать: на одном сервере плагин для онлайн-выдачи, на другом - RCON для редких товаров без офлайн-очереди.

§ 011.10

Что дальше

※ Что-то не выдаётся, плагин ругается, не видит API? Логи плагина - в logs/latest.log сервера, ищи строки с FreshDonate. Если не помогает - пиши в Telegram @zWork1.

FreshDonate