DialogMaster — Client-Rendered Dialog Menus for Paper & Folia
A test server is available on request in our Discord.
A test server is available on request in our Discord.
DialogMaster replaces traditional chest-GUI menus with native, client-rendered Dialog screens, using Minecraft's Dialog Packet Protocol (1.21.8+). Menus render directly on the player's client — no resource packs, no inventory click handling, and none of the desync issues that come with container-based GUIs.
Features
Native client-rendered screens
Info boxes, purchase prompts, selector grids, and server-link hubs render using the client's built-in dialog protocol. No client-side mods required.
No inventory-based lag
Because menus aren't backed by inventories, there's no click desync, drag exploits, or the server load that comes with opening chest GUIs.
Item icons and player heads without resource packs
Use
<item:material_name> to embed item sprites in labels, tooltips, and lists, and <head:playerName> to display a player's skin head — both render client-side from the vanilla item atlas.Native input fields
Menus can include:
- Text fields — character limits, placeholders, multi-line support (report reasons, home names, etc.)
- Number sliders — configurable min/max, step size, and display format
- Boolean toggles
- Single-option dropdowns
DeluxeMenus-style requirement logic
view-requirements control button visibility and click-requirements gate actions, both evaluated against PlaceholderAPI using ==, !=, >, >=, <, <=, and contains.Priority layout groups
Define multiple layouts for the same button slot. Requirements are checked top-to-bottom and the first valid layout is rendered — useful for kit cooldowns, rank-gated buttons, etc.
Dynamic lists and templates
Generate buttons on the fly for homes, online players, or friend lists, using either simple modes or custom templates with placeholders like
$(home_name) or $(player_name).Asynchronous leaderboards
Paginated leaderboards for Vault balances or statistics (kills, blocks mined, playtime), backed by off-thread queries so leaderboard lookups don't affect TPS.
Pause menu and quick-actions integration
Register custom buttons into the client's ESC pause screen and quick-actions bar at startup, so players can reach your main menu without a command.
Chat hovers and item sharing
Adventure-based join/quit messages with hoverable stat tooltips, plus a
/share command that lets players post their held item to chat with a full tooltip preview.Folia and Paper native
All I/O, database access, and leaderboard queries are asynchronous and use region-aware schedulers, with no assumptions about single-threaded ticking.
Setup
1. Place
DialogMaster.jar in your plugins/ folder.2. Install PlaceholderAPI (Vault and EssentialsX are optional, for economy and homes support).
3. Restart the server, then edit menus under
plugins/DialogMaster/menus/ and run /ydm reload to apply changes.PlaceholderAPI Placeholders
Leaderboard menus read directly from ajLeaderboards:
%ajlb_lb_vault_eco_balance_<rank>_alltime_name% — player name at balance rank N
%ajlb_lb_vault_eco_balance_<rank>_alltime_value% — formatted balance at rank N
%ajlb_lb_statistic_player_kills_<rank>_alltime_name% — player name at kills rank N
%ajlb_lb_statistic_player_kills_<rank>_alltime_value% — formatted kill count at rank N
Commands & Permissions
Player
/menu — opens the main navigation menu (dialogmaster.open)/links — opens the server links menu (dialogmaster.open)/share — shares the held item to chat with hover inspect (dialogmaster.share)Admin
/ydm reload — reloads config, menus, and caches (dialogmaster.admin)/ydm debug — toggles console debug logging (dialogmaster.admin)/ydm open <menu> <player> — opens a specific menu for a player (dialogmaster.admin)/ydm close <player> — closes a player's open dialog (dialogmaster.admin)Example Configuration
A main hub menu using a two-column grid, item icons, and several button action types (menu navigation, URL, command, clipboard copy, chat suggestion):
YAML:
# File: plugins/DialogMaster/menus/main-menu.yml
main-menu:
title: "<blue><bold>Yowsef Studio"
external-title: "<gold>Main Menu"
type: multiAction
columns: 2
command: "/menu"
body:
- type: plain-message
content: "<gray>Welcome, <aqua>%player_name%</aqua>!"
- type: plain-message
content: "<gray>Balance: <gold>$%vault_eco_balance_formatted%"
buttons:
- label: "<item:oak_door> <green>Homes"
tooltip: "<gray>Manage your homes"
width: 150
action: open-menu
target: homes-menu
action-key: "dm:main_menu_open"
- label: "<item:gold_ingot> <yellow>Auction"
tooltip: "<gray>Browse the auction house"
width: 150
action: static-run-command
command: "/ah"
- label: "<item:paper> <blue>Website"
tooltip: "<gray>Opens the server website"
width: 150
action: static-open-url
target: "https://yourserver.net"
- label: "<item:paper> <yellow>Copy IP"
tooltip: "<gray>Copy server IP to clipboard"
width: 150
action: static-copy
target: "play.yourserver.net"
- label: "<item:writable_book> <aqua>Msg Staff"
tooltip: "<gray>Pre-fills chat with message command"
width: 150
action: static-suggest
command: "/msg staff "
- label: "<item:diamond> <green>Pay"
tooltip: "<gray>Send money to a player"
width: 150
action: open-menu
target: pay-menu
action-key: "dm:main_menu_open"
- label: "<item:ender_pearl> <red>Teleport"
tooltip: "<gray>Teleport options"
width: 150
action: open-menu
target: teleport-menu
action-key: "dm:teleport"
- label: "<item:golden_sword> <gold>Leaderboards"
tooltip: "<gray>Server leaderboards"
width: 150
action: open-menu
target: leaderboard-hub
action-key: "dm:leaderboard_open"
- label: "<item:barrier> <red>Close"
tooltip: "<gray>Close the menu"
width: 150
action: close
action-key: "dm:cancel"
Homes addon:
Settings:
10+ additional fully configurable menus are included.
