Skip to main content
← All Guides
Plugin Config · 5 min read

BetonQuest, Conversations System

Set up BetonQuest's conversation system with dialogue trees, conditions, player choices, and NPC integration for immersive Minecraft server quests.

What Makes BetonQuest Conversations Special?

Most Minecraft quest plugins offer simple accept/decline interactions. The betonquest conversations system goes far beyond that, providing full branching dialogue trees where player choices affect which options appear next, what quests unlock, and how NPCs respond in future interactions. It is the closest thing to an RPG dialogue engine available for Minecraft servers.

BetonQuest is free, open-source, and integrates with Citizens for NPC assignment, Vault for economy interactions, and dozens of other plugins through its condition and event system. If you want your server to tell stories, the betonquest conversations system is the tool to learn.

Installation and Structure

Download BetonQuest from SpigotMC, drop it in plugins/, and restart. The plugin creates a package-based file structure:

plugins/BetonQuest/
├── default/
│   ├── main.yml
│   ├── conversations/
│   │   └── innkeeper.yml
│   ├── events.yml
│   ├── conditions.yml
│   ├── objectives.yml
│   └── journal.yml

Each "package" (like default/) is a self-contained quest line. Conversations live in the conversations/ subfolder as individual YAML files.

Writing Your First Conversation

Create conversations/blacksmith.yml:

conversations:
  blacksmith:
    quester: "&6Blacksmith Hank"
    first: greeting
    NPC_options:
      greeting:
        text: "Welcome, traveler. Need a blade sharpened or a new one forged?"
        pointer: sharpen,forge,nevermind
      sharpen_response:
        text: "Hand it over. This will cost you 100 coins."
        events: take_money,sharpen_sword
        pointer: thanks
      forge_response:
        text: "I can forge you a diamond sword for 500 coins and 3 iron ingots."
        conditions: has_money_500,has_iron
        events: take_forge_payment,give_diamond_sword
        pointer: thanks
      forge_deny:
        text: "You do not have the materials. Come back when you do."
      thanks_response:
        text: "Pleasure doing business. Come again."
    player_options:
      sharpen:
        text: "Sharpen my sword, please."
        pointer: sharpen_response
      forge:
        text: "I want a new sword forged."
        pointer: forge_response,forge_deny
      nevermind:
        text: "Just browsing. Goodbye."
      thanks:
        text: "Thank you, Hank."
        pointer: thanks_response

The first key sets the opening NPC line. NPC_options are what the NPC says. player_options are clickable choices the player sees in chat. Pointers link options together to form the dialogue tree.

Conditions and Events

The betonquest conversations system uses conditions to show or hide dialogue options and events to trigger actions. Define these in your package's conditions.yml and events.yml:

# conditions.yml
has_money_500: "money 500"
has_iron: "item iron_ingot:3"

# events.yml
take_money: "money -100"
take_forge_payment: "money -500"
sharpen_sword: "command /effect give %player% strength 600 1"
give_diamond_sword: "give diamond_sword:1"

Conditions are checked in real time when the player reaches a dialogue node. If has_money_500 fails, the forge option shows the denial response instead. Events fire when the player selects an option that triggers them.

Linking Conversations to Citizens NPCs

Assign your conversation to a Citizens NPC by adding the NPC's ID to main.yml:

npcs:
  "5": blacksmith

This maps Citizens NPC #5 to the blacksmith conversation. Right-clicking the NPC opens the dialogue. Apply a custom skin to make the blacksmith look the part, and set up waypoints so the NPC walks between the forge and the anvil.

Advanced Conversation Features

The betonquest conversations system supports variables inside dialogue text:

      greeting:
        text: "Welcome back, %player%. You have visited me $quest_visits$ times."

Variables pull from BetonQuest's internal tracking or PlaceholderAPI. You can also use the random pointer to pick a random NPC response, making conversations feel less scripted on repeat visits.

Conversation Display Modes

BetonQuest offers multiple ways to display conversations: chat-based (default), menu-based (chest GUI), or slowpoke (typewriter effect in chat). Set the default in config.yml:

default_conversation_IO: menu

The menu IO shows NPC text at the top and player choices as clickable items in a chest GUI. This feels more polished than raw chat text and prevents player messages from scrolling the dialogue off screen. Experiment with both to see which your community prefers.

See these configs live: Astroworld MC, IP play.astroworldmc.com, Java + Bedrock.

Related Tools & Resources

🔧

Minecraft Tools

Calculators, generators & server tools

🧱

Item Database

Browse all Minecraft items, stats & recipes

⚒️

Crafting Recipes

Visual crafting guides for every recipe