MiaoMenu

The optimal menu solution for multi-environments (probably lol)

4

Quick challenge

How far can you run before the mobs catch you?

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*

ADS