Creating menus
Define dialogs under menus in plugins/CustomMenu/config.yml. A menu needs at least one valid button.
Create an inline menu
This small example uses the same menu structure, message action and player placeholder as the supplied default configuration.
open-command:
name: menu
menu: main
menus:
main:
pause-menu: false
title: "<gold>Server menu</gold>"
after-action: close
can-close-with-escape: true
columns: 1
buttons:
welcome:
label: "<green>Welcome</green>"
actions:
- "message: <gray>Hello, %player%!</gray>"Open the dialog with /custommenu open main while testing. The player-facing command is /menu when open-command.name is menu. Renaming that command requires a restart.
Choose where the menu opens
| Entry point | Configuration or action | When changes apply |
|---|---|---|
| Inline menu | open-command.menu, /custommenu open <menu> or menu: <menu-id> | Runtime menu layout and actions reload with /custommenu reload. |
| Pause screen | pause-menu: true | Registry layout changes require a server restart. |
| Quick Actions | quick-actions: true | Registry layout changes require a server restart. |
Pause-menu and Quick Actions are independent and can both be enabled. One pause-menu entry appears as a direct button; multiple entries are grouped by the client under Custom Options. Quick Actions has no default key binding: players set it in Options → Controls → Key Binds → Miscellaneous → Quick Actions.
Layout, body text and buttons
title sets the dialog heading, button-name labels its pause-screen entry, and columns sets the button grid. Add a body line as text or use a map containing item or sprite with optional text.
Buttons support label, optional tooltip and width, plus an actions list. Actions run from top to bottom. Read Actions & inputs for commands, messages, navigation and forms.
IDs and closing behavior
Menu and button IDs use lowercase [a-z0-9_.-]. Input keys use [a-zA-Z0-9_.-] and are case-sensitive. Match each %input_<key>% placeholder to its exact key.
after-action accepts close, none or wait_for_response. If you disable can-close-with-escape, keep a button with the close action so players can exit.
Sprites and custom glyphs
Use native Minecraft sprites for built-in icons. Optional ItemsAdder and Nexo integrations resolve resource-pack glyphs. The dedicated guides include exact supported tags and bootstrap timing constraints.
Test your changes
Reload and open the inline menu to test actions. Restart for pause/Quick Actions registry changes or a new command name. If a menu does not appear, check that it has a valid ID and at least one valid button. Quote YAML values that look like booleans; see Troubleshooting for more checks.