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.