Development builds: https://ci.extendedclip.com/job/DeluxeMenus/
DeluxeMenus is the all-in-one inventory GUI menu plugin!
You can create GUI menus that open with custom commands that will show stats or perform actions specific to the player who opened it.
Your menus are fully configurable. You can create menus that show specific items to different players, or perform different actions depending on what JavaScript requirement they have for a specific slot in a certain GUI.
Please Note:
- PlaceholderAPI must be installed for the plugin to correctly function. Click the placeholders button in the heading to see all the various placeholders you can use within the plugin.
- Java 11 or higher is required to use version 1.13.4 and above.

Commands
-
/<menuOpenCommandYouChoose>
Opens the menu for yourself
Permissions are defined at will to use this. -
/dm open <menuName>
Opens the menu for yourself
deluxemenus.open -
/dm open <menuName> <player>
Opens the menu for another player
deluxemenus.open.others -
/dm list
Lists all menus you have access to
deluxemenus.list -
/dm reload
Reloads the menus and settings
deluxemenus.reload -
/dm execute <player> <action>
Perform an action on the target player
Restricted to OP/Console

The power of customization is in your hands with DeluxeMenus.
You can create menus that are very simple (such as a server selector menu), or very complex menus such as a working hangman game.
The possibilities are as far as your imagination takes you.
You can learn how to configure and build menus here.

This plugin utilizes bStats to collect anonymous statistics
https://bstats.org/plugin/bukkit/DeluxeMenus
Hey there! It's been a quick moment since we last updated you all. Here's a whole heap of new features and changes.
One important change that has happened since our last update is DeluxeMenus is now an open sourced project on GitHub, so feel free to help us on future updates or just follow along with changes as they happen.
https://github.com/HelpChat/DeluxeMenus/
## Fixes And Changes:
- Fixed smithing tables being limited to 3 out of 4 slots in 1.20+.
- Fixed
material: placeholder-not properly updating when reloading the menu (using/dm reload). - Fixed tipped arrows not supporting the
potion_effectoption. model_datasupports negative values (for versions that still use the old option).- Fixed armor materials showing stone instead of air when armor was not placed in the respective slot.
- Fixed target set in
/dm open <menu> -p:<target>not being used to parse placeholders inside actions. - Removed
hide_effectsoption as this item flag was removed. - Fixed
update_intervalchanging to 10 if value is set to 1. - Changed
/dm listcommand. It is now paginated. To get the old list, simply use/dm list all. - Fixed
[sound]action on 1.21.3 and newer versions. - Fixed lore containing the new line symbol
\nnot properly being updated whenupdate_intervalandupdateoptions were enabled. - Fixed
[commandevent]action. The internal behavior was changed from a CommandPreProcessEvent to do the same as the[player]action.
## The New Stuff:
- Added argument requirements.
<details>
<summary>Example</summary>
``
yaml
menu_title: "{player}'s Profile"
size: 9
open_command: dprofile
register_command: true
args:
player:
requirements:
regex:
type: "regex matches"
input: "{player}"
regex: "^[a-zA-Z]{2,16}$"
deny_commands:
- "[message] That's not a valid player!"
length:
type: "string length"
input: "{player}"
min: 2
max: 32
deny_commands:
- "[message] Player must be between 2 and 32 characters long."
player:
type: "is object"
input: "{player}"
object: "player"
deny_commands:
- "[message] Must be a player's username or UUID."
count:
requirements:
size:
type: ">"
input: "{count}"
output: "5"
deny_commands:
- "[message] Count must be at least 5."
items:
health:
slot: 0
material: STONE
display_name: "{player}'s health => {count}"
lore:
- "%parseother_{{player}}_{player_health}%"
`
</details>
- Added a new requirement type
string length. It has 3 options:input (required): The string used in the requirementmin (required): The minimum length the string should bemax (optional): The maximum length the string should beAdded a new requirement type is object. It has 2 options:input (required): The value to be checkedobject (required): The type of object to check for This requirement attempts to parse the given input as a certain type of Java object. Supported objects are: int, double, uuid, and player. (player supports both player name and UUID)
- Added support for MMOItems materials
material: mmoitems-ITEMTYPE:ITEMIDAdded support for ExecutableBlocks materials material: executableblocks-ITEMIDAdded support for ExecutableItems materials material: executableitems-ITEMIDAdded support for SimpleItemGenerator materials material: simpleitemgenerator-ITEMIDAdded support for Nexo materials material: nexo-ITEMIDNew lore_append_mode option for items. In case you are using materials from different plugins such as MMOItems, they come with their own lore. This option decides what to do with the lore you specify inside the menu. Valid options: IGNORE, OVERRIDE, TOP, BOTTOM. Default value is OVERRIDE.New light_level option. Takes a number from 0 to 15 and can be used to change the light level of the new LIGHT item.Added new trim_material and trim_pattern options to set armor trims for armors. Valid values can be found here: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/inventory/meta/trim/TrimMaterial.html
https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/inventory/meta/trim/TrimPattern.html
- Added a new
damage option. It sets the damage of an item such as armorAdded support for arguments to be used with the [opengui] and [openguimenu] actions. Example: - '[openguimenu] MENU1 arg1 arg2'. The arguments are not required and maintain the old behavior if they are not specified.Added new PlaceholderAPI placeholders: %deluxemenus_is_in_menu%, %deluxemenus_opened_menu%, %deluxemenus_last_menu%%deluxemenus_opened_menu% - Returns the ID of the menu that the player currently has open%deluxemenus_has_open_menu% - Returns yes/no if a user has a menu opened%deluxemenus_previously_opened% - Returns the previous ID of the menu that the player had openedAdded a new requirement type has permissions. It works just like has permission but it takes in a list of permissions. It also has a minimum option to only check for a number of permissions from the list.
<details>
<summary>Example</summary>
`yaml
<type>_requirement:
requirements:
perms:
type: "has permissions"
minimum: 1
permissions:
- perms.1
- perms.2
`
</details>
- Added support for item hooks inside the
has item requirement type. Example: material: itemsadder-<id>Added new item options: hide_tooltip, enchantment_glint_override, rarity, tooltip_style, and item_modelhide_tooltip - Hides the tooltip of the item completelyenchantment_glint_override - If true, the item will glint, even without enchantments; if false, the item will not glint, even with enchantmentsrarity - Change the item rarity. Valid item rarities: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/inventory/ItemRarity.htmltooltip_style - Use custom sprites for tooltip background and frameitem_model - Change the item modelAdded new item options: nbt_byte, nbt_bytes, nbt_short, nbt_shorts. They are used for setting short and byte valuesAdded tab completion for the /dm ... commandsAdded new commands for managing Metadata
<details>
<summary>Metadata Command Reference</summary>
Commands for handling metadata (with support for placeholders):
show: Gets the stored value at the specified key as long as it matches the specified typelist: Lists all key-value pairs of a specified typeset: Sets a value of specified type at the specified key (if a value exists at the given key, it will override it only if the type matches)remove: Removes a value of specified type from the specified key (as long as the existing value matches the given type)add: Used for addition on number types (if no value exists at the given key yet, the addition will be done on a 0 value)subtract: Used for subtraction on number types (if no value exists at the given key yet, the subtraction will be done on a 0 value)switch: Used for switching boolean values. Since BOOLEAN type is just an alias for String, it will also work for String types as long as the values are true or false (case-insensitive)
</details>
- Added a new item option:
model_data_component. This adds support for the new custom model data component
<details>
<summary>Example</summary>
`yaml
items:
test:
material: dirt
slot: 0
model_data_component:
strings: ["string1", "string2"]
floats: [1, 2, 3]
flags: ["true", "false", "true"]
colors: ["255, 255, 255", "0, 0, 0"]
`
</details>
## Other Important Changes:
- Placeholders are parsed before arguments. To change back to the old behavior add
arguments_support_placeholders: true to the menus you want to revert the change for. Long rant/explanation: This was done for security reasons. Some placeholders do more than simply return values. They execute code based on input values. Arguments are unsanitized user input. So this could lead to some issues. If you're sure that your placeholders don't have weird behaviors that can be taken advantage of, re-enable this option.
- Deprecated the following options:
hide_attributes, hide_enchantments, hide_unbreakable. The item_flags options should be used instead.Deprecated the data option. The damage` option should be used instead.## Limitations:
- NBT options are not currently supported for 1.21.4+. We're investigating the usage of this particular feature to determine whether it should be brought back.
## Thanks:
We want to give a quick shoutout to all those who contributed to this release, BlitzOffline, cj89898, Kqliber, Starmism, iGabyTM, Oribuin, LoJoSho, darbyjack, DongShaoNB, Tanguygab, MemencioPerez, Krakenied, galsever, ValeraShimchuck, xmorose, Boy0000, BitByLogics, LagClear & more.
Also thanks to those on the [Discord](http://discord.gg/helpchat) who have been testing early dev builds over on our [Jenkins](https://ci.extendedclip.com/job/DeluxeMenus/)!
As always, if you have any issues or questions feel free to jump on our [Discord](http://discord.gg/helpchat).


