MiaoMenu_fork — Dual-Platform Menus, Done Right
One plugin. Two player worlds. MiaoMenu_fork shows Java players a familiar chest GUI and Bedrock players a native Floodgate form — driven by the
same YAML files. No duplicated logic, no double-maintenance. Pair it with
Geyser +
Floodgate and you're done.
It's a hard fork of the original
MiaoMenu tracking Paper / Folia
26.1.2 (with 26.2 alpha compatibility), restructured around a clean
lang/*.yml system and drop-in migration from legacy plugin folders.
Why MiaoMenu_fork?
- One config, two clients. Same view_requirement, conditions, requirement_blocks and material resolver power both Java chest menus and Bedrock forms.
- Drop-in migration. First start auto-imports plugins/dmenu/, plugins/DGeyserMenu/, plugins/dgeysermenu/, or plugins/MiaoMenu/. Old folders are left untouched.
- Speaks your language. All visible text lives in lang/<code>.yml. Ships with English and Traditional Chinese; add a new locale by copying one file.
- Hot-reload everywhere. Edit menus or lang files — they reload live, no server restart.
- Cross-server ready. Velocity / BungeeCord-style server <name> jumps work straight from menu buttons.
- Plays nice with item plugins. CraftEngine, ItemsAdder, MMOItems, HeadDB and Base64 heads all resolved through one material string, with a configurable fallback.
Features
- Native dual-platform menus — chest GUI for Java, Floodgate form for Bedrock, auto-dispatched by player type.
- One smart entry point — /dgm open <menu> works for everyone; the plugin figures out the right surface.
- Condition system — menu-level view_requirement, item-level conditions, reusable requirement_blocks. AND / OR operators, nested children, permission / advancement / progress / scoreboard / placeholder checks.
- Friendly denials — every condition can supply a deny_message and a fallback_menu to redirect rejected players elsewhere.
- Menu clock — auto-given on join, death-protected, right-click opens the default menu. Configurable on/off per server.
- Open-menu sound — optional ambient sound when a menu opens (configurable name / volume / pitch).
- Hot-reload watcher — debounced file watcher for config.yml, java_menus/, bedrock_menus/, lang/.
- Cross-server commands — Velocity / BungeeCord auto-detected; [player] server lobby from a menu just works.
- PlaceholderAPI — full variable support in titles, lore, condition values and lock messages.
- Built-in safety — InputValidator rejects shell-injection-like content in [cmd] actions; per-player click rate-limiter prevents spam.
- Legacy migrator — LegacyDataMigrator scans plugins/<candidate>/ on first start and copies the whole folder in.
- i18n — lang/en.yml (default), lang/zh_TW.yml, plus a setDefaults fallback so missing keys never show as raw strings.
- Backward-compatible — original /dgeysermenu, /dgm, /fluxmenu commands, dgeysermenu.* permissions and existing config.yml keys are preserved.
How it works
- Drop the jar in plugins/. On first start, MiaoMenu_fork creates config.yml, lang/en.yml, lang/zh_TW.yml, plus sample menus under java_menus/ and bedrock_menus/. If a legacy folder exists, its data is auto-imported.
- Edit a YAML menu — both Java and Bedrock players will see the same logical buttons.
- A player runs /dgm open <menu>. The plugin checks view_requirement, picks the right surface (chest or Floodgate form), and renders the menu with all conditions evaluated.
- Save your YAML — hot-reload picks it up. Players opening the menu next see the updated version.
Commands & Permissions
- /dgeysermenu open <menu> — perm dgeysermenu.use — Open a menu by name (Java or Bedrock auto-picked)
- /dgm open <menu> — perm dgeysermenu.use — Short alias for /dgeysermenu
- /fluxmenu open <menu> — perm dgeysermenu.use — Legacy alias (preserved)
- /mmf open <menu> — perm dgeysermenu.use — New fork alias
- /dgm reload — perm dgeysermenu.reload — Reload config, lang files and menu definitions
- /dgm help — perm dgeysermenu.use — Print help, localised
- /getmenuclock — perm dgeysermenu.admin — Grant the caller a menu clock
Permission tree:
dgeysermenu.use (default everyone),
dgeysermenu.admin (default op),
dgeysermenu.reload (default op),
dgeysermenu.* (all).
Configuration
A small
config.yml (language, open-menu sound, default menu, hot-reload toggle, sample auto-gen, proxy mode, fallback material, menu-clock options) plus per-language
lang/<code>.yml for every visible string. Menus go under
java_menus/ and
bedrock_menus/ with parallel YAML schemas. Edit, then
/dgm reload — no restart.
Requirements
- Paper / Folia 26.1.2 (also runs on 26.2 alpha)
- Java 21
- (Optional) Floodgate 2.2.5+ and Geyser 2.10.x for Bedrock support
- (Optional) PlaceholderAPI for %placeholders%
- (Optional) Velocity / BungeeCord proxy for server <name> jumps
- (Optional) CraftEngine / ItemsAdder / MMOItems / HeadDatabase for custom items
Links