Pterohost docs

Квесты на сервере Minecraft: BetonQuest

Полный гайд по BetonQuest: установка, структура пакетов, диалоги NPC, цепочки квестов и награды на сервере Minecraft.

Кратко: BetonQuest - лучший плагин для создания квестов на серверах Minecraft с полноценными диалогами, ветвлением и условиями. Установите плагин, создайте пакет с YAML-конфигами, свяжите с NPC через Citizens - и квестовая система заработает без программирования.

Квесты на сервере Minecraft: BetonQuest

BetonQuest - это один из самых функциональных плагинов для квестов в экосистеме Minecraft Java Edition. В отличие от простых “убей X мобов - получи награду” решений, BetonQuest позволяет строить полноценные RPG-сценарии: разветвлённые диалоги с NPC, многоэтапные задания, условные ветки, дневник заданий, глобальные переменные и интеграцию с десятками других плагинов. По состоянию на 2026 год актуальна ветка BetonQuest 2.1.x, которая работает на Paper/Spigot от Minecraft 1.19 и выше. Плагин полностью бесплатен и открыт на GitHub. Если вы хотите сделать сервер с живым миром, где игроки берут задания у NPC, проходят цепочки квестов и получают уникальные награды - BetonQuest даёт всё необходимое для этого.

Pterohost - игровой хостинг с NVMe-дисками, DDoS-защитой и поддержкой 24/7: идеальная база для сервера с тяжёлыми плагинами вроде BetonQuest. Промокод 4START даёт -20% на первый заказ. Заказать Minecraft хостинг

Установка BetonQuest

BetonQuest распространяется как .jar-файл. Для полноценной работы потребуются зависимости.

Что нужно:

  • Paper или Spigot 1.19+ (Paper предпочтительнее - BetonQuest активно использует его API)
  • Java 17 или выше
  • Citizens 2.x - для NPC-диалогов (рекомендуется)
  • Vault + любой экономический плагин - для денежных наград

Шаги установки:

  1. Скачайте BetonQuest-2.x.x.jar с официального сайта betonquest.org или с GitHub Releases.
  2. Скачайте Citizens.jar с dev.bukkit.org или SpigotMC.
  3. Поместите оба .jar в папку plugins/ вашего сервера.
  4. Перезапустите сервер.
  5. BetonQuest создаст папку plugins/BetonQuest/ с конфигами и директорией QuestPackages/.

После первого запуска проверьте лог - плагин сообщит об успешной загрузке и о найденных интеграциях (Vault, Citizens, EssentialsX и другие).

[BetonQuest] Hooking into Citizens
[BetonQuest] Hooking into Vault
[BetonQuest] Loaded 1 packages

Если Citizens не подключился - проверьте, что Citizens.jar присутствует в plugins/ и загрузился без ошибок до BetonQuest.

Структура пакетов

Вся логика квестов в BetonQuest организована в пакеты (packages). Каждый пакет - это папка внутри plugins/BetonQuest/QuestPackages/. Пакеты независимы и могут ссылаться друг на друга.

Типичная структура пакета:

QuestPackages/
  MainQuests/
    package.yml          # конфиг пакета: название, включение/выключение
    events.yml           # события (что происходит)
    conditions.yml       # условия (когда происходит)
    objectives.yml       # цели (что должен сделать игрок)
    conversations/
      village_elder.yml  # диалог с NPC "Старейшина деревни"
    items.yml            # предметы для квестов
    journal.yml          # записи в журнале игрока
    messages.yml         # сообщения игроку

package.yml - главный файл пакета:

package:
  enabled: true
  version: "1.0"

Все остальные файлы можно называть произвольно - BetonQuest загружает весь пакет целиком. Разделение на events.yml, conditions.yml и т.д. - удобное соглашение, но не обязательное. Можно держать всё в одном файле, если пакет небольшой.

События, условия и цели

Три кита BetonQuest:

События (Events) - действия, которые выполняются в ответ на что-то. Выдать предмет, показать сообщение, дать опыт, открыть следующую часть квеста.

# events.yml
give_sword:
  type: giveitem
  item: iron_sword
  amount: 1

send_start_message:
  type: notify
  message: "&aЗадание получено! Найдите пещеру на севере."

give_gold:
  type: money
  amount: 300

add_quest_point:
  type: point
  category: main_quest
  count: 1

Условия (Conditions) - проверки перед выполнением события или в диалоге. Есть ли у игрока предмет, достаточно ли у него уровня, выполнено ли предыдущее задание.

# conditions.yml
has_wood:
  type: item
  item: oak_log
  amount: 20

quest_not_started:
  type: tag
  tag: quest_started
  inverted: true

player_level_10:
  type: experience
  level: 10

Цели (Objectives) - то, что игрок должен сделать. Убить моба, добыть ресурс, добраться до точки, поговорить с NPC.

# objectives.yml
kill_zombies:
  type: mobkill
  mob: ZOMBIE
  amount: 10
  events: quest_step_2_start
  conditions: on_main_quest

collect_iron:
  type: craft
  item: iron_ingot
  amount: 5
  events: craft_done_notify

reach_cave:
  type: location
  loc: 450;64;-320;world
  range: 15
  events: cave_reached_event

Связь между элементами: события запускают другие события или завершают цели; условия фильтруют, когда что-то работает; цели следят за действиями игрока и при выполнении запускают события.

Диалоги NPC через Citizens

Самая сильная сторона BetonQuest - разветвлённые диалоги. Создаётся файл в папке conversations/ пакета.

Пример диалога conversations/village_elder.yml:

conversations:
  village_elder:
    quester: "Старейшина"
    first:
      - start_condition
    stop: "false"
    NPC_options:
      start_condition:
        text: "&7Путник, ты пришёл вовремя. Нашу деревню осадили нежить. Поможешь?"
        conditions: quest_not_started
        pointer: yes_or_no
      quest_already_active:
        text: "&7Ты уже занимаешься нашей проблемой. Возвращайся, когда убьёшь 10 зомби."
        conditions: quest_started, not_quest_done
      quest_done:
        text: "&6Ты сделал это! Держи награду, герой."
        events: give_reward, complete_quest
    player_options:
      yes_or_no:
        text: "Конечно помогу!"
        events: start_quest_event
        pointer: quest_accepted_reply
      decline:
        text: "Извини, мне некогда."
        pointer: farewell
      quest_accepted_reply:
        text: "Хорошо, иду разбираться."
      farewell:
        text: "Удачи тебе."

Чтобы привязать диалог к NPC в Citizens:

  1. Выберите нужного NPC в игре или создайте нового: /npc create Старейшина
  2. Запомните ID NPC (показывается командой /npc list)
  3. Назначьте диалог: /q npc assign village_elder MainQuests (где MainQuests - имя пакета)

После этого правый клик по NPC открывает диалог BetonQuest.

Опции диалога

В диалоге есть два типа узлов:

  • NPC_options - реплики NPC, игрок их видит и выбирает следующий шаг
  • player_options - ответы игрока, видны как кнопки выбора

Каждый узел может иметь:

  • text - текст реплики (поддерживает цветовые коды &)
  • conditions - условия отображения (через запятую = AND)
  • events - события при выборе
  • pointer - следующий узел(ы) диалога

Журнал заданий

BetonQuest имеет встроенный журнал - книгу, где игрок видит активные и завершённые квесты. Записи добавляются через событие journal.

В events.yml:

add_journal_entry:
  type: journal
  action: add
  entry: quest_cave_entry

В journal.yml (или в основном файле пакета):

journal:
  quest_cave_entry: "&fЗадание: уничтожить нежить\n&7Старейшина попросил меня убить 10 зомби\nу северных ворот деревни. Нужно спешить."

Игрок открывает журнал командой /j (по умолчанию) или через бэкпак (инвентарь квестов). Можно настроить отображение в главном меню сервера через интеграцию с плагинами GUI.

Бэкпак (Backpack)

BetonQuest предоставляет специальный GUI-инвентарь (/q или /backpack), где отображаются:

  • Активные квесты и их прогресс
  • Журнал с записями
  • Специальные квестовые предметы

Настраивается в config.yml плагина: default_package указывает, какой пакет открывается по умолчанию.

Награды

BetonQuest поддерживает разнообразные типы наград через систему событий.

Предметы:

give_reward_items:
  type: giveitem
  item: diamond_sword{name:Клинок_Тьмы, lore:Награда_за_отвагу}
  amount: 1

Деньги (через Vault):

give_gold_reward:
  type: money
  amount: 500

Опыт:

give_exp:
  type: experience
  amount: 10
  level: true

Очки квеста (внутренняя валюта):

quest_points_reward:
  type: point
  category: reputation
  count: 5

Запуск команды:

run_reward_command:
  type: command
  commands:
    - "give %player% golden_apple 3"
    - "say Игрок %player% завершил квест!"

Составная награда - несколько событий сразу:

full_reward:
  type: folder
  events: give_gold_reward, give_exp, quest_points_reward, add_journal_complete_entry

Тип folder позволяет объединить несколько событий в одно - удобно, когда нужно выдать всё сразу при завершении квеста.

Пример цепочки квестов

Разберём полную цепочку: получить задание у NPC -> выполнить несколько целей -> сдать квест и получить награду.

Сценарий: Квест “Угроза из тьмы”. Три этапа: убить 10 зомби, найти пещеру, поговорить с NPC для завершения.

events.yml:

# Запуск квеста
quest_start:
  type: folder
  events: set_tag_started, start_objective_kill, notify_quest_start, add_journal_start

set_tag_started:
  type: tag
  tag: quest_darkness_started
  action: add

notify_quest_start:
  type: notify
  message: "&6[Квест] &fУгроза из тьмы начат! Убейте 10 зомби у деревни."

add_journal_start:
  type: journal
  action: add
  entry: quest_darkness_start

# Переход к шагу 2 (найти пещеру)
step2_start:
  type: folder
  events: start_objective_cave, notify_step2, add_journal_step2

notify_step2:
  type: notify
  message: "&6[Квест] &fОтлично! Теперь найдите пещеру на севере (450, 64, -320)."

add_journal_step2:
  type: journal
  action: add
  entry: quest_darkness_step2

# Завершение квеста
quest_complete:
  type: folder
  events: set_tag_done, remove_tag_started, give_final_reward, notify_complete, add_journal_done

set_tag_done:
  type: tag
  tag: quest_darkness_done
  action: add

remove_tag_started:
  type: tag
  tag: quest_darkness_started
  action: remove

give_final_reward:
  type: folder
  events: reward_money, reward_exp, reward_item

reward_money:
  type: money
  amount: 500

reward_exp:
  type: experience
  amount: 5
  level: true

reward_item:
  type: giveitem
  item: iron_sword
  amount: 1

notify_complete:
  type: notify
  message: "&a[Квест завершён] &fУгроза из тьмы! Получено: 500 монет, 5 уровней, железный меч."

add_journal_done:
  type: journal
  action: add
  entry: quest_darkness_done

start_objective_kill:
  type: objective
  objective: kill_quest_zombies

start_objective_cave:
  type: objective
  objective: reach_north_cave

conditions.yml:

quest_not_started:
  type: tag
  tag: quest_darkness_started
  inverted: true

quest_started:
  type: tag
  tag: quest_darkness_started

quest_not_done:
  type: tag
  tag: quest_darkness_done
  inverted: true

quest_done:
  type: tag
  tag: quest_darkness_done

on_step2:
  type: tag
  tag: quest_darkness_step2

step2_not_done:
  type: tag
  tag: quest_darkness_step2
  inverted: true

objectives.yml:

kill_quest_zombies:
  type: mobkill
  mob: ZOMBIE
  amount: 10
  notify: "&7Зомби уничтожено: {amount}/10"
  events: step2_start
  conditions: quest_started

reach_north_cave:
  type: location
  loc: 450;64;-320;world
  range: 15
  events: set_step2_tag, add_journal_cave_reached
  conditions: quest_started

conversations/elder.yml (сокращённый вариант):

conversations:
  elder:
    quester: "Старейшина"
    first:
      - offer_quest
      - in_progress_step1
      - in_progress_step2
      - can_complete
    NPC_options:
      offer_quest:
        text: "&7Нам нужна помощь. Нежить атакует деревню по ночам. Возьмёшься?"
        conditions: quest_not_started, quest_not_done
        pointer: accept_quest
      in_progress_step1:
        text: "&7Как дела с зомби? Продолжай, мы в тебя верим."
        conditions: quest_started, step2_not_done
      in_progress_step2:
        text: "&7Ты нашёл пещеру? Разберись с источником нежити!"
        conditions: quest_started, on_step2
      can_complete:
        text: "&6Ты сделал невероятное! Вот твоя награда, герой деревни."
        conditions: quest_done
        events: quest_complete
    player_options:
      accept_quest:
        text: "Помогу вашей деревне!"
        events: quest_start
        pointer: quest_accepted
      quest_accepted:
        text: "Считайте дело сделанным."

Эта цепочка показывает ключевой паттерн: теги (tag) используются как флаги состояния квеста, условия фильтруют нужные ветки диалога, события-папки (folder) группируют действия.

Интеграции и расширения

BetonQuest 2.x имеет встроенные интеграции с популярными плагинами:

ПлагинЧто даёт
Citizens 2NPC с диалогами, квестовые персонажи
VaultДенежные награды и условия на баланс
EssentialsXКоманды /back, homes как условия
MythicMobsКвестовые боссы, моб с кастомными дропами
WorldGuardУсловия на регион (игрок в зоне)
PlaceholderAPIПлейсхолдеры в тексте квестов
SkriptКастомные события через скрипты
LuckPermsУсловия на права/группу игрока

Для подключения интеграции достаточно установить нужный плагин - BetonQuest обнаружит его автоматически при загрузке сервера.

Советы по оптимизации и отладке

Отладка конкретного игрока:

/q debug <player>

Показывает активные цели, теги и очки квестов для игрока. Незаменимо при тестировании.

Перезагрузка без рестарта:

/q reload

Перезагружает все пакеты без перезапуска сервера. Используйте во время разработки после каждого изменения YAML.

Проверка синтаксиса: BetonQuest при перезагрузке выводит в консоль все ошибки конфигурации с указанием файла и строки. Всегда смотрите лог после /q reload.

Производительность: Если на сервере много активных игроков с квестами, тяжелее всего работают цели типа location с маленьким range (частые проверки) и mobkill без условий (слушают все убийства). Используйте условия, чтобы сузить область срабатывания.

Резервные копии: Перед крупными изменениями в пакетах делайте копию папки QuestPackages/. Также данные игроков хранятся в plugins/BetonQuest/playerdata/ - эту папку тоже включайте в бэкапы.

Связанные материалы

Для комфортной работы с BetonQuest важна надёжная инфраструктура сервера. Читайте как настроить бэкапы Minecraft-сервера, чтобы не потерять данные игроков и прогресс квестов. Если планируете расширять функционал, смотрите обзор лучших плагинов для сервера. Для управления игроками и командами пригодится гайд по EssentialsX.

Заключение

BetonQuest - профессиональный инструмент для создания квестовых систем на Minecraft-серверах. С его помощью можно реализовать полноценные RPG-сценарии: разветвлённые диалоги через Citizens, многоэтапные цепочки заданий, условные ветки, журнал и разнообразные награды - всё через YAML без программирования. Главный принцип - события, условия и цели: освоив их взаимодействие, вы сможете создавать квесты любой сложности. Начните с простой линейной цепочки, затем добавляйте ветвление и интеграции с другими плагинами. Документация на betonquest.org подробная и актуально поддерживается командой разработчиков.

Pterohost - игровой хостинг с быстрыми NVMe-дисками, защитой от DDoS и живой поддержкой: ваш сервер с квестами BetonQuest будет работать стабильно и без лагов. Промокод 4START даёт -20% на первый заказ. Заказать Minecraft хостинг