Skip to main content

Migrate from DeluxeMenus

Coming from DeluxeMenus? You don't have to rewrite anything. zMenu converts your existing DeluxeMenus menus into zMenu inventories with a single command: items, slots, click commands, requirements, open commands and more are translated automatically.

/zm convert deluxemenus

That's it. Every menu of plugins/DeluxeMenus/gui_menus/ is converted, and you keep your whole configuration while gaining everything zMenu offers on top of it: pagination, patterns, player data, dialogs, Bedrock forms, hot reload and much more.

Why migrate?
  • Zero rewrite: your menus are converted in seconds, not rewritten by hand over days.
  • Nothing hidden: everything that cannot be converted exactly is listed at the top of the converted file and in the console.
  • Safe by design: a feature zMenu cannot reproduce never grants more than DeluxeMenus did. An unsupported requirement always denies, and an unsupported action stops the actions after it.
  • No DeluxeMenus needed: the converter reads the YAML files directly. DeluxeMenus does not need to be installed, or even enabled.

Quick Start​

  1. Copy your DeluxeMenus folder into plugins/ (or keep it where it is) so that the menus are in plugins/DeluxeMenus/gui_menus/.
  2. Run /zm convert deluxemenus (or /zm convert dm) from the console or in game.
  3. Read the result: each menu shows ✔ when converted or ✘ with the reason when it was not.
  4. Open the converted files and check the Not converted exactly list at the top of each file, if any.
  5. Disable DeluxeMenus (remove its jar), otherwise its open commands conflict with the converted ones.
  6. Run /zm reload to load the converted inventories and their commands.
Combine it with the hot reload

Enable the hot reload before converting: the converted menus are then loaded as soon as they are written, and every fix you make while reviewing them is applied instantly, without /zm reload.

Command​

CommandPermissionDescription
/zm convert deluxemenuszmenu.convertConvert every menu of plugins/DeluxeMenus/gui_menus/ (subfolders included)
/zm convert deluxemenus <menu>zmenu.convertConvert a single menu, by file name, with or without .yml
/zm convert dm [menu]zmenu.convertShort alias

Example output:

✔ shop → inventories/converted/deluxemenu/shop.yml + command
✔ ranks → inventories/converted/deluxemenu/ranks.yml + command (2 not converted exactly, see the top of the file)
✘ broken: this is not a DeluxeMenus menu
Converted 2/3 menus. Review them, then run /zm reload to load them.

Where are the converted files?​

WhatLocation
Source menus (read only)plugins/DeluxeMenus/gui_menus/**/*.yml
Converted inventoriesplugins/zMenu/inventories/converted/deluxemenu/<menu>.yml
Converted open commandsplugins/zMenu/commands/converted/deluxemenu/<menu>.yml
  • Your DeluxeMenus files are never modified.
  • An already converted menu is never overwritten: it is skipped with already converted, delete ... to convert it again. Delete the converted file to convert the menu again. Command files are not overwritten either.
  • A file that has neither menu_title nor items is skipped with this is not a DeluxeMenus menu.

Each converted file starts with a header like this:

# Converted from the DeluxeMenus menu shop.yml by zMenu.
# Review it before use: https://docs.groupez.dev/zmenu/getting-started
#
# Not converted exactly:
# - shop.yml: the action "[meta] set points INTEGER 5" is not supported, the actions after it will not run
# - shop.yml: the requirement money_check "has meta" is not supported, it always denies
name: '&8Shop'
size: 27
items:
# ...

The open command​

The DeluxeMenus open_command becomes a zMenu custom command:

# DeluxeMenus
open_command:
- shop
- store
# plugins/zMenu/commands/converted/deluxemenu/shop.yml
commands:
shop:
command: shop
aliases:
- store
inventory: shop

The first command becomes the zMenu command, the others become its aliases.

What is converted​

DeluxeMenuszMenuNotes
menu_title (or name / title)nameWhen a list is used, the first line is kept
inventory_typetypeAn invalid type falls back to a chest (warning)
sizesizeRounded to a valid chest size, from 9 to 54 (warning when changed)
update_interval (seconds)update-intervalConverted to milliseconds
open_commandcustom commandFirst entry = command, others = aliases
open_commandsopen-actionsSee actions
close_commandsclose-actionsSee actions
open_requirementopen-requirementSee requirements
itemsitemsSee items

Items​

DeluxeMenuszMenuNotes
slot, slots, pageslot, slots, page
prioritypriority + elseItems sharing a slot are chained by priority, exactly like DeluxeMenus
updateupdate
view_requirementview-requirement
click_commands + click_requirementclick requirementAll click types
left_click_commands, right_click_commands, shift_left_click_commands, shift_right_click_commands, middle_click_commands (+ their *_click_requirement)click requirementsOne requirement per click type
display_name, lore, amount, model_data...same keysRead as-is by zMenu
dynamic_amountamountPlaceholders are supported
datadamage
enchantments (SHARPNESS;5)enchantments (SHARPNESS,5)
item_flagsflags
hide_tooltiphide-tooltip
enchantment_glint_overrideenchantment-glint
rarityitem-rarity
tooltip_styletooltip-style
item_modelitem-model

Materials​

DeluxeMenus materialzMenu material
head-<player>Player head of <player> (placeholders supported)
texture-<hash>basehead-<base64>
placeholder-<placeholder><placeholder>
main_hand, off_handarmor:HAND, armor:OFF_HAND
armor_helmet, armor_chestplate, armor_leggings, armor_bootsarmor:HEAD, armor:CHEST, armor:LEGS, armor:FEET
water_bottlePOTION with potion: WATER
hdb-<id> / headdb-<id>hdb:<id>
itemsadder-<id>itemsadder:<id>
oraxen-<id>oraxen:<id>
nexo-<id>nexo:<id>
mmoitems-<id>mmoitems:<id>
craftengine-<id>craftengine:<id>
executableitems-<id>ei:<id>
executableblocks-<id>eb:<id>
Any vanilla materialUnchanged

Actions​

DeluxeMenus click, open and close commands are converted into zMenu actions. The <delay=ticks> and <chance=percent> modifiers are kept, wherever they appear in the line.

DeluxeMenuszMenu action
[close]close
[console]console-command
[player]player-command
[commandevent]player-command (with command event)
[chat]chat
[message] / [minimessage]message (legacy colors / MiniMessage)
[broadcast] / [minibroadcast]broadcast (legacy colors / MiniMessage)
[actionbar]action-bar
[openguimenu] / [openmenu]inventory (arguments kept)
[connect]connect
[refresh]refresh
[sound] / [rawsound]sound (volume and pitch kept)
[broadcastsound] / [broadcastrawsound]broadcast-sound
[broadcastsoundworld] / [broadcastrawsoundworld]broadcast-sound, played to the whole server (warning)
[takemoney] / [givemoney]withdraw / deposit (Vault)
[giveexp] / [takeexp]/xp add console command (L suffix = levels)

Any other tag ([meta], [json], [givepermission]...) is reported, and the actions after it do not run, so a menu can never give a reward without the step that was supposed to come before it.

Requirements​

open_requirement, view_requirement and click requirements are converted into zMenu requirements, with their deny_commands and success_commands.

DeluxeMenus typezMenuNegation (!)
has permissionpermissionYes
has permissionsOne permission per entryNo, and minimum must be the number of permissions
string equalsplaceholderYes
string equals ignorecaseplaceholderYes, with a literal output
string containsplaceholderYes, with a literal output
string contains ignorecaseregexYes, with a literal output
>, >=, ==, <=, <placeholder (numeric)No
!=placeholder (compared as text, warning)-
regex matchesregexYes
string lengthregexNo
has moneymoney (Vault)No
has exp (with level: true)placeholder on %player_level%No
has item (material, model_data, amount)itemNo

Long names (has permission), short names (hasperm, perm) and symbols are all recognized, ignoring case.

minimum_requirements is supported when every requirement is optional. When required and optional requirements are mixed, zMenu requires all of them and reports it.

What is not converted​

Everything below is listed at the top of the converted file and logged in the console with a [DeluxeMenus] prefix:

FeatureBehavior
Unsupported action tagsReported, the actions after it do not run
Unsupported requirement types (or unsupported negation / options)Reported, the requirement always denies
has item with strict, name, lore, data, armor, offhand, name_contains, lore_contains, model_data_componentReported, always denies
stop_at_successEvery requirement is checked
refresh (menu option)Only items with update: true are refreshed
args (menu arguments)Not converted, use command arguments
enable_open_requirements_bypass_permissionsNot converted
Item options rgb, banner_meta, base_color, potion_effects, trim_material, trim_pattern, model_data_component, light_level, lore_append_modeNot converted, use the zMenu item options or components
Materials stack-... and simpleitemgenerator-...Not converted
Always review the result

The converter does the heavy lifting, but your server is unique. Open each converted inventory once, test its buttons, and fix the lines listed under Not converted exactly before going live.

FAQ​

Can I convert again after changing a DeluxeMenus menu? Yes. Delete the converted file in inventories/converted/deluxemenu/ (and its command in commands/converted/deluxemenu/ if you want it regenerated), then run the command again.

Can I move the converted files? Yes. They are regular zMenu inventories: move or rename them anywhere in inventories/. Remember that the inventory name used by /zm open and by the command file is the file name.

Do I need to keep DeluxeMenus installed? No. The converter only reads the files of plugins/DeluxeMenus/gui_menus/. Once converted, remove DeluxeMenus: if it stays enabled, zMenu warns you that its open commands conflict with the converted ones.

My menu uses placeholders. Do they still work? Yes. PlaceholderAPI placeholders are kept as-is and resolved by zMenu.

Next Steps​

Copyright © 2026 GroupeZ|Build #loading...|-