JMenus
The most powerful GUI menu system for Minecraft servers. Create stunning, interactive menus with 11+ action types — no coding required.
Craft Any Menu, Instantly
In-game editor, rich action system, BungeeCord support, economy integration, and full PlaceholderAPI compatibility — all in one lightweight plugin.
Core Features
Unlimited custom GUI menus with flexible 1–6 row layouts, fill items, and custom commands.
Edit menus visually without touching any YAML files. Add items and configure actions live.
11+ action types — commands, messages, sounds, teleports, BungeeCord, economy, and more.
Send players between network servers seamlessly. Perfect for server selectors.
Full Vault integration — give, take, or check money directly from menu actions.
PlaceholderAPI support plus 15+ built-in placeholders for players and server data.
Technical Specs
| Requirement | Details |
|---|---|
| Minecraft Version | 1.21+ |
| Server Software | Paper, Spigot, Bukkit-based |
| Java Version | Java 21+ |
| Dependencies | None required · PlaceholderAPI + Vault optional |
| License | Open Source · GitHub |
Why JMenus?
- Zero learning curve — intuitive in-game editor makes menu creation effortless for anyone
- Performance optimized — lightweight and efficient, won't slow your server
- Highly customizable — every aspect configurable to match your server's style
- Developer friendly — clean API for integration with other plugins (coming soon)
- Future proof — regular updates and new features
- Active support — responsive developer and community
Installation
Get JMenus running on your server in under two minutes.
Requirements
- Minecraft Server 1.21 or higher
- Paper, Spigot, or Bukkit-based server software
- Java 21 or higher
- Write permissions to the
plugins/directory
Download
Steps
Download the JAR
Get the latest JMenus.jar from Modrinth or GitHub above.
Place in plugins folder
Move the JAR to your server's plugins/ directory.
Install optional dependencies
PlaceholderAPI — for dynamic content. Vault — for economy actions. Both are optional.
Start / restart the server
JMenus will auto-generate config.yml, the menus/ folder, and an example menu.
Verify installation
Run /jmenus help in-game. If the help menu appears, you're all set!
/jmenus open example_menu to see JMenus in action.Generated Files
| Path | Purpose |
|---|---|
plugins/JMenus/config.yml | Main plugin configuration |
plugins/JMenus/menus/ | Folder containing individual menu YAML files |
plugins/JMenus/menus/example_menu.yml | Example menu for reference |
Next: Quick Start →
Quick Start
Create your first custom menu in under 5 minutes.
Step-by-Step
Step 1 — Create the menu
/jmenus create my_first_menu
Creates a new menu file with a basic template in plugins/JMenus/menus/.
Step 2 — Open the in-game editor
/jmenuedit my_first_menu
Opens the visual editor — drag items, change the title, adjust size, all without touching YAML.
Step 3 — Test your menu
/jmenus open my_first_menu
Example YAML
Here's what a basic menu config looks like — you can also edit this directly in the file:
title: "&8&l✦ &e&lMy First Menu &8&l✦"
size: 3
open-sound: "BLOCK_CHEST_OPEN:1:1"
close-sound: "BLOCK_CHEST_CLOSE:1:1"
fill-item:
material: BLACK_STAINED_GLASS_PANE
name: " "
command:
enabled: true
name: "myfirstmenu"
items:
welcome:
material: PAPER
slot: 13
name: "&e&lWelcome!"
lore:
- "&8╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍"
- "&7Welcome to my server!"
- "&7Click for a surprise!"
- "&8╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍"
actions:
left:
- "[message] &aHello %player_name%!"
- "[sound] ENTITY_PLAYER_LEVELUP:1:1"
close:
material: BARRIER
slot: 22
name: "&c&lClose Menu"
actions:
left:
- "[close]"
- "[sound] BLOCK_CHEST_CLOSE:1:1"
Next: Commands Reference →
Download & Support
Official download sources and support channels for JMenus.
Official Downloads
Support Channels
Open a GitHub Issue with reproduction steps, server version, and error logs.
Get community help and reach the developer at Discord: J2D
This wiki — comprehensive guides, examples, and configuration reference.
Version History
| Version | Release | Highlights |
|---|---|---|
| v1.0.0 | Latest | In-game editor, template system, 11+ actions, BungeeCord, economy |
Commands
Full reference for all JMenus commands. Aliases: /jmenu /menus /jm
/jmenus — Main Command
| Command | Description | Permission |
|---|---|---|
/jmenus help | Show help menu | — |
/jmenus open <menu> | Open a menu | jmenus.open |
/jmenus list | List all menus | jmenus.list |
/jmenus create <menu> [template] | Create a new menu | jmenus.create |
/jmenus delete <menu> | Delete a menu permanently | jmenus.delete |
/jmenus edit <menu> | Open the in-game editor | jmenus.editor |
/jmenus reload | Reload all configs and menus | jmenus.reload |
/jmenuedit — Editor Shortcut
Aliases: /jme, /menuedit
/jmenuedit <menu_name>
Templates (for /jmenus create)
Next: Permissions →
Permissions
Granular permission control for players, moderators, and admins.
Core Nodes
| Permission | Description | Default | Level |
|---|---|---|---|
jmenus.use | Basic plugin access | true | Player |
jmenus.open | Open menus via commands | true | Player |
jmenus.list | List all menus | op | Moderator |
jmenus.reload | Reload configuration | op | Admin |
jmenus.create | Create new menus | op | Admin |
jmenus.delete | Delete menus | op | Admin |
jmenus.editor | Access in-game editor | op | Admin |
Menu-Specific Permissions
Restrict individual menus to specific permission nodes:
jmenus.open.shop # Can open the 'shop' menu
jmenus.open.warps # Can open the 'warps' menu
jmenus.open.admin # Can open the 'admin' menu
jmenus.open.vip # Can open the 'vip' menu
jmenus.open (the general node), they can open any menu unless you add a permission: field directly in the menu YAML file.Permission in Menu Files
title: "&c&lAdmin Panel"
size: 3
permission: "admin.use" # Required to open this menu
items:
ban_player:
material: BARRIER
slot: 10
name: "&cBan Player"
permission: "admin.ban" # Required to see and use this item
Next: Configuration →
Configuration
Main config at plugins/JMenus/config.yml. Use /jmenus reload after changes.
General Settings
settings:
debug: false # Extra console output for troubleshooting
update-check: true # Check for updates on startup
use-placeholders: true # Enable PlaceholderAPI integration
language: "en_US" # Language (future multi-language support)
auto-reload: true # Reload menus when files are modified
metrics: true # Anonymous usage statistics
Menu Defaults
menu:
default-size: 3
default-title: "&8Menu"
default-fill-item:
enabled: false
material: "BLACK_STAINED_GLASS_PANE"
name: " "
sounds:
enabled: true
default-open: "BLOCK_CHEST_OPEN:1:1"
default-close: "BLOCK_CHEST_CLOSE:1:1"
BungeeCord Settings
bungee:
enabled: true
ping-interval: 60
server-info-format: "&fPlayers: &a%count%/%max%"
show-status: true
servers:
- "hub"
- "survival"
- "creative"
- "skyblock"
- "minigames"
aliases:
main: "hub"
build: "creative"
lobby: "hub"
/jmenus reload after editing config.yml to apply changes without restarting.Actions System
Actions define what happens when players click menu items. Chain multiple actions together for complex behavior.
Available Actions
SOUND:vol:pitchAction Syntax Examples
actions:
left:
- "[message] &aHello %player_name%!"
- "[sound] ENTITY_PLAYER_LEVELUP:1:1"
- "[console] give %player_name% diamond 1"
- "[broadcast] %player_name% claimed a reward!"
- "[close]"
right:
- "[menu] shop"
shift_left:
- "[permission] admin.use:[console] op %player_name%"
- "[money] take:500"
- "[message] &aYou spent $500!"
middle:
- "[bungee] hub"
- "[teleport] spawn"
Click Types
| Key | Trigger | Common Use |
|---|---|---|
left | Left mouse button | Primary action |
right | Right mouse button | Secondary / alternative |
middle | Scroll wheel click | Special actions |
shift_left | Shift + left click | Admin or advanced actions |
shift_right | Shift + right click | Advanced alternatives |
Next: In-Game Editor →
In-Game Editor
JMenus' flagship feature — create and modify menus entirely in-game without touching any files.
Accessing the Editor
/jmenuedit <menu_name>
# or
/jmenus edit <menu_name>
jmenus.editor permission (OP only by default).Editor Interface
Left-click to edit. Right-click to remove. Shift-click to configure actions.
Chat input for title changes. Supports color codes and placeholders.
Adjust the menu from 1–6 rows (9–54 slots) interactively.
Configure fill items, sounds, and direct commands.
Waypoint Editor
Access by Shift-clicking any item in the main editor view:
- Name Tag — rename the item with color code support
- Book — edit the item's lore lines
- Anvil — change the item material
- Lightning — configure click actions
- Arrow — return to main editor
Templates
Use built-in templates when creating menus to get a head start.
/jmenus create <menu_name> <template>
Available Templates
Placeholders
Use dynamic values in menu titles, item names, lore, and action messages.
Built-in Placeholders
| Placeholder | Returns |
|---|---|
%player_name% | Player's username |
%player_displayname% | Player's display name |
%player_health% | Current health |
%player_max_health% | Max health |
%player_food_level% | Hunger level |
%player_level% | XP level |
%player_exp% | XP points |
%player_x% / %player_y% / %player_z% | Coordinates |
%player_world% | Current world name |
%player_gamemode% | Current gamemode |
%server_online% | Online player count |
%server_max_online% | Max player slots |
%server_name% | Server name |
%server_version% | Server version string |
%server_tps% | Server TPS |
PlaceholderAPI
Install PlaceholderAPI to unlock thousands of additional placeholders from other plugins:
%vault_eco_balance_formatted% # Player's money (Vault)
%luckperms_primary_group_name% # LuckPerms rank
%statistic_player_kills% # Kill count
%player_world% # World name
%server_time_HH:mm:ss% # Server time
BungeeCord Support
Send players between servers in your network seamlessly — perfect for server selectors.
Requirements
A properly configured BungeeCord proxy with multiple backend servers.
JMenus must be installed on all backend servers with consistent configs.
Set bungee.enabled: true and configure your server list.
Using the [bungee] Action
# Send to specific servers
[bungee] hub
[bungee] survival
[bungee] creative
[bungee] minigames
# Using aliases (defined in config.yml)
[bungee] main # → goes to "hub"
[bungee] build # → goes to "creative"
[bungee] lobby # → goes to "hub"
Economy Integration
Full Vault support — create shops, charge for services, or reward players with in-game currency.
Setup
Install Vault
Download Vault from Bukkit/Spigot. It bridges JMenus with your economy plugin.
Install an economy plugin
EssentialsX Economy, CMI Economy, TNE, or any Vault-compatible economy plugin.
Restart the server
All three (JMenus + Vault + economy) must load on the same startup.
Money Action Syntax
[money] give:1000
Add money to balance.
[money] take:500
Remove money (only if sufficient).
[money] has:1000
Verify balance before action.
buy_diamond:
material: DIAMOND
slot: 11
name: "&b&lDiamond"
lore:
- "&7Price: &a$500"
actions:
left:
- "[money] has:500"
- "[money] take:500"
- "[console] give %player_name% diamond 1"
- "[message] &aPurchased 1 Diamond for $500!"
- "[sound] ENTITY_EXPERIENCE_ORB_PICKUP:1:2"
[money] has: checks with [permission] guards and rank-based discounts for sophisticated shop systems.API Documentation
Developer resources for integrating JMenus with other plugins.
Under Development
The JMenus API is being built alongside the plugin. Full JavaDoc, integration guides, custom action creation, and event system — coming in a future release.
⭐ Watch on GitHubWhat's Coming
Complete method documentation with examples and best practices.
Step-by-step tutorials for adding JMenus to your plugin.
Ready-to-use snippets and patterns.
Register your own action types from external plugins.
Troubleshooting
Solutions for common issues and how to get further help.
Common Issues
| Issue | Symptoms | Solution |
|---|---|---|
| Plugin won't load | Error in console, commands don't exist | Check Java 21+, server software compatibility, download from official source |
| Menus don't open | Commands work but no GUI appears | Check permissions, verify the menu file exists and has valid YAML syntax |
| Items don't show | Menu opens but appears empty | Verify item config, check material names, ensure slots are 0–53 |
| Actions don't trigger | Clicking does nothing | Check action syntax, verify permissions, test with a simple [message] action |
| Placeholders show raw text | %player_name% not replaced | Install PlaceholderAPI and the required expansion packs |
Enable Debug Mode
settings:
debug: true
Then reload: /jmenus reload. The console will log detailed info about menu loading and action execution.
Quick Checklist
- Verify player permissions are correctly configured in your permission plugin
- Confirm the plugin is enabled and on the latest version
- Check server console for error stack traces
- Enable debug mode for detailed output
- Validate YAML syntax — use a YAML linter (YAML is whitespace-sensitive)
- Test with a fresh minimal menu to isolate plugin conflicts
Getting More Help
Chat support with the developer at Discord: J2D
Suggest new features on GitHub Discussions or Discord.
Enable debug mode, check console, validate YAML, test minimal config.
Examples
Real-world menu configurations — copy, paste, and customize.
Admin Control Panel
title: "&c&l⚡ &4&lAdmin Panel &c&l⚡"
size: 4
permission: "admin.use"
fill-item:
material: RED_STAINED_GLASS_PANE
name: " "
items:
player_management:
material: PLAYER_HEAD
slot: 10
name: "&e&lPlayer Management"
lore:
- "&8╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍"
- "&7Manage online players"
- "&7• Kick · Ban · Teleport"
- "&8╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍"
actions:
left:
- "[menu] player_management"
quick_actions:
material: EMERALD
slot: 22
name: "&a&lQuick Actions"
lore:
- "&eLeft: &7Heal all"
- "&eRight: &7Feed all"
- "&eShift+Left: &7Clear weather"
- "&eShift+Right: &7Set day"
actions:
left:
- "[console] heal *"
- "[broadcast] &aAll players healed!"
right:
- "[console] feed *"
- "[broadcast] &aAll players fed!"
shift_left:
- "[console] weather clear"
shift_right:
- "[console] time set day"
VIP Perks Menu
title: "&6&l⭐ &e&lVIP Perks &6&l⭐"
size: 4
permission: "vip.use"
fill-item:
material: YELLOW_STAINED_GLASS_PANE
name: " "
items:
vip_kit:
material: DIAMOND_CHESTPLATE
slot: 11
name: "&b&lVIP Kit"
lore:
- "&7Claim your daily VIP kit"
- "&7Cooldown: &e24 hours"
flags:
- "HIDE_ATTRIBUTES"
actions:
left:
- "[console] kit vip %player_name%"
- "[message] &aVIP kit claimed!"
- "[sound] ENTITY_PLAYER_LEVELUP:1:1"
fly_toggle:
material: FEATHER
slot: 13
name: "&f&lFly Toggle"
actions:
left:
- "[console] fly %player_name%"
- "[message] &aFlight toggled!"
- "[sound] ENTITY_BAT_TAKEOFF:1:1"
daily_bonus:
material: GOLD_INGOT
slot: 15
name: "&6&lDaily Bonus"
lore:
- "&7Claim: &a$1000 &7daily"
actions:
left:
- "[money] give:1000"
- "[message] &aReceived &6$1000 &adaily bonus!"
- "[sound] ENTITY_EXPERIENCE_ORB_PICKUP:1:2"
/jmenuedit <menu>) to tweak these examples visually after pasting the YAML.