MiaoMenu
The optimal menu solution for multi-environments (probably lol)
Quick challenge
How far can you run before the mobs catch you?
Minecraft check
Confirm your run
Complete the quick check to get your code.
MiaoMenu
🐱 MiaoMenu — The menu plugin that actually gets it right
> *Do what suits you best, make the difficult simple.* That's the idea.
---
Sound familiar?
| Frustrating stuff | Other plugins | MiaoMenu | |---|---|---| | Bedrock players can't see menus | Need a separate plugin | Auto-detected, native support | | Every config change means a reload | `/reload` over and over | Save the file, you're done — 0.5-second hot-reload | | Cross-server menus are a pain | Complex setups required | BungeeCord / Velocity built in | | Players lose the menu item | No protection | NBT-tagged clock, survives death | | Folia breaks everything | Console spam | Runs natively on Folia |
---
What it does
🎯 One config, both editions
MiaoMenu checks whether a player is on Java or Bedrock and serves the right UI automatically:
- Bedrock players get the classic chest inventory (1–6 rows, up to 54 slots) - Bedrock players get a native form UI designed for touch screens(need Floodgate)
You write the menu logic once. The plugin handles the rest.
⚡ Hot-reload that actually works
Powered by Java's `WatchService` with a 0.5-second debounce. Edit a YAML file, hit save — the changes go live immediately. No commands needed.
(There's still a `/dgm reload` command if you prefer doing things manually. Moreover, tested with over 10 reloads, no memory leaks detected.)
🕰️ The Time Mirror (menu clock)
Every player receives a clock item tagged with NBT data:
- Checked on login — if it's missing from their inventory, it gets replaced automatically. No duplicates. - Protected on death — the clock never drops, and it reappears after respawn. - Right-click to open the default menu instantly. - Uniquely identified via NBT, so it won't clash with other items.
🔗 Cross-server teleportation
Built-in support for Velocity and Velocity proxy setups. The plugin detects which one you're running and configures itself.
```yaml
config.yml — one line to enable
settings: velocity-network: true ```
Pair it with a server-selector menu and players can hop between servers in one click:
```yaml
server-selector.yml
survival: slot: 12 material: DIAMOND_SWORD display_name: "&c&lSurvival" left_click_commands: - "[player] server survival" - "[message] &aConnecting to survival..." - "[close]" ```
🎨 Flexible menu configuration
Java Edition — straightforward YAML:
```yaml menu_title: "&6&lMain Menu &7| &fServer Name" rows: 6
items: server_info: slot: 10 material: KNOWLEDGE_BOOK display_name: "&e&lServer Info" lore: - "&7Click to view server information" - "&fOnline: &a%server_online%&f/&a%server_max_players%" left_click_commands: - "[message] &6=== Server Info ===" - "[player] list" - "[close]" ```
Bedrock Edition — native forms:
```yaml menu: title: "§6§lMain Menu" items: - text: "§e§lServer Infon§7Click for details" icon: "textures/items/book_enchanted" icon_type: "path" command: "dgeysermenu open info" execute_as: "player" ```
🛠 Action system
Five built-in action types cover the usual interactions:
| Action | Syntax | What it does | |---|---|---| | Run as player | `[player] spawn` | The player executes the command | | Run as console | `[cmd] give %player% diamond 1` | Console executes the command | | Send a message | `[message] &aWelcome back!` | Sends chat text to the player | | Close the menu | `[close]` | Closes the current menu | | Open another menu | `[menu] shop` | Opens a different menu (nesting supported) |
You can bind separate actions to left-click and right-click:
```yaml left_click_commands: - "[player] spawn" right_click_commands: - "[close]" ```
🧩 Plugin integrations
| Plugin | What you get | |---|---| | bStats | Full PAPI variable support — player stats, economy, online count, whatever you need | | bStats | Automatic Bedrock detection, no extra setup | | bStats | Use custom items as menu icons | | bStats | Anonymous usage metrics, bundled in |
🎵 Menu sounds
Pick any Minecraft sound to play when a menu opens:
```yaml settings: open-menu-sound: enabled: true sound: "entity.experience_orb.pickup" volume: 1.0 pitch: 1.0 ```
🍃 Lightweight & Folia-ready
- Minimal footprint — core features only, no bloat. - Detects Folia at startup and switches to the correct scheduler automatically. - Built on Paper 1.21.8+ API.
---
Getting started
Installation
1. Drop the JAR into your server's `plugins` folder. 2. Restart the server. 3. Open `plugins/MiaoMenu/` — sample menus are generated automatically. 4. Edit configs to match your server; changes apply on save.
Commands
| Command | Description | Permission | |---|---|---| | `/dgm open <menu>` | Opens a menu | `dgeysermenu.use` | | `/dgm reload` | Reloads configs (rarely needed) | `dgeysermenu.reload` | | `/dgm help` | Shows help | `dgeysermenu.use` | | `/getmenuclock` | Gives you a Time Mirror | `dgeysermenu.admin` |
> Every command has Tab completion — no need to type the whole thing out.
Permissions
```yaml dgeysermenu.use # Basic access (everyone by default) dgeysermenu.admin # Admin tools (OP by default) dgeysermenu.reload # Reload command (OP by default) dgeysermenu.menu.* # Per-menu access control ```
---
File layout
``` MiaoMenu/ ├── java_menus/ # Java Edition menus │ ├── test.yml # Sample main menu │ └── server-selector.yml # Server selector ├── bedrock_menus/ # Bedrock Edition menus │ └── test.yml # Sample main menu └── config.yml # Plugin settings ```
---
Going further
PlaceholderAPI variables
```yaml items: player_stats: slot: 22 material: PLAYER_HEAD display_name: "&b%player_name%" lore: - "&fLevel: &e%player_level%" - "&fBalance: &6%vault_eco_balance%" - "&fPlaytime: &b%player_time_hours% hours" ```
Nested menus
```yaml left_click_commands: - "[menu] shop" - "[message] &2Welcome to the shop!" ```
CraftEngine custom items
```yaml
config.yml
settings: craftengine: enabled: true fallback-material: STONE ```
```yaml
In a menu file
items: custom_sword: material: "my_pack:custom_sword" display_name: "&d&lLegendary Sword" ```
---
Why MiaoMenu?
| | MiaoMenu | Typical alternative | |---|---|---| | Java + Bedrock | Both, out of the box | One or the other | | Hot-reload | 0.5s, automatic | Manual `/reload` | | Menu item | Managed automatically | Hand it out yourself | | Cross-server | BungeeCord + Velocity built in | Needs another plugin | | Folia | Native support | Errors everywhere | | Custom items | CraftEngine integration | Vanilla materials only | | Performance | Lightweight | Heavy | | Price | Free, GPL v3 | Some are paid |
---
Try it now
```bash /dgm open test # Open the sample menu /getmenuclock # Get a Time Mirror /dgm help # See what's available ```
Java + Bedrock. No reload headaches. Five minutes to set up.
---
*If MiaoMenu saves you some time, a ⭐ on GitHub goes a long way.*
*GPL v3 · by MingLi*