š Overview
Welcome to JMenus! The most powerful and feature-rich menu system plugin for Minecraft servers. Create stunning, interactive GUI menus with ease and zero coding required!
⨠Key Features
šØ Advanced Menu System
Create unlimited custom GUI menus with flexible layouts, custom items, and interactive elements. Support for 1-6 row menus with full customization.
š„ļø In-Game Editor
Edit menus directly in-game with an intuitive GUI interface. No file editing required! Add items, configure actions, and test instantly.
š¬ Rich Actions System
11+ different action types including commands, messages, sounds, teleportation, BungeeCord transfers, economy transactions, and more.
š BungeeCord Support
Send players between servers seamlessly with built-in BungeeCord integration. Perfect for network server selectors.
š° Economy Integration
Full Vault integration for money transactions. Create shops, charge for teleports, or reward players with money.
š PlaceholderAPI Support
Dynamic content with full PlaceholderAPI integration plus 15+ built-in placeholders for player and server information.
š Sound Effects
Customizable sounds for menu interactions. Configure open/close sounds and action-specific audio feedback.
šÆ Permission System
Fine-grained permission control with menu-specific permissions and role-based access control.
š Template System
Quick menu creation with predefined templates: server selector, warps menu, shop categories, and basic layouts.
š§ Technical Specifications
Requirement | Details |
Minecraft Version | 1.21+ |
Server Software | Paper, Spigot, Bukkit-based servers |
Java Version | Java 21+ |
Dependencies | None (optional: PlaceholderAPI, Vault) |
Plugin Version | v1.1.0 |
API Version | 1.21 |
šÆ What Makes JMenus Special?
- Zero Learning Curve: Intuitive in-game editor makes menu creation effortless
- Performance Optimized: Lightweight and efficient, won't slow down your server
- Highly Customizable: Every aspect can be configured to match your server's style
- Developer Friendly: Clean API for integration with other plugins
- Future Proof: Regular updates and new feature additions
- Professional Support: Active development with community support
š„ Download & Support
Official Download Sources
Important: Always download JMenus from official sources to ensure you get the genuine, safe, and latest version.
Support & Contact
š Bug Reports & Issues
Report bugs or request features on GitHub Issues
GitHub Issues
š¬ General Support
Get help and chat with the community
Discord: J2D
š Documentation
Complete plugin documentation and guides
This Wiki
Version History
Version | Release Date | Key Features |
v1.1.0 |
Latest |
In-game editor, template system, improved actions |
v1.0.0 |
Initial |
Core menu system, basic actions, configuration |
ā” Installation
Download JMenus
Download the latest JMenus plugin JAR file from Modrinth or GitHub. Make sure you're getting the version compatible with your Minecraft server version (1.21+).
Tip: Always download from official sources to ensure you get the genuine, safe version.
Place in Plugins Folder
Navigate to your server's plugins
directory and place the JMenus JAR file there.
/your-server/plugins/JMenus-1.1.0.jar
Install Optional Dependencies
For enhanced functionality, install these optional plugins:
- PlaceholderAPI - For dynamic placeholders in menus (highly recommended)
- Vault - For economy integration and money actions
Note: JMenus works perfectly without these dependencies, but they unlock additional features.
Restart Your Server
Restart your Minecraft server to load the plugin. JMenus will automatically generate its configuration files and create an example menu.
Verify Installation
Run the following command to verify JMenus is loaded correctly:
/jmenus help
You should see the JMenus help menu if installation was successful.
Generated Files
After first startup, JMenus creates these files:
File/Folder | Purpose |
config.yml | Main plugin configuration |
menus/ | Folder containing individual menu files |
menus/example_menu.yml | Example menu for reference |
Installation Complete! JMenus will create an example menu file for you to explore. Use /jmenus open example_menu
to see it in action!
š Quick Start
Creating Your First Menu (5 Minutes)
Follow this tutorial to create your first custom menu in under 5 minutes!
Step 1: Create the Menu
/jmenus create my_first_menu
This creates a new menu file with basic template items including welcome message and close button.
Step 2: Open the In-Game Editor
/jmenuedit my_first_menu
This opens the powerful in-game editor where you can visually customize your menu without touching any files.
Step 3: Customize Your Menu
- Edit Items: Add, remove, or modify menu items with visual interface
- Edit Title: Change the menu title with color codes support
- Edit Size: Adjust the menu size from 1-6 rows (9-54 slots)
- Settings: Configure sounds, fill items, and commands
Step 4: Test Your Menu
/jmenus open my_first_menu
Open your newly created menu to see it in action!
Example Menu Configuration
Here's what a basic menu configuration looks like:
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"
# Optional: Fill empty slots
fill-item:
material: BLACK_STAINED_GLASS_PANE
name: " "
# Optional: Direct command access
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"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Click to close this menu"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[close]"
- "[sound] BLOCK_CHEST_CLOSE:1:1"
Using Templates
Create menus faster with predefined templates:
šÆ Basic Template
/jmenus create my_menu basic
Simple menu with welcome item and close button
š Server Template
/jmenus create servers server
Server selector with hub, survival, creative
š Warps Template
/jmenus create warps warps
Warp menu with spawn, mine, shop, PvP
š Shop Template
/jmenus create shop shop
Shop categories: blocks, tools, miscellaneous
Congratulations! You've created your first JMenus menu. Continue reading to discover all the advanced features available!
š» Commands
Main Command: /jmenus
The primary command for all JMenus functionality.
Aliases: /jmenu
, /menus
, /jm
Command |
Description |
Permission |
Example |
/jmenus help |
Shows help information and available commands |
- |
/jmenus help |
/jmenus open <menu> |
Opens a specific menu for the player |
jmenus.open |
/jmenus open shop |
/jmenus list |
Lists all available menus on the server |
jmenus.list |
/jmenus list |
/jmenus create <menu> [template] |
Creates a new menu with optional template |
jmenus.create |
/jmenus create shop basic |
/jmenus delete <menu> |
Deletes an existing menu permanently |
jmenus.delete |
/jmenus delete old_menu |
/jmenus edit <menu> |
Opens the in-game editor for a menu |
jmenus.editor |
/jmenus edit shop |
/jmenus reload |
Reloads the plugin configuration and menus |
jmenus.reload |
/jmenus reload |
Editor Command: /jmenuedit
Quick access to the in-game menu editor.
Aliases: /jme
, /menuedit
/jmenuedit <menu_name>
Pro Tip: Use tab completion with all commands to see available options and menu names automatically!
Template Options
When creating menus, you can use these predefined templates:
šÆ basic
Simple menu with welcome message and close button
basic
š server
Server selector with hub, survival, and creative options
server
š warps
Warp menu with spawn, mine, shop, and PvP warps
warps
š shop
Shop categories menu with blocks, tools, and misc
shop
Direct Menu Commands
If enabled in the configuration, you can access menus directly:
/<menu_name>
For example, if you have a menu called "shop":
/shop
Note: Direct commands can be enabled/disabled per menu in the menu configuration file or globally in config.yml.
š Permissions
Important: JMenus uses a hierarchical permission system. Higher-level permissions automatically include lower-level ones where logical.
Core Permissions
Permission |
Description |
Default |
Level |
jmenus.use |
Basic plugin access and usage |
true |
Player |
jmenus.open |
Open menus using commands |
true |
Player |
jmenus.list |
List all available menus |
op |
Moderator |
jmenus.reload |
Reload plugin configuration |
op |
Admin |
jmenus.create |
Create new menus |
op |
Admin |
jmenus.delete |
Delete existing menus |
op |
Admin |
jmenus.editor |
Access in-game menu editor |
op |
Admin |
Menu-Specific Permissions
Control access to individual menus with specific permissions:
# Allow access to specific menus
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
How it works: If a player doesn't have the specific menu permission, they can still open it if they have the general jmenus.open
permission, unless you configure menu-specific restrictions.
Permission Configuration in Menu Files
You can add permission requirements directly to menu files:
title: "&c&lAdmin Panel"
size: 3
permission: "admin.use" # Require this permission to open
items:
ban_player:
material: BARRIER
slot: 10
name: "&cBan Player"
permission: "admin.ban" # Require this permission to see/use item
Permission Groups Example
Here's how you might set up permission groups with a permissions plugin:
š¤ Default Players
jmenus.use
jmenus.open
jmenus.open.shop
jmenus.open.warps
š”ļø Moderators
- All player permissions
jmenus.list
jmenus.open.mod
š Administrators
- All previous permissions
jmenus.create
jmenus.delete
jmenus.editor
jmenus.reload
jmenus.*
Action-Based Permissions
Use the permission action to create conditional menu items:
items:
vip_item:
material: DIAMOND
slot: 13
name: "&e&lVIP Features"
actions:
left:
# Only execute if player has VIP permission
- "[permission] vip.access:[menu] vip_menu"
# Show message if they don't have permission
- "[permission] !vip.access:[message] &cYou need VIP to access this!"
āļø Configuration
Configuration File: The main configuration file is located at plugins/JMenus/config.yml
and controls global plugin behavior.
Plugin Settings
General Settings
settings:
# Debug mode (shows extra information in console)
debug: false
# Check for updates on startup
update-check: true
# Enable PlaceholderAPI integration if installed
use-placeholders: true
# Default language (for future multi-language support)
language: "en_US"
# Auto-reload menu files when they are modified
auto-reload: true
# Enable metrics/statistics collection
metrics: true
Menu Defaults
Default Menu Properties
menu:
# Default menu settings (applied to all menus unless overridden)
default-size: 3
default-title: "&8Menu"
# Fill empty slots with this item
default-fill-item:
enabled: false
material: "BLACK_STAINED_GLASS_PANE"
name: " "
# Play sounds when opening/closing menus
sounds:
enabled: true
default-open: "BLOCK_CHEST_OPEN:1:1"
default-close: "BLOCK_CHEST_CLOSE:1:1"
BungeeCord Configuration
Network Server Support
bungee:
# Enable BungeeCord support
enabled: true
# Server ping interval (in seconds)
ping-interval: 60
# Server info message format
server-info-format: "&fPlayers: &a%count%/%max%"
# Show server status in menu items
show-status: true
# Default servers (for auto-complete in commands)
servers:
- "hub"
- "survival"
- "creative"
- "skyblock"
- "factions"
- "minigames"
- "prison"
- "pvp"
- "staff"
# You can define aliases for server names
aliases:
main: "hub"
build: "creative"
lobby: "hub"
games: "minigames"
Command Configuration
Command Behavior Settings
commands:
# The main command
main-command: "jmenus"
# Command aliases
aliases:
- "jm"
- "menus"
# Direct commands for opening menus (e.g. /example_menu)
direct-commands:
# Enable direct commands for menus
enabled: true
# Format of direct commands
# true = /menuId (e.g., /example_menu)
# false = /jmenu_menuId (e.g., /jmenu_example_menu)
use-menu-id-only: true
# Default command settings for all menus
default-enabled: true
# Allow permission-based access control
# When true, players need "jmenus.open." permission to use /
use-permissions: true
# Override specific menu commands
overrides:
# Example:
# survival: "srv" # Use /srv instead of /survival
# Permission message
no-permission: "&cYou don't have permission to use this command."
# Unknown command message
unknown-command: "&cUnknown sub-command. Use &e/{command} help &cfor help."
# Enable tab completion
tab-completion: true
Messages Configuration
Customizable Plugin Messages
messages:
prefix: "&8[&eJMenus&8] "
reload: "&aJMenus has been reloaded."
menu-not-found: "&cMenu &e{menu} &cnot found."
menu-opened: "&aOpening menu &e{menu}&a." # Empty string to disable
menu-created: "&aMenu &e{menu} &acreated successfully."
menu-deleted: "&aMenu &e{menu} &adeleted successfully."
no-menus: "&cNo menus found."
no-permission: "&cYou don't have permission to use this command."
Permission Defaults
Default Permission Groups
permissions:
# Default permissions
defaults:
player:
- "jmenus.use"
- "jmenus.open"
admin:
- "jmenus.reload"
- "jmenus.list"
- "jmenus.create"
- "jmenus.edit"
- "jmenus.delete"
# Permission descriptions
descriptions:
"jmenus.use": "Allows using the plugin"
"jmenus.open": "Allows opening menus"
"jmenus.reload": "Allows reloading the plugin"
"jmenus.list": "Allows listing available menus"
"jmenus.create": "Allows creating new menus"
"jmenus.edit": "Allows editing existing menus"
"jmenus.delete": "Allows deleting menus"
Important: After modifying the configuration file, use /jmenus reload
to apply changes without restarting the server.
š¬ Actions System
Actions are the heart of JMenus! They define what happens when players interact with menu items. You can combine multiple actions for complex behaviors and chain them together.
Available Actions
š¬ Message
Send a message to the player
[message] Hello %player_name%!
ā” Command
Execute command as the player
[command] give %player_name% diamond
š„ļø Console
Execute command as console (with full permissions)
[console] say Welcome %player_name%!
š Sound
Play sound (SOUND:volume:pitch)
[sound] ENTITY_PLAYER_LEVELUP:1:1
ā Close
Close the current menu
[close]
š± Menu
Open another menu
[menu] shop
š Teleport
Teleport player to location or another player
[teleport] spawn
š¢ Broadcast
Send message to all online players
[broadcast] %player_name% joined!
š Bungee
Send player to another BungeeCord server
[bungee] hub
š Permission
Check permission before executing action
[permission] admin.use:[console] op %player_name%
š° Money
Economy transactions (requires Vault)
[money] give:1000
Detailed Action Documentation
š¬ Message Action
# Send colored messages with placeholders
[message] &aWelcome %player_name%!
[message] &cYou don't have permission!
[message] &e&lServer Info: &7%server_online%/%server_max_players%
ā” Command Action
# Execute commands as the player (player must have permission)
[command] heal
[command] give %player_name% diamond 1
[command] warp spawn
[command] kit starter
š„ļø Console Action
# Execute commands with full console permissions
[console] give %player_name% diamond 64
[console] lp user %player_name% parent add vip
[console] broadcast %player_name% bought VIP!
[console] effect give %player_name% minecraft:speed 60 1
š Sound Action
# Format: [sound] SOUND_NAME:volume:pitch
[sound] ENTITY_PLAYER_LEVELUP:1:1
[sound] BLOCK_NOTE_BLOCK_PLING:0.5:2
[sound] ENTITY_VILLAGER_YES:1:1
[sound] UI_BUTTON_CLICK:1:1
š Teleport Action
# Teleport to another player
[teleport] PlayerName
# Teleport to coordinates (x,y,z,world)
[teleport] 100,64,200,world
[teleport] 0,100,0,world_nether
# Teleport with yaw and pitch (x,y,z,world,yaw,pitch)
[teleport] 100,64,200,world,90,0
š Bungee Action
# Send to another server
[bungee] hub
[bungee] survival
[bungee] creative
[bungee] minigames
š Permission Action
# Check if player has permission, then execute action
[permission] vip.access:[message] &aWelcome VIP!
[permission] admin.use:[console] gamemode creative %player_name%
# Check if player DOESN'T have permission (using !)
[permission] !vip.access:[message] &cYou need VIP for this!
# Multiple actions after permission check
[permission] moderator.use:[console] give %player_name% stick 1
š° Money Action
# Give money to player
[money] give:1000
[money] give:50.5
# Take money from player
[money] take:500
# Check if player has enough money (returns true/false)
[money] has:1000
Click Types
Actions can be triggered by different click types:
Click Type | Description | Common Usage |
left | Left mouse click | Primary action, most common |
right | Right mouse click | Secondary action, alternatives |
middle | Middle mouse click (scroll wheel) | Special actions |
shift_left | Shift + left click | Advanced actions, admin functions |
shift_right | Shift + right click | Advanced alternatives |
Complex Action Examples
VIP Purchase System
items:
vip_package:
material: DIAMOND
slot: 13
name: "&e&lVIP Package - &6$1000"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Click to purchase VIP status"
- "&7Price: &a$1000"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
# Check if already VIP
- "[permission] vip.use:[message] &cYou already have VIP!"
- "[permission] vip.use:[sound] ENTITY_VILLAGER_NO:1:1"
# Check if has enough money
- "[permission] !vip.use:[money] has:1000"
- "[permission] !vip.use:[money] take:1000"
# Give VIP rank
- "[permission] !vip.use:[console] lp user %player_name% parent add vip"
- "[permission] !vip.use:[message] &a&lVIP purchased! Welcome to VIP!"
- "[permission] !vip.use:[sound] ENTITY_PLAYER_LEVELUP:1:2"
- "[permission] !vip.use:[broadcast] &e%player_name% &7just became &e&lVIP&7!"
right:
# Show VIP info menu
- "[menu] vip_info"
Server Selector with Player Count
items:
survival_server:
material: GRASS_BLOCK
slot: 11
name: "&a&lSurvival Server"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Players: &a%bungee_survival%"
- "&7Status: &aOnline"
- ""
- "&eLeft-click to join!"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[message] &eConnecting to Survival server..."
- "[sound] ENTITY_ENDERMAN_TELEPORT:1:1"
- "[bungee] survival"
Multi-Level Menu Navigation
items:
shop_categories:
material: CHEST
slot: 13
name: "&6&lShop Categories"
actions:
left:
- "[menu] shop_categories"
right:
- "[menu] player_shop"
shift_left:
- "[permission] admin.shop:[menu] admin_shop"
- "[permission] !admin.shop:[message] &cAdmin only!"
Economy Shop Item
items:
diamond_sword:
material: DIAMOND_SWORD
slot: 20
name: "&b&lDiamond Sword"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Price: &a$500"
- "&7Left-click: &eBuy 1"
- "&7Right-click: &eBuy 5"
- "&8āāāāāāāāāāāāāāāā"
flags:
- "HIDE_ATTRIBUTES"
actions:
left:
# Buy 1 sword
- "[money] has:500"
- "[money] take:500"
- "[console] give %player_name% diamond_sword 1"
- "[message] &aPurchased 1 Diamond Sword for $500!"
- "[sound] ENTITY_EXPERIENCE_ORB_PICKUP:1:1"
right:
# Buy 5 swords
- "[money] has:2500"
- "[money] take:2500"
- "[console] give %player_name% diamond_sword 5"
- "[message] &aPurchased 5 Diamond Swords for $2500!"
- "[sound] ENTITY_EXPERIENCE_ORB_PICKUP:1:1.5"
Pro Tip: Actions are executed in order from top to bottom. Use this to create complex conditional logic with permission checks and money verification!
š„ļø In-Game Editor
The In-Game Editor is JMenus' most powerful feature, allowing you to create and modify menus entirely in-game without touching any configuration files!
Accessing the Editor
/jmenuedit <menu_name>
or
/jmenus edit <menu_name>
Required Permission: jmenus.editor
(default: OP only)
Editor Interface
Main Editor Menu
The main editor interface provides access to all editing functions:
š¦ Edit Items
Add, remove, or modify menu items visually
- Left-click: Edit existing item
- Right-click: Remove item
- Shift-click: Edit item actions
š·ļø Edit Title
Change the menu title with chat input
- Supports color codes (&)
- Supports placeholders
- Real-time preview
š Edit Size
Adjust menu size from 1-6 rows
- Visual size selector
- Automatic slot calculation
- Preserves existing items
āļø Settings
Configure sounds, fill items, and commands
- Open/close sounds
- Fill item configuration
- Direct command setup
Item Editor
Adding New Items
- Click "Edit Items" in the main editor
- Left-click on any empty slot (gray glass pane)
- Enter the material name in chat
- The item will be created with default properties
- Left-click the item again to edit its properties
Editing Existing Items
- Left-click on any existing item
- Enter new material name in chat
- The item material will be updated
- Use Shift-click to edit actions
Removing Items
- Right-click on any existing item
- Confirm removal
- The item will be deleted from the menu
Action Editor
The action editor provides a comprehensive interface for managing item actions:
Managing Actions
Command | Description | Example |
add | Add a new action | Type "add" then enter action |
remove <number> | Remove specific action | remove 1 |
edit <number> | Edit specific action | edit 2 |
clear | Remove all actions | clear |
done | Finish editing | done |
cancel | Cancel without saving | cancel |
Action Editor Workflow
- Shift-click an item in the item editor
- Choose left-click or right-click actions
- View current actions list
- Use commands to modify actions
- Type "done" when finished
# Example action editing session:
> add
Enter the new action to add:
> [message] &aHello %player_name%!
Action added successfully!
Current actions:
1. [message] &aHello %player_name%!
Commands: add, remove , edit , clear, done
> add
Enter the new action to add:
> [sound] ENTITY_PLAYER_LEVELUP:1:1
Action added successfully!
Current actions:
1. [message] &aHello %player_name%!
2. [sound] ENTITY_PLAYER_LEVELUP:1:1
> done
Title Editor
Change your menu title with full color and placeholder support:
- Click "Edit Title" in the main editor
- Click the title item
- Enter your new title in chat
- Use color codes (&) and placeholders
- The title will update instantly
# Example title inputs:
&8&l⦠&e&lShop Menu &8&lā¦
&c&lAdmin Panel &7- &8%player_name%
&a&lWelcome &f%player_name%&a!
&6&lā &e&lVIP Menu &6&lā
Size Editor
Adjust your menu size visually:
- 1 Row: 9 slots (compact menus)
- 2 Rows: 18 slots (small menus)
- 3 Rows: 27 slots (standard size)
- 4 Rows: 36 slots (large menus)
- 5 Rows: 45 slots (very large)
- 6 Rows: 54 slots (maximum size)
Note: When reducing menu size, items in slots that no longer exist will be removed. When increasing size, new empty slots will be available.
Settings Editor
Sound Configuration
- Open Sound: Played when menu opens
- Close Sound: Played when menu closes
- Format: SOUND_NAME:volume:pitch
- Example: BLOCK_CHEST_OPEN:1:1
Fill Item Configuration
- Choose material for empty slots
- Common choices: BLACK_STAINED_GLASS_PANE, GRAY_STAINED_GLASS_PANE
- Type "none" to disable fill items
Command Configuration
- Set up direct commands like /shop, /warps
- Type command name without slash
- Type "none" to disable direct commands
Saving Changes
The editor automatically saves changes to the menu file when:
- You use the "Save Changes" button
- You exit the editor
- You modify any setting
Real-time Updates: Changes are applied immediately and saved to the menu file automatically. You can test your menu instantly by opening it!
Editor Tips & Tricks
šØ Color Codes
Use & codes for colors:
- &c = Red
- &a = Green
- &e = Yellow
- &b = Aqua
- &l = Bold
š Placeholders
Use placeholders for dynamic content:
- %player_name%
- %server_online%
- %player_world%
- PlaceholderAPI placeholders
š Quick Testing
Test your menu instantly:
- Exit editor
- /jmenus open <menu>
- Make changes
- Re-open to see updates
š Copy Items
Copy configurations between menus:
- Edit menu files manually
- Copy item sections
- Reload with /jmenus reload
Remember: The in-game editor is designed to be intuitive and user-friendly. Experiment with different settings and don't be afraid to try new things - you can always undo changes by editing the menu file manually!
š Templates
Templates provide pre-built menu configurations for common use cases. They're perfect for quickly creating professional-looking menus without starting from scratch.
Available Templates
šÆ Basic Template
Simple menu with welcome message and close button. Perfect for learning or basic functionality.
/jmenus create my_menu basic
š Server Template
BungeeCord server selector with Hub, Survival, and Creative servers. Ideal for network servers.
/jmenus create servers server
š Warps Template
Teleportation menu with Spawn, Mine, Shop, and PvP Arena warps. Great for survival servers.
/jmenus create warps warps
š Shop Template
Shopping categories with Blocks, Tools, and Miscellaneous sections. Perfect for economy servers.
/jmenus create shop shop
Basic Template
The basic template creates a simple 3-row menu with essential items:
title: "&8&l⦠&e&lBasic 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
items:
welcome:
material: PAPER
slot: 13
name: "&e&lWelcome!"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Welcome to the Basic menu!"
- "&7This is an example item."
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[message] &aWelcome to the Basic menu!"
close:
material: BARRIER
slot: 22
name: "&c&lClose Menu"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Click to close this menu."
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[close]"
- "[sound] BLOCK_CHEST_CLOSE:1:1"
Server Template
The server template creates a BungeeCord server selector:
title: "&8&l⦠&b&lServer Selector &8&lā¦"
size: 3
items:
hub:
material: NETHER_STAR
slot: 11
name: "&e&lHub Server"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Click to connect to the Hub server."
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[bungee] hub"
- "[message] &eConnecting to Hub server..."
survival:
material: GRASS_BLOCK
slot: 13
name: "&a&lSurvival Server"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Click to connect to the Survival server."
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[bungee] survival"
- "[message] &aConnecting to Survival server..."
creative:
material: GOLDEN_PICKAXE
slot: 15
name: "&6&lCreative Server"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Click to connect to the Creative server."
- "&8āāāāāāāāāāāāāāāā"
flags:
- "HIDE_ATTRIBUTES"
actions:
left:
- "[bungee] creative"
- "[message] &6Connecting to Creative server..."
Warps Template
The warps template creates a teleportation menu for common server locations:
title: "&8&l⦠&a&lWarps Menu &8&lā¦"
size: 4
items:
spawn:
material: BEACON
slot: 10
name: "&e&lSpawn"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Teleport to the main spawn."
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[teleport] spawn"
- "[message] &eTeleporting to spawn..."
mine:
material: DIAMOND_PICKAXE
slot: 12
name: "&b&lMine"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Teleport to the mining area."
- "&8āāāāāāāāāāāāāāāā"
flags:
- "HIDE_ATTRIBUTES"
actions:
left:
- "[teleport] mine"
- "[message] &bTeleporting to mine..."
shop:
material: EMERALD
slot: 14
name: "&a&lShop"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Teleport to the shop area."
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[teleport] shop"
- "[message] &aTeleporting to shop..."
pvp:
material: DIAMOND_SWORD
slot: 16
name: "&c&lPvP Arena"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Teleport to the PvP arena."
- "&8āāāāāāāāāāāāāāāā"
flags:
- "HIDE_ATTRIBUTES"
actions:
left:
- "[teleport] pvp"
- "[message] &cTeleporting to PvP arena..."
Shop Template
The shop template creates category-based shopping menu:
title: "&8&l⦠&6&lShop Menu &8&lā¦"
size: 3
items:
blocks:
material: GRASS_BLOCK
slot: 11
name: "&a&lBlocks"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Browse building blocks for sale."
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[message] &aShop category: Blocks (Not implemented)"
tools:
material: DIAMOND_PICKAXE
slot: 13
name: "&b&lTools"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Browse tools and weapons for sale."
- "&8āāāāāāāāāāāāāāāā"
flags:
- "HIDE_ATTRIBUTES"
actions:
left:
- "[message] &bShop category: Tools (Not implemented)"
misc:
material: CHEST
slot: 15
name: "&e&lMiscellaneous"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Browse miscellaneous items for sale."
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[message] &eShop category: Miscellaneous (Not implemented)"
Customizing Templates
After creating a menu from a template, you can customize it:
- Create from template:
/jmenus create my_menu template_name
- Open editor:
/jmenuedit my_menu
- Modify items: Change materials, names, lore, actions
- Add items: Click empty slots to add new items
- Adjust settings: Change title, size, sounds, etc.
Pro Tip: Templates are just starting points! Feel free to completely customize them to match your server's needs and style.
Template Comparison
Template | Size | Items | Best For |
Basic |
3 rows |
Welcome, Close |
Learning, Simple functionality |
Server |
3 rows |
Hub, Survival, Creative servers |
BungeeCord networks |
Warps |
4 rows |
Spawn, Mine, Shop, PvP warps |
Survival/Factions servers |
Shop |
3 rows |
Blocks, Tools, Misc categories |
Economy servers |
š Placeholders
Placeholders make your menus dynamic by displaying real-time information about players, servers, and more. JMenus supports both built-in placeholders and PlaceholderAPI integration.
Built-in Placeholders
JMenus includes 15+ built-in placeholders that work without any additional plugins:
Player Placeholders
%player_name%
- Player's username
%player_uuid%
- Player's UUID
%player_health%
- Current health
%player_max_health%
- Maximum health
%player_food%
- Food level (0-20)
%player_gamemode%
- Current gamemode
Location Placeholders
%player_world%
- Current world name
%player_x%
- X coordinate
%player_y%
- Y coordinate
%player_z%
- Z coordinate
Server Placeholders
%server_name%
- Server name
%server_online%
- Online players count
%server_max_players%
- Maximum players
%server_version%
- Server version
PlaceholderAPI Integration
When PlaceholderAPI is installed, you can use thousands of additional placeholders:
# Economy placeholders (Vault)
%vault_eco_balance%
%vault_eco_balance_formatted%
# Permission placeholders
%luckperms_primary_group_name%
%luckperms_prefix%
%luckperms_suffix%
# Player statistics
%statistic_deaths%
%statistic_mob_kills%
%statistic_player_kills%
# World placeholders
%player_world%
%player_world_size%
%player_world_time%
# Date and time
%server_time_HH:mm:ss%
%server_time_dd/MM/yyyy%
# Custom plugin placeholders
%towny_town_name%
%factions_faction_name%
%mcmmo_level_mining%
Installation: Simply install PlaceholderAPI and relevant expansion packs. JMenus will automatically detect and support all available placeholders!
Using Placeholders in Menus
Placeholders can be used in multiple places within your menus:
In Menu Titles
title: "&e&lWelcome &f%player_name%&e!"
title: "&6&lShop &7- &fBalance: &a$%vault_eco_balance%"
title: "&c&lPvP Stats &7- &fKills: &a%statistic_player_kills%"
In Item Names
items:
player_info:
material: PLAYER_HEAD
slot: 13
name: "&e&l%player_name%'s Profile"
lore:
- "&7World: &f%player_world%"
- "&7Health: &c%player_health%&7/&c%player_max_health%"
- "&7Gamemode: &a%player_gamemode%"
In Item Lore
items:
server_info:
material: COMPASS
slot: 22
name: "&6&lServer Information"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Server: &f%server_name%"
- "&7Players: &a%server_online%&7/&a%server_max_players%"
- "&7Your Balance: &6$%vault_eco_balance%"
- "&7Time: &f%server_time_HH:mm:ss%"
- "&8āāāāāāāāāāāāāāāā"
In Action Messages
actions:
left:
- "[message] &aWelcome %player_name%!"
- "[message] &7Your balance: &6$%vault_eco_balance%"
- "[broadcast] &e%player_name% &7opened the shop!"
Dynamic Menu Examples
Player Profile Menu
title: "&e&l%player_name%'s Profile"
size: 3
items:
player_head:
material: PLAYER_HEAD
slot: 13
name: "&e&l%player_name%"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7UUID: &f%player_uuid%"
- "&7World: &a%player_world%"
- "&7Location: &f%player_x%, %player_y%, %player_z%"
- "&7Health: &c%player_health%&7/&c%player_max_health%"
- "&7Food: &6%player_food%&7/&620"
- "&7Gamemode: &b%player_gamemode%"
- "&8āāāāāāāāāāāāāāāā"
balance_info:
material: GOLD_INGOT
slot: 11
name: "&6&lEconomy"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Balance: &a$%vault_eco_balance_formatted%"
- "&7Rank: &e%luckperms_primary_group_name%"
- "&8āāāāāāāāāāāāāāāā"
statistics:
material: BOOK
slot: 15
name: "&b&lStatistics"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Deaths: &c%statistic_deaths%"
- "&7Mob Kills: &a%statistic_mob_kills%"
- "&7Player Kills: &e%statistic_player_kills%"
- "&8āāāāāāāāāāāāāāāā"
Server Status Menu
title: "&6&lServer Status"
size: 3
items:
server_info:
material: COMPASS
slot: 13
name: "&6&lServer Information"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Name: &f%server_name%"
- "&7Version: &f%server_version%"
- "&7Players: &a%server_online%&7/&a%server_max_players%"
- "&7Time: &f%server_time_HH:mm:ss%"
- "&7Date: &f%server_time_dd/MM/yyyy%"
- "&8āāāāāāāāāāāāāāāā"
world_info:
material: GRASS_BLOCK
slot: 11
name: "&a&lWorld Information"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Current World: &f%player_world%"
- "&7World Time: &f%player_world_time%"
- "&8āāāāāāāāāāāāāāāā"
Placeholder Performance
Performance Note: Placeholders are processed when menus open and when items are updated. Heavy use of complex placeholders may impact performance on busy servers.
Best Practices
- Cache-friendly placeholders: Use static placeholders when possible
- Limit complex placeholders: Avoid database-heavy placeholders in frequently-opened menus
- Update frequency: Consider how often menu data needs to refresh
- Menu size: Larger menus with many placeholders take longer to process
Troubleshooting Placeholders
Issue | Cause | Solution |
Placeholder not replaced |
PlaceholderAPI not installed |
Install PlaceholderAPI and required expansions |
Shows placeholder text |
Expansion not downloaded |
Use /papi ecloud download <expansion> |
Built-in placeholder broken |
Typo in placeholder name |
Check spelling and case sensitivity |
Menu lag with placeholders |
Too many complex placeholders |
Reduce placeholder usage or optimize |
š BungeeCord Support
BungeeCord Integration allows JMenus to send players between servers in your network seamlessly. Perfect for server selectors and network navigation menus.
Setup Requirements
š BungeeCord Server
A properly configured BungeeCord proxy server
- Multiple backend servers
- Proper server configurations
- Network connectivity
š¦ Plugin Installation
JMenus installed on backend servers
- Install on all backend servers
- Same menu configurations
- Consistent permissions
āļø Configuration
Enable BungeeCord support in config
- Set bungee.enabled: true
- Configure server list
- Set up aliases
Configuration Setup
Configure BungeeCord support in your config.yml
:
bungee:
# Enable BungeeCord support
enabled: true
# Server ping interval (in seconds)
ping-interval: 60
# Server info message format
server-info-format: "&fPlayers: &a%count%/%max%"
# Show server status in menu items
show-status: true
# Default servers (for auto-complete in commands)
servers:
- "hub"
- "survival"
- "creative"
- "skyblock"
- "factions"
- "minigames"
- "prison"
- "pvp"
- "staff"
# You can define aliases for server names
aliases:
main: "hub"
build: "creative"
lobby: "hub"
games: "minigames"
Using the Bungee Action
The [bungee]
action sends players to other servers:
Basic Usage
# Send to specific server
[bungee] hub
[bungee] survival
[bungee] creative
[bungee] minigames
# Using aliases
[bungee] main # Goes to "hub" server
[bungee] build # Goes to "creative" server
[bungee] lobby # Goes to "hub" server
Complete Server Selector Example
title: "&8&l⦠&b&lServer Selector &8&lā¦"
size: 3
fill-item:
material: BLACK_STAINED_GLASS_PANE
name: " "
items:
hub:
material: NETHER_STAR
slot: 10
name: "&e&lHub Server"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7The main lobby server"
- "&7Players: &a%bungee_hub_online%"
- "&7Status: &a%bungee_hub_status%"
- ""
- "&eLeft-click to connect!"
- "&8āāāāāāāāāāāāāāāā"
glow: true
actions:
left:
- "[message] &eConnecting to Hub server..."
- "[sound] ENTITY_ENDERMAN_TELEPORT:1:1"
- "[bungee] hub"
survival:
material: GRASS_BLOCK
slot: 12
name: "&a&lSurvival Server"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Classic survival gameplay"
- "&7Players: &a%bungee_survival_online%"
- "&7Status: &a%bungee_survival_status%"
- ""
- "&eLeft-click to connect!"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[message] &aConnecting to Survival server..."
- "[sound] ENTITY_ENDERMAN_TELEPORT:1:1"
- "[bungee] survival"
creative:
material: GOLDEN_PICKAXE
slot: 14
name: "&6&lCreative Server"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Unlimited building potential"
- "&7Players: &a%bungee_creative_online%"
- "&7Status: &a%bungee_creative_status%"
- ""
- "&eLeft-click to connect!"
- "&8āāāāāāāāāāāāāāāā"
flags:
- "HIDE_ATTRIBUTES"
actions:
left:
- "[message] &6Connecting to Creative server..."
- "[sound] ENTITY_ENDERMAN_TELEPORT:1:1"
- "[bungee] creative"
minigames:
material: BOW
slot: 16
name: "&c&lMinigames Server"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Fun minigames and competitions"
- "&7Players: &a%bungee_minigames_online%"
- "&7Status: &a%bungee_minigames_status%"
- ""
- "&eLeft-click to connect!"
- "&8āāāāāāāāāāāāāāāā"
flags:
- "HIDE_ATTRIBUTES"
actions:
left:
- "[message] &cConnecting to Minigames server..."
- "[sound] ENTITY_ENDERMAN_TELEPORT:1:1"
- "[bungee] minigames
Advanced Features
Server Status Integration
When enabled, JMenus can show server status in menus:
# Server status placeholders (if supported)
%bungee_hub_online% # Players online
%bungee_hub_max% # Max players
%bungee_hub_status% # Online/Offline status
%bungee_survival_online% # Players on survival
%bungee_creative_online% # Players on creative
Conditional Server Access
items:
staff_server:
material: COMMAND_BLOCK
slot: 22
name: "&4&lStaff Server"
actions:
left:
# Only staff can access
- "[permission] staff.access:[bungee] staff"
- "[permission] staff.access:[message] &aConnecting to staff server..."
- "[permission] !staff.access:[message] &cStaff only!"
- "[permission] !staff.access:[sound] ENTITY_VILLAGER_NO:1:1"
Fallback Handling
items:
server_with_fallback:
material: DIAMOND
slot: 13
name: "&b&lPremium Server"
actions:
left:
- "[message] &eConnecting to premium server..."
- "[bungee] premium"
# If premium server fails, go to hub
- "[message] &cPremium server unavailable, sending to hub..."
- "[bungee] hub"
Network Menu Synchronization
Keep menus consistent across your network:
Shared Menu Files
- Use identical menu files across all servers
- Sync the
menus/
folder between servers
- Use file synchronization tools or scripts
- Consider version control (Git) for menu management
Permission Consistency
- Use the same permission plugin across servers
- Ensure consistent permission setups
- Test menu access on all servers
- Document permission requirements
Troubleshooting BungeeCord
Issue | Possible Cause | Solution |
Players don't transfer |
BungeeCord not configured |
Check BungeeCord setup and server registration |
Server not found error |
Wrong server name |
Verify server names in BungeeCord config |
Permission errors |
Different permission setups |
Sync permissions across servers |
Menu not working on some servers |
Plugin not installed everywhere |
Install JMenus on all backend servers |
Status not showing |
Feature not supported yet |
Use static text or wait for updates |
Note: BungeeCord support has not been tested with Velocity proxy yet. It should work with standard BungeeCord setups. Report any issues on GitHub!
š° Economy Integration
Economy Integration through Vault allows JMenus to handle money transactions, create shops, charge for services, and reward players with currency.
Setup Requirements
Install Vault
Download and install the Vault plugin from official sources. Vault acts as a bridge between JMenus and economy plugins.
Install Economy Plugin
Install a Vault-compatible economy plugin such as:
- EssentialsX Economy - Most popular choice
- CMI Economy - Feature-rich alternative
- TNE (The New Economy) - Advanced economy system
- iConomy - Classic economy plugin
Restart Server
Restart your server to ensure all plugins load correctly and Vault detects your economy plugin.
Verify Installation
Test the money action in a menu to ensure everything works properly.
Money Action Usage
The [money]
action supports three operations:
š° Give Money
Add money to player's balance
[money] give:1000
šø Take Money
Remove money from player's balance
[money] take:500
š Check Money
Verify player has enough money
[money] has:1000
Money Action Syntax
# Give money to player
[money] give:amount
# Take money from player (only if they have enough)
[money] take:amount
# Check if player has enough money (returns true/false)
[money] has:amount
# Examples:
[money] give:1000 # Give $1000
[money] give:50.5 # Give $50.50 (supports decimals)
[money] take:500 # Take $500 (if player has it)
[money] has:1000 # Check if player has $1000
Shop Menu Examples
Simple Item Shop
title: "&6&lā &e&lItem Shop &6&lā"
size: 4
fill-item:
material: BLACK_STAINED_GLASS_PANE
name: " "
items:
diamond_sword:
material: DIAMOND_SWORD
slot: 10
name: "&b&lDiamond Sword"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7A sharp diamond sword"
- "&7Price: &a$500"
- ""
- "&eLeft-click to purchase"
- "&8āāāāāāāāāāāāāāāā"
flags:
- "HIDE_ATTRIBUTES"
actions:
left:
# Check if player has enough money
- "[money] has:500"
# Take the money
- "[money] take:500"
# Give the item
- "[console] give %player_name% diamond_sword 1"
# Confirmation message
- "[message] &aPurchased Diamond Sword for $500!"
- "[sound] ENTITY_EXPERIENCE_ORB_PICKUP:1:1"
diamond_pickaxe:
material: DIAMOND_PICKAXE
slot: 12
name: "&b&lDiamond Pickaxe"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7A durable diamond pickaxe"
- "&7Price: &a$750"
- ""
- "&eLeft-click to purchase"
- "&8āāāāāāāāāāāāāāāā"
flags:
- "HIDE_ATTRIBUTES"
actions:
left:
- "[money] has:750"
- "[money] take:750"
- "[console] give %player_name% diamond_pickaxe 1"
- "[message] &aPurchased Diamond Pickaxe for $750!"
- "[sound] ENTITY_EXPERIENCE_ORB_PICKUP:1:1"
golden_apple:
material: GOLDEN_APPLE
slot: 14
name: "&6&lGolden Apple"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7A delicious golden apple"
- "&7Price: &a$100"
- ""
- "&eLeft-click: Buy 1 ($100)"
- "&eRight-click: Buy 5 ($450)"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
# Buy 1 apple
- "[money] has:100"
- "[money] take:100"
- "[console] give %player_name% golden_apple 1"
- "[message] &aPurchased 1 Golden Apple for $100!"
- "[sound] ENTITY_EXPERIENCE_ORB_PICKUP:1:1"
right:
# Buy 5 apples (bulk discount)
- "[money] has:450"
- "[money] take:450"
- "[console] give %player_name% golden_apple 5"
- "[message] &aPurchased 5 Golden Apples for $450!"
- "[sound] ENTITY_EXPERIENCE_ORB_PICKUP:1:1.5"
balance_info:
material: GOLD_INGOT
slot: 16
name: "&e&lYour Balance"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Current Balance:"
- "&a$%vault_eco_balance_formatted%"
- "&8āāāāāāāāāāāāāāāā"
VIP Rank Purchase
items:
vip_rank:
material: DIAMOND
slot: 22
name: "&e&lVIP Rank - &6$1000"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Purchase VIP rank for:"
- "&6$1000"
- ""
- "&7VIP Perks:"
- "&8⢠&aAccess to VIP areas"
- "&8⢠&aDaily rewards"
- "&8⢠&aColored chat"
- "&8⢠&aKit VIP"
- ""
- "&eLeft-click to purchase"
- "&8āāāāāāāāāāāāāāāā"
glow: true
actions:
left:
# Check if already VIP
- "[permission] vip.use:[message] &cYou already have VIP!"
- "[permission] vip.use:[sound] ENTITY_VILLAGER_NO:1:1"
# Process purchase for non-VIP players
- "[permission] !vip.use:[money] has:1000"
- "[permission] !vip.use:[money] take:1000"
- "[permission] !vip.use:[console] lp user %player_name% parent add vip"
- "[permission] !vip.use:[message] &a&lVIP rank purchased! Welcome to VIP!"
- "[permission] !vip.use:[sound] ENTITY_PLAYER_LEVELUP:1:2"
- "[permission] !vip.use:[broadcast] &e%player_name% &7just became &e&lVIP&7!"
- "[permission] !vip.use:[close]"
Service Menu (Teleports, Heals, etc.)
title: "&5&lServices Menu"
size: 3
items:
heal_service:
material: POTION
slot: 11
name: "&c&lHeal - &6$50"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Restore full health and hunger"
- "&7Price: &a$50"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[money] has:50"
- "[money] take:50"
- "[console] heal %player_name%"
- "[console] feed %player_name%"
- "[message] &aHealed for $50!"
- "[sound] ENTITY_PLAYER_LEVELUP:1:1"
repair_service:
material: ANVIL
slot: 13
name: "&7&lRepair All - &6$200"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Repair all items in inventory"
- "&7Price: &a$200"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[money] has:200"
- "[money] take:200"
- "[console] repair all %player_name%"
- "[message] &aAll items repaired for $200!"
- "[sound] BLOCK_ANVIL_USE:1:1"
random_tp:
material: ENDER_PEARL
slot: 15
name: "&d&lRandom Teleport - &6$25"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Teleport to a random location"
- "&7Price: &a$25"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[money] has:25"
- "[money] take:25"
- "[console] rtp %player_name%"
- "[message] &dRandomly teleported for $25!"
- "[sound] ENTITY_ENDERMAN_TELEPORT:1:1"
Error Handling
The money action automatically handles common errors:
Scenario | Behavior | Player Experience |
Insufficient funds (take) |
Action fails, no money taken |
Nothing happens, subsequent actions don't execute |
Insufficient funds (has) |
Returns false |
Can be combined with permission action for fallbacks |
Vault not installed |
Action fails silently |
Menu works but money actions do nothing |
No economy plugin |
Action fails silently |
Menu works but money actions do nothing |
Invalid amount |
Action fails |
Nothing happens |
Advanced Economy Features
Insufficient Funds Handling
items:
expensive_item:
material: NETHERITE_SWORD
slot: 13
name: "&4&lNetherite Sword - &6$5000"
actions:
left:
# Try to purchase
- "[money] has:5000"
- "[money] take:5000"
- "[console] give %player_name% netherite_sword 1"
- "[message] &aPurchased Netherite Sword!"
# Fallback for insufficient funds (won't execute if purchase succeeds)
- "[message] &cInsufficient funds! You need $5000."
- "[sound] ENTITY_VILLAGER_NO:1:1"
Dynamic Pricing with Placeholders
items:
rank_upgrade:
material: EMERALD
slot: 13
name: "&a&lRank Upgrade"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Current Rank: &e%luckperms_primary_group_name%"
- "&7Your Balance: &a$%vault_eco_balance_formatted%"
- "&7Upgrade Cost: &6$%rank_upgrade_cost%"
- "&8āāāāāāāāāāāāāāāā"
Bulk Purchase Options
items:
food_stack:
material: COOKED_BEEF
slot: 13
name: "&6&lCooked Beef"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&eLeft-click: &7Buy 1 (&a$5&7)"
- "&eRight-click: &7Buy 16 (&a$75&7)"
- "&eShift-click: &7Buy 64 (&a$280&7)"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[money] has:5"
- "[money] take:5"
- "[console] give %player_name% cooked_beef 1"
- "[message] &aBought 1 Cooked Beef for $5!"
right:
- "[money] has:75"
- "[money] take:75"
- "[console] give %player_name% cooked_beef 16"
- "[message] &aBought 16 Cooked Beef for $75!"
shift_left:
- "[money] has:280"
- "[money] take:280"
- "[console] give %player_name% cooked_beef 64"
- "[message] &aBought 64 Cooked Beef for $280!"
Pro Tip: Combine money actions with permission actions to create sophisticated shop systems with rank-based discounts and exclusive items!
š§ API Documentation
JMenus API allows other plugins to interact with JMenus programmatically. Create menus, register actions, and integrate with the menu system.
Getting Started
Adding JMenus as Dependency
// Maven (pom.xml)
me
JMenus
1.1.0
provided
// Gradle (build.gradle)
dependencies {
compileOnly 'me:JMenus:1.1.0'
}
Plugin Dependencies
# plugin.yml
depend: [JMenus]
# or
softdepend: [JMenus]
Basic API Usage
Getting JMenus Instance
import me.jMenus.JMenus;
public class MyPlugin extends JavaPlugin {
private JMenus jMenus;
@Override
public void onEnable() {
// Get JMenus instance
jMenus = JMenus.getInstance();
if (jMenus == null) {
getLogger().warning("JMenus not found!");
return;
}
// Use JMenus API
registerCustomActions();
}
}
Opening Menus Programmatically
import me.jMenus.gui.MenuManager;
import org.bukkit.entity.Player;
public void openMenuForPlayer(Player player, String menuId) {
MenuManager menuManager = jMenus.getMenuManager();
// Check if menu exists
if (menuManager.hasMenu(menuId)) {
// Open the menu
boolean success = menuManager.openMenu(player, menuId);
if (success) {
player.sendMessage("Menu opened successfully!");
} else {
player.sendMessage("Failed to open menu.");
}
} else {
player.sendMessage("Menu not found: " + menuId);
}
}
Getting Available Menus
import me.jMenus.gui.Menu;
import java.util.Map;
public void listAllMenus() {
MenuManager menuManager = jMenus.getMenuManager();
Map menus = menuManager.getMenus();
getLogger().info("Available menus:");
for (String menuId : menus.keySet()) {
Menu menu = menus.get(menuId);
getLogger().info("- " + menuId + " (" + menu.getTitle() + ")");
}
}
Creating Custom Actions
Implementing the Action Interface
import me.jMenus.actions.Action;
import org.bukkit.entity.Player;
public class CustomAction implements Action {
@Override
public String getType() {
return "custom"; // Action name: [custom]
}
@Override
public boolean execute(Player player, String args) {
// Your custom logic here
if (args == null || args.isEmpty()) {
return false;
}
// Example: [custom] hello:world
String[] parts = args.split(":");
String command = parts[0];
String argument = parts.length > 1 ? parts[1] : "";
switch (command.toLowerCase()) {
case "hello":
player.sendMessage("Hello " + argument + "!");
return true;
case "teleport":
// Custom teleport logic
return handleTeleport(player, argument);
default:
return false;
}
}
private boolean handleTeleport(Player player, String location) {
// Your teleport logic
player.sendMessage("Teleporting to " + location);
return true;
}
}
Registering Custom Actions
import me.jMenus.actions.ActionManager;
public void registerCustomActions() {
ActionManager actionManager = jMenus.getActionManager();
// Register your custom action
actionManager.registerAction(new CustomAction());
getLogger().info("Custom actions registered!");
}
// Unregister when plugin disables
@Override
public void onDisable() {
if (jMenus != null) {
ActionManager actionManager = jMenus.getActionManager();
actionManager.unregisterAction("custom");
}
}
Advanced Action Example
public class EconomyAction implements Action {
private final MyPlugin plugin;
public EconomyAction(MyPlugin plugin) {
this.plugin = plugin;
}
@Override
public String getType() {
return "myeconomy";
}
@Override
public boolean execute(Player player, String args) {
// Format: [myeconomy] operation:amount:currency
// Example: [myeconomy] give:1000:coins
String[] parts = args.split(":");
if (parts.length < 2) {
return false;
}
String operation = parts[0];
double amount;
try {
amount = Double.parseDouble(parts[1]);
} catch (NumberFormatException e) {
return false;
}
String currency = parts.length > 2 ? parts[2] : "default";
switch (operation.toLowerCase()) {
case "give":
return givePlayerMoney(player, amount, currency);
case "take":
return takePlayerMoney(player, amount, currency);
case "has":
return playerHasMoney(player, amount, currency);
default:
return false;
}
}
private boolean givePlayerMoney(Player player, double amount, String currency) {
// Your economy integration
plugin.getEconomy().addMoney(player, amount, currency);
player.sendMessage("Received " + amount + " " + currency + "!");
return true;
}
private boolean takePlayerMoney(Player player, double amount, String currency) {
if (plugin.getEconomy().hasMoney(player, amount, currency)) {
plugin.getEconomy().takeMoney(player, amount, currency);
return true;
}
return false;
}
private boolean playerHasMoney(Player player, double amount, String currency) {
return plugin.getEconomy().hasMoney(player, amount, currency);
}
}
Creating Menus Programmatically
Using the Menu Builder
import me.jMenus.utils.MenuImpl;
import me.jMenus.utils.ItemBuilder;
import me.jMenus.gui.Menu;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
public Menu createCustomMenu() {
// Create menu builder
MenuImpl.Builder builder = new MenuImpl.Builder(jMenus, "api_menu")
.title("&e&lAPI Created Menu")
.size(3)
.openSound("BLOCK_CHEST_OPEN:1:1")
.closeSound("BLOCK_CHEST_CLOSE:1:1");
// Create fill item
ItemStack fillItem = new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE)
.name(" ")
.build();
builder.fillItem(fillItem);
// Create menu items
ItemStack welcomeItem = new ItemBuilder(Material.PAPER)
.name("&a&lWelcome!")
.lore("&7Created via API", "&7Click me!")
.build();
Map welcomeActions = new HashMap<>();
welcomeActions.put("left", new String[]{
"[message] &aWelcome to the API menu!",
"[sound] ENTITY_PLAYER_LEVELUP:1:1"
});
builder.item(13, welcomeItem, welcomeActions);
// Add close button
ItemStack closeItem = new ItemBuilder(Material.BARRIER)
.name("&c&lClose")
.build();
Map closeActions = new HashMap<>();
closeActions.put("left", new String[]{"[close]"});
builder.item(22, closeItem, closeActions);
return builder.build();
}
public void registerApiMenu() {
Menu menu = createCustomMenu();
jMenus.getMenuManager().registerMenu(menu);
getLogger().info("API menu registered!");
}
Event Handling
Listening to Menu Events
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import me.jMenus.gui.MenuHolder;
public class MenuEventListener implements Listener {
@EventHandler
public void onMenuClick(InventoryClickEvent event) {
// Check if it's a JMenus menu
if (event.getInventory().getHolder() instanceof MenuHolder) {
MenuHolder holder = (MenuHolder) event.getInventory().getHolder();
Menu menu = holder.getMenu();
// Log menu interaction
getLogger().info("Player " + event.getWhoClicked().getName() +
" clicked in menu: " + menu.getId());
// Custom logic based on menu
if (menu.getId().equals("special_menu")) {
// Special handling for specific menu
handleSpecialMenuClick(event, menu);
}
}
}
@EventHandler
public void onMenuClose(InventoryCloseEvent event) {
if (event.getInventory().getHolder() instanceof MenuHolder) {
MenuHolder holder = (MenuHolder) event.getInventory().getHolder();
Menu menu = holder.getMenu();
// Custom logic when menu closes
getLogger().info("Player " + event.getPlayer().getName() +
" closed menu: " + menu.getId());
}
}
private void handleSpecialMenuClick(InventoryClickEvent event, Menu menu) {
// Your special menu logic
Player player = (Player) event.getWhoClicked();
int slot = event.getSlot();
// Example: Track clicks for analytics
trackMenuClick(player, menu.getId(), slot);
}
}
Utility Methods
Checking Plugin State
public boolean isJMenusEnabled() {
return jMenus != null && jMenus.isEnabled();
}
public boolean hasMenu(String menuId) {
return isJMenusEnabled() && jMenus.getMenuManager().hasMenu(menuId);
}
public boolean isPlayerInMenu(Player player) {
if (!isJMenusEnabled()) return false;
return jMenus.getMenuManager().getOpenMenu(player).isPresent();
}
public Optional
Menu Utilities
import me.jMenus.utils.ColorUtils;
import me.jMenus.utils.PlaceholderUtils;
public class MenuUtils {
public static String colorize(String text) {
return ColorUtils.colorize(text);
}
public static String setPlaceholders(Player player, String text) {
return PlaceholderUtils.setPlaceholders(player, text);
}
public static ItemStack processItem(Player player, ItemStack item) {
return PlaceholderUtils.processItem(player, item);
}
public static void openMenuSafely(Player player, String menuId) {
if (JMenus.getInstance() != null) {
JMenus.getInstance().getMenuManager().openMenu(player, menuId);
}
}
}
Note: The API is designed for developers. Always check if JMenus is loaded before using API methods, and handle cases where JMenus might be disabled or not available.
š§ Troubleshooting
Common Issues
Issue | Symptoms | Solution |
Plugin won't load |
Error in console, JMenus commands not working |
Check Java version (21+), server compatibility, download from official sources |
Menus don't open |
Commands work but no GUI opens |
Check permissions, verify menu files exist, check for errors in menu configuration |
Items don't show |
Menu opens but appears empty |
Verify item configuration syntax, check material names, ensure slots are valid |
Actions don't work |
Items show but clicking does nothing |
Check action syntax, verify permissions for actions, test with simple actions |
Placeholders not working |
Placeholder text shows instead of values |
Install PlaceholderAPI, download required expansions, check placeholder syntax |
Money actions failing |
Economy actions do nothing |
Install Vault and economy plugin, verify integration, check player balance |
BungeeCord not working |
Players don't transfer between servers |
Configure BungeeCord properly, verify server names, check network connectivity |
Editor won't open |
Editor command fails or shows errors |
Check jmenus.editor permission, verify menu exists, ensure not in creative mode |
Debug Mode
Enable debug mode for detailed troubleshooting information:
# In config.yml
settings:
debug: true
Then reload the plugin:
/jmenus reload
Debug Information: Debug mode provides detailed console output about menu loading, action execution, and error details.
Configuration Validation
Common YAML Errors
Error | Cause | Fix |
Indentation errors |
Inconsistent spacing/tabs |
Use only spaces (2 or 4), never tabs |
Invalid characters |
Special characters in strings |
Quote strings with special characters |
Missing colons |
YAML syntax error |
Ensure all keys end with colon (:) |
List formatting |
Incorrect list syntax |
Use proper dash (-) format for lists |
Validating Menu Files
# Use online YAML validators
# Check for syntax errors before saving
# Test with simple configurations first
# Example valid structure:
title: "&eTest Menu"
size: 3
items:
test_item:
material: STONE
slot: 13
name: "&aTest Item"
actions:
left:
- "[message] Test!"
Permission Issues
Testing Permissions
# Check if player has permission
/lp user <player> permission check jmenus.open
# Give permission temporarily
/lp user <player> permission set jmenus.open true
# Check effective permissions
/lp user <player> permission info
Permission Hierarchy
# Grant all JMenus permissions
jmenus.*
# Basic usage permissions
jmenus.use
jmenus.open
# Admin permissions
jmenus.reload
jmenus.create
jmenus.delete
jmenus.editor
Performance Issues
Optimization Tips
- Limit placeholders: Use only necessary placeholders to reduce processing time
- Optimize menu size: Smaller menus load faster
- Reduce complex actions: Minimize chained actions for better performance
- Cache static content: Use static text where possible instead of dynamic placeholders
- Monitor server resources: Check CPU and memory usage
Performance Monitoring
# Check server TPS
/tps
# Monitor plugin performance
/timings on
/timings paste
# Check memory usage
/gc
Log File Analysis
Important Log Patterns
# Plugin loading
[INFO] Loading JMenus v1.1.0
# Menu loading success
[INFO] Loaded menu: shop from file: shop.yml
# Menu loading errors
[ERROR] Error loading menu file: shop.yml
[WARN] Invalid material: INVALID_ITEM
# Action execution
[DEBUG] Executing action: [message] Hello!
[WARN] Unknown action type: invalid_action
# Permission errors
[WARN] Player lacks permission: jmenus.open
Log Location: Server logs are typically in logs/latest.log
. Use debug mode for more detailed information.
Getting Help
š Report Bugs
GitHub Issues for bug reports
- Include error logs
- Describe reproduction steps
- Mention server version
- List other installed plugins
š¬ Community Support
Discord for general help
- Discord: J2D
- Ask for configuration help
- Share menu examples
- Get quick answers
š Documentation
This wiki for complete information
- Read relevant sections
- Check examples
- Follow tutorials
- Review configuration
š Self-Diagnosis
Tools for troubleshooting
- Enable debug mode
- Check server console
- Validate YAML syntax
- Test with minimal config
š Examples
Real-World Examples showcasing different types of menus you can create with JMenus. Copy and customize these examples for your server!
Complete Menu Examples
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 players"
- "&7⢠Ban/unban players"
- "&7⢠Teleport to players"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[menu] player_management"
server_control:
material: COMMAND_BLOCK
slot: 12
name: "&6&lServer Control"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Control server functions"
- "&7⢠Restart server"
- "&7⢠Change weather"
- "&7⢠Set time"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[menu] server_control"
world_management:
material: GRASS_BLOCK
slot: 14
name: "&a&lWorld Management"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Manage worlds"
- "&7⢠Create worlds"
- "&7⢠Load/unload worlds"
- "&7⢠World settings"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[menu] world_management"
economy_control:
material: GOLD_INGOT
slot: 16
name: "&6&lEconomy Control"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Manage server economy"
- "&7⢠Add/remove money"
- "&7⢠View balances"
- "&7⢠Reset economy"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[menu] economy_control"
quick_actions:
material: EMERALD
slot: 22
name: "&a&lQuick Actions"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&eLeft: &7Heal all players"
- "&eRight: &7Feed all players"
- "&eShift+Left: &7Clear weather"
- "&eShift+Right: &7Day time"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[console] heal *"
- "[broadcast] &aAll players have been healed!"
right:
- "[console] feed *"
- "[broadcast] &aAll players have been fed!"
shift_left:
- "[console] weather clear"
- "[broadcast] &aWeather cleared!"
shift_right:
- "[console] time set day"
- "[broadcast] &aTime set to day!"
plugin_manager:
material: REDSTONE
slot: 31
name: "&c&lPlugin Manager"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Manage server plugins"
- "&7⢠Reload configs"
- "&7⢠Enable/disable plugins"
- "&7⢠View plugin info"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[menu] plugin_manager"
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:
- "&8āāāāāāāāāāāāāāāā"
- "&7Claim your daily VIP kit"
- "&7Contains valuable items!"
- ""
- "&7Cooldown: &e24 hours"
- "&8āāāāāāāāāāāāāāāā"
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"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Toggle flight mode"
- "&7VIP exclusive feature!"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[console] fly %player_name%"
- "[message] &aFlight toggled!"
- "[sound] ENTITY_BAT_TAKEOFF:1:1"
vip_warp:
material: ENDER_PEARL
slot: 15
name: "&d&lVIP Warp"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Teleport to VIP area"
- "&7Exclusive VIP zone!"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[teleport] vip"
- "[message] &dWelcome to the VIP area!"
- "[sound] ENTITY_ENDERMAN_TELEPORT:1:1"
economy_bonus:
material: GOLD_INGOT
slot: 20
name: "&6&lDaily Bonus"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Claim daily money bonus"
- "&7Amount: &a$1000"
- ""
- "&7Cooldown: &e24 hours"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[money] give:1000"
- "[message] &aReceived $1000 daily bonus!"
- "[sound] ENTITY_EXPERIENCE_ORB_PICKUP:1:2"
exclusive_shop:
material: EMERALD
slot: 22
name: "&a&lVIP Shop"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Access exclusive VIP items"
- "&7Special discounts!"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[menu] vip_shop"
cosmetics:
material: LEATHER_CHESTPLATE
slot: 24
name: "&5&lCosmetics"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7VIP cosmetic items"
- "&7⢠Particle effects"
- "&7⢠Chat colors"
- "&7⢠Name tags"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[menu] vip_cosmetics"
Comprehensive Shop System
title: "&6&lš &e&lMega Shop &6&lš"
size: 6
fill-item:
material: GRAY_STAINED_GLASS_PANE
name: " "
items:
# Navigation
balance_display:
material: GOLD_INGOT
slot: 4
name: "&e&lYour Balance"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Current Balance:"
- "&a$%vault_eco_balance_formatted%"
- "&8āāāāāāāāāāāāāāāā"
# Categories
blocks_category:
material: GRASS_BLOCK
slot: 19
name: "&a&lBuilding Blocks"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Essential building materials"
- "&7⢠Stone variants"
- "&7⢠Wood types"
- "&7⢠Decorative blocks"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[menu] shop_blocks"
tools_category:
material: DIAMOND_PICKAXE
slot: 21
name: "&b&lTools & Weapons"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7High-quality equipment"
- "&7⢠Enchanted tools"
- "&7⢠Weapons"
- "&7⢠Armor sets"
- "&8āāāāāāāāāāāāāāāā"
flags:
- "HIDE_ATTRIBUTES"
actions:
left:
- "[menu] shop_tools"
food_category:
material: GOLDEN_APPLE
slot: 23
name: "&6&lFood & Potions"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Sustenance and buffs"
- "&7⢠Healing items"
- "&7⢠Food supplies"
- "&7⢠Buff potions"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[menu] shop_food"
redstone_category:
material: REDSTONE
slot: 25
name: "&c&lRedstone & Tech"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Technical components"
- "&7⢠Redstone items"
- "&7⢠Rails & minecarts"
- "&7⢠Mechanisms"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[menu] shop_redstone"
# Quick buy items
quick_heal:
material: GOLDEN_APPLE
slot: 37
name: "&c&lQuick Heal - &6$50"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Instantly restore health"
- "&7and hunger"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[money] has:50"
- "[money] take:50"
- "[console] heal %player_name%"
- "[console] feed %player_name%"
- "[message] &aHealed for $50!"
- "[sound] ENTITY_PLAYER_LEVELUP:1:1"
quick_repair:
material: ANVIL
slot: 39
name: "&7&lQuick Repair - &6$100"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Repair all items"
- "&7in your inventory"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[money] has:100"
- "[money] take:100"
- "[console] repair all %player_name%"
- "[message] &aAll items repaired for $100!"
- "[sound] BLOCK_ANVIL_USE:1:1"
# Special offers
daily_deal:
material: DIAMOND
slot: 41
name: "&e&lā Daily Deal ā"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Today's special offer!"
- "&7Diamond - &c50% OFF"
- "&7Price: &a$250 &7(was $500)"
- "&8āāāāāāāāāāāāāāāā"
glow: true
actions:
left:
- "[money] has:250"
- "[money] take:250"
- "[console] give %player_name% diamond 1"
- "[message] &aDaily deal purchased!"
- "[sound] ENTITY_EXPERIENCE_ORB_PICKUP:1:2"
vip_section:
material: EMERALD_BLOCK
slot: 43
name: "&a&lVIP Section"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Exclusive VIP items"
- "&7Special discounts!"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[permission] vip.use:[menu] vip_shop"
- "[permission] !vip.use:[message] &cVIP only section!"
- "[permission] !vip.use:[sound] ENTITY_VILLAGER_NO:1:1"
# Navigation
previous_page:
material: ARROW
slot: 45
name: "&7ā Previous"
actions:
left:
- "[message] &cNo previous page!"
main_menu:
material: COMPASS
slot: 49
name: "&e&lMain Menu"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Return to main menu"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[menu] main_menu"
next_page:
material: ARROW
slot: 53
name: "&7Next ā"
actions:
left:
- "[menu] shop_page2"
Specialized Menu Examples
Punishment Menu (Staff)
title: "&c&lPunishment Menu"
size: 3
permission: "staff.punish"
items:
kick_player:
material: IRON_BOOT
slot: 10
name: "&6&lKick Player"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Kick a player from server"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[message] &eType player name to kick:"
- "[close]"
# Would need custom input handling
temp_ban:
material: CLOCK
slot: 12
name: "&c&lTemporary Ban"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Temporarily ban player"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[menu] temp_ban_duration"
permanent_ban:
material: BARRIER
slot: 14
name: "&4&lPermanent Ban"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Permanently ban player"
- "&c&lUse with caution!"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[menu] confirm_perm_ban"
mute_player:
material: BOOK
slot: 16
name: "&e&lMute Player"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Prevent player from chatting"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[menu] mute_duration"
Minigame Selector
title: "&5&lš® &d&lMinigames &5&lš®"
size: 4
items:
parkour:
material: LEATHER_BOOTS
slot: 10
name: "&a&lParkour"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Jump and climb challenges"
- "&7Players: &e%parkour_players%"
- "&7Record: &6%parkour_record%"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[teleport] parkour"
- "[message] &aWelcome to Parkour!"
pvp_arena:
material: DIAMOND_SWORD
slot: 12
name: "&c&lPvP Arena"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Battle other players"
- "&7Players: &e%pvp_players%"
- "&7Your K/D: &6%player_kd%"
- "&8āāāāāāāāāāāāāāāā"
flags:
- "HIDE_ATTRIBUTES"
actions:
left:
- "[teleport] pvp"
- "[message] &cEntering PvP Arena!"
spleef:
material: DIAMOND_SHOVEL
slot: 14
name: "&6&lSpleef"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Dig blocks beneath opponents"
- "&7Queue: &e%spleef_queue%"
- "&7Wins: &6%spleef_wins%"
- "&8āāāāāāāāāāāāāāāā"
flags:
- "HIDE_ATTRIBUTES"
actions:
left:
- "[console] spleef join %player_name%"
- "[message] &6Joined Spleef queue!"
racing:
material: MINECART
slot: 16
name: "&b&lRacing"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Race through tracks"
- "&7Best time: &e%racing_time%"
- "&7Next race: &6%racing_next%"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[console] race join %player_name%"
- "[message] &bJoined racing!"
Advanced Integration Examples
Multi-Server Network Hub
title: "&b&lš &3&lNetwork Hub &b&lš"
size: 5
items:
# Server status display
survival_server:
material: GRASS_BLOCK
slot: 19
name: "&a&lSurvival Server"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Status: &a%bungee_survival_status%"
- "&7Players: &e%bungee_survival_online%&7/&e%bungee_survival_max%"
- "&7Uptime: &f%survival_uptime%"
- ""
- "&eLeft-click to join!"
- "&eRight-click for info"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[bungee] survival"
- "[message] &aConnecting to Survival..."
right:
- "[menu] survival_info"
creative_server:
material: GOLDEN_PICKAXE
slot: 21
name: "&6&lCreative Server"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Status: &a%bungee_creative_status%"
- "&7Players: &e%bungee_creative_online%&7/&e%bungee_creative_max%"
- "&7Plots: &f%creative_plots_used%&7/&f%creative_plots_total%"
- ""
- "&eLeft-click to join!"
- "&8āāāāāāāāāāāāāāāā"
flags:
- "HIDE_ATTRIBUTES"
actions:
left:
- "[bungee] creative"
- "[message] &6Connecting to Creative..."
minigames_server:
material: BOW
slot: 23
name: "&c&lMinigames Server"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Status: &a%bungee_minigames_status%"
- "&7Players: &e%bungee_minigames_online%&7/&e%bungee_minigames_max%"
- "&7Active games: &f%minigames_active%"
- ""
- "&eLeft-click to join!"
- "&8āāāāāāāāāāāāāāāā"
flags:
- "HIDE_ATTRIBUTES"
actions:
left:
- "[bungee] minigames"
- "[message] &cConnecting to Minigames..."
skyblock_server:
material: GRASS_BLOCK
slot: 25
name: "&9&lSkyBlock Server"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Status: &a%bungee_skyblock_status%"
- "&7Players: &e%bungee_skyblock_online%&7/&e%bungee_skyblock_max%"
- "&7Islands: &f%skyblock_islands%"
- ""
- "&eLeft-click to join!"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[bungee] skyblock"
- "[message] &9Connecting to SkyBlock..."
# Network features
friend_system:
material: PLAYER_HEAD
slot: 40
name: "&e&lFriends"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Online friends: &a%friends_online%"
- "&7Total friends: &f%friends_total%"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[menu] friends_menu"
network_stats:
material: BOOK
slot: 42
name: "&6&lNetwork Stats"
lore:
- "&8āāāāāāāāāāāāāāāā"
- "&7Total players: &e%network_total_online%"
- "&7Your playtime: &f%player_total_playtime%"
- "&7Rank: &e%player_network_rank%"
- "&8āāāāāāāāāāāāāāāā"
actions:
left:
- "[menu] detailed_stats"
Customization Tips: These examples are templates! Modify them to match your server's theme, add your own items, change the styling, and integrate with your specific plugins and systems.