DeluxeMenus icon

DeluxeMenus -----

The all in one GUI menu plugin!




1.14.0

An early gift, a DeluxeMenus update!

As we mentioned in the last update, this version drops support for any versions lower than 1.13.2. Please use an earlier build of DeluxeMenus if your server is outdated. The next version is scheduled to remove support from 1.13.2 to 1.14.3.

Now with that out of the way, let's get to the new things!

Features:
  • Added full 1.20 support.
  • Added support for oraxen materials. Ex.: material: oraxen-oraxen_item_id
  • Placeholder materials (placeholder-) now support all DeluxeMenus custom materials. Ex.: material: placeholder-%placeholder_that_returns_head-SomePlayer% will result in a head with the skin of SomePlayer
  • Head materials (head-, basehead-, texture- and hdb-) support placeholders. Ex.: material: basehead-%placeholder_that_returns_base64_encoded_head_url%
  • Oraxen and ItemsAdder materials now support placeholders. Ex.: material: oraxen-%placeholder_that_returns_oraxen_item%
  • Arguments and placeholders are supported by the model_data option. Ex.: model_data: {number_argument}. DeluxeMenus doesn't validate that the arguments input are numbers or not. The menu creator should validate it in open_requirements.
  • Added a new placeholder to check if a meta value is set or not: %deluxemenus_meta_has_value_<key>_<dataType>%
  • Added a new requirement comparator type: !=
Fixes and more:
  • Special materials (basehead, itemsadder, placeholder, etc.) are no longer case sensitive
  • Potions no longer require the rgb option to be set. The default potion color specified by Spigot is used if the option is not specified.
  • Removed entity_type option from items. The option was only needed for 1.12.x and lower versions.
  • Deprecated creating menus inside the config.yml. Menus should be created in separate files instead. A future update of DeluxeMenus will completely disable menu creation inside config.yml. (To clarify, menu names and file locations still need to be declared in config.yml, just menu contents can no longer be declared inside the config file)
Huge thanks to everyone who has worked on this update.
As always if you have any questions or suggestions reach out to us on our Discord, https://helpch.at/discord.
----------, Dec 13, 2023

1.13.7

Hello, welcome to the next update to DeluxeMenus!

As we mentioned in the last update we let you know we would be dropping support for 1.12 soon, this update is the last version that officially supports 1.12.2, 1.13 and 1.13.1. The next version is only expected to work from 1.13.2 and newer, please consider upgrading if you have not yet done so.

Features:
  • Added 1.19.3 and 1.19.4 support.
  • Added support for floating point numbers in the has money requirement.
  • Added a /dm dump config command. Similarily to /dm dump <menu-name>, it creates a paste bin that contains the DeluxeMenus config.yml.
Fixes:
  • Fixed placeholders not working for item data (damage) unless a placeholder was used for the material as well
  • Fixed colors added by placeholders not working in menu titles.
  • Fixed NEW LINE (\n) support in item lore.
  • Fixed enchantments not properly applying to enchanted books.
  • Fixed [json] action breaking on every new minecraft version.
  • Fixed invalid default debug level.
  • Fixed debug level not updating on /dm reload.
  • Fixed error being thrown sometimes when [meta] SWITCH action was being used.
  • Fixed plugin disabling when the [meta] action was being used.
  • Fixed plugin disabling when wrong inventory types were used for menus.
  • Fixed plugin disabling when invalid menu or config syntax is found.
  • Fixed menu still opening when a menu command was executed and another plugin cancelled the PlayerCommandPreprocessEvent.
  • Fixed target player from the /dm open command not persisting when opening a new menu using the [openguimenu] action.
Huge thanks to everyone who has worked on this update.
As always if you have any questions or suggestions reach out to us on our Discord, https://helpch.at/discord.
----------, Mar 26, 2023

1.13.6

Announcements:
We've got a heap of updates for you in this change log, but before that we wanted to let you know we’re dropping 1.12.2 (and lower) support soon. Before you start panicking please read the entire message. We know there are still some of you using this almost 5 years old version of Minecraft ( https://howoldisminecraft1122.today/) and that’s why we’ve decided to announce support dropping before we’re doing it.

We are giving you guys this opportunity to let us know what features DeluxeMenus for 1.12.2 still needs and what bugs there are. You can join the Discord server to do this: discord.gg/helpchat. Here you’ll see a channel called #general-plugins-2 that’s in a forum style. You can create a new post there and add the deluxemenus-1.12.2 tag! So as you can tell, 1.13.7 won’t be the version that will drop 1.12.2 support. Instead, the plan is to release 1.13.7 with most if not all bugs fixed for 1.12.2 and then release 1.14.0 which will drop 1.12.2 (and lower) support.

Features:
  • Added 1.19, 1.19.1, and 1.19.2 support. This is for the [json] action and the nbt tags. All the other stuff is version agnostic and works without an update being required.

  • Added a new item option called model_data:. This should be used over nbt tags when using CustomModelData as this option uses Spigot’s API so it won’t break every version! Example of usage: model_data: 14 instead of nbt_int: CustomModelData:14.

  • Added direct ItemsAdder support for materials: material: itemsadder-<item-name>.
    Example of usage: material: itemsadder-mynamespace:custom_dirt

  • Added banner_meta support to SHIELDS!! You use them the same way as with banners but with one extra option: base_color. This option is required because shields don’t have a base color like banners which can be "white_banner", "red_banner", etc. This option can also be used on banners on versions older than 1.13.

  • Added support for material: AIR!!. This way you can have empty slots that can execute commands. These will literally be filled with air so no lore, no display name, just click requirements and click actions, basically magic.

  • Adjusted if you use a material like armor_chestplate or off_hand, and you add an option like display_name: “&cTest”, These options will now be overridden (just in the menu. Won’t affect the item in your hand at all).

  • Added a new option for items called entity_type:. This is targeted for servers 1.12.2 and lower. This can be used to set specific egg types in a menu instead of just a white egg. This might also work with monster spawners but we cannot guarantee it.
  • Added 2 new actions called [minimessage] and [minibroadcast]. These actions use the cool MiniMessage (https://docs.adventure.kyori.net/minimessage/format.html) format so you can use things like hover, click actions, translatables, etc. without needing to use the ugly [json] action that even breaks on Minecraft updates.

  • Added a new command called /dm dump <menu>. This will create a paste bin with your menu in it and also some other important stuff like server version, java version, etc. This will be very helpful when asking for support. This command requires the deluxemenus.admin permission node to be used.

Bug Fixes:
  • Fixed problems with nbt tags on 1.18.2

  • Fixed arguments sometimes not working in materials, data, nbt tags.

  • Fixed items with slots set to something higher than the actual menu size throwing errors in the console. Now those items will just be ignored and a warning will be sent to the console.

  • Fixed problem with the has item requirement in 1.12.2 where if you would use data: 0, with a material like dirt, it would consider all dirt types as valid instead of just considering normal dirt.

  • Fixed action tags being removed from the entire action instead of just the start. For example, if you had an action [message] &cThis is a [message] action, the message you would end up with would be &cThis is an action.

  • Fixed the RGB option not allowing spaces between values. Before you had to use exactly this “R,G,B” and something like “R, G, B” would throw errors. Now you can even use “R, G , B” and it would still work!

  • Fixed the name_contains, name_ignorecase, lore_contains, and lore_ignorecase options being very broken in the has item requirement. Also as you might notice the options use underscore and not hyphen. This was a mistake in code as the wiki always said they use hyphens.

  • Fixed meta stuff like the [meta] action or meta placeholders requiring an update every time a new Minecraft version is released. From now on they should work without us needing to update the plugin at all.

  • Fixed colors not being parsed in the [broadcast] action.

Changes:
  • The “>=”, “>”, “==”, “<” and “<= requirement types (so basically all comparison types) are now accepting double values instead of just longs. This means “output: 420.69” is now valid. Before it would only accept values like “output: 420”.

  • Moved the command registered and command unregistered messages behind the debug options since it was reported to get pretty annoying for people.

  • We are now caching heads the first time a menu is opened. This means heads filled menus will take significantly less time to load.

  • Completely revamped the Debug option! Now it uses a level system instead of an on/off switch. We are going to tweak message levels in the future so if you feel like a message is not sent at the correct level or it is using the wrong type (info, warning, error) please let us know at discord.gg/helpchat. This does not require any change on your part as the option will automatically update in config.yml. The existent levels are HIGHEST, HIGH, MEDIUM, LOW, and LOWEST. HIGHEST Is the default option and this means that only messages with the highest priority will be shown. It works almost like debug: false used to.

  • Removed the Heads hook. This plugin hasn’t been updated in over 4 years and it doesn’t even have a spigot page anymore so the only way to even get it is by building it yourself. (https://github.com/Sothatsit/Heads).

Huge thanks to Glare, Kaliber, and BlitzOffline for this update!
As always if you have any questions or suggestions reach out to us on our Discord, https://helpch.at/discord.
----------, Aug 17, 2022

1.13.5

This marks our first official update under the new HelpChat team account. Thank you to everyone who has worked on this update!

Features:
  • Adds support for 1.18.2
Bug Fixes:
  • Fixed placeholders not working in the "has money" requirement type.
  • Fixed the delay and chance false flagging for tags like <color>
  • Fixed arguments breaking when "update" is set to true for item.
  • Fixed placeholder in materials (material: placeholder-%something%) not allowing lowercase.
For support and feedback please join our Discord:
https://discord.gg/helpchat
----------, Mar 30, 2022

Hello everybody!

This new update provides a lot of quality-of-life changes and new features to DeluxeMenus.

First off, huge shoutout to @BlitzGamer88 & @Glare for all the time and effort they put into this project.

DeluxeMenus now requires Java 11 or above to run.

Additions:
- Added support for Minecraft 1.16.4, 1.17.x, and 1.18.x
- Added [jsonbroadcast] menu action
- Added some new options for nbt via nbt_strings and nbt_ints which take a list as input
- Added PlaceholderAPI support for RGB when the menu item is a potion
- Added support for Minecraft Texture URL heads as materials (via texture-URL)
- Added [takeexp] and [giveexp] menu actions
- Added "has exp" menu requirement
- Added the ability to reload a specific menu via /dm reload [menu]
- Added a new overhauled design for /dm list which is easier to read and provides hover / click support for easy use
- Added support for WATER_BOTTLES in menus
- Added [broadcastsoundworld] menu action
- Added the ability to use armor presets in menus via armor_helmet, armor_chestplate, armor_leggings, and armor_boots
- Added support for RGB when using FIREWORK_STAR as the menu item
- Added a new overhauled system for the "has item" requirement with a lot more flexibility and options (check wiki for more information)
- Added [placeholder] menu action
- Added [givepermission] and [takepermission] menu actions (uses Vault)
- Added in Nashorn directly to the project to fix servers running above Java 15
- Added in the ability to set item flags on items via the "item_flags" config option (more info: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/inventory/ItemFlag.html)

Fixes:
- Fixed not being able to use decimals in sounds
- Fixed some permission checks not being run when running /dm open
- Fixed op players bypassing all menu open requirements
- Fixed [broadcast] menu action not working properly
- Fixed not being able to use lowercase entries for patterns/colors in banner meta
- Fixed some instances where placeholders are parsed before menu actions are ran
- Fixed arguments not working properly in menu actions
- Fixed some issues that occurred if a skull or other various materials had multiple "-" characters in it
- Fixed a rare issue where a player could end up with an item from a menu
- Fixed an issue with the [broadcastsound] menu action
- Fixed an issue with the [close] menu action not always triggering
- Fixed some weird issues with multiple types of clicks sometimes triggering more than they should
- Fixed an issue with inventory type not being checked and would sometimes throw errors
- Fixed directories not always being created when they are supposed to
- Fixed open_command: [] throwing an error when set as an empty list
- Fixed an issue with the HeadDB hook when the wrong HeadDB plugin was used

For support and feedback please join our Discord:
https://discord.gg/helpchat
----------, Dec 18, 2021

1.13.3

This update adds support for Minecraft 1.16.2 NMS but also fixes quite a bit of things.... This version has been in development / testing for quite some time but I feel its time to update so here it is!

Adds support for 1.16.2 (thanks glare)
Fixes a bunch of HEX stuff with colors in item name/lore. To use hex in item names /lore you need to use the format `&#aaFF00`
Updates dependency to latest PlaceholderAPI
Adds support for slot ranges ex:
Code (Text):
slots:
  - 1-5
This will allow you to assign multiple defined slots in a range to a menu item. (thanks cj)
Fixes display name not updating properly when using dynamic updates to menu items.
Fixes issue where typed args are not passed to the next menu opened if an open menu action is used.
Adds support for typed argument placeholders to be used in almost every type of requirement.
Adds [chat] <message> to have a player talk in chat
Adds support for placeholders to be used in chance/delay functions regarding actions.
Adds support for potions to be added to items with
Code (Text):
potion_effects:
  - 'PotionEffectType;duration;amplifier'
I may have missed a few things but no worries. Just shoot a message in our discord for any concerns or help you may need. You can join

here

Hope all is well with everyone and hope you enjoy this update!
----------, Sep 9, 2020

1.13.2

Added meta

Added a meta system that integrates with the Spigot persistent metadata API. This system allows you to modify / access / check persistent meta associated with a player through requirements, actions, or placeholders.
This meta feature is only available for server versions 1.14 or higher
The following data types are available: STRING, BOOLEAN, INTEGER, LONG, DOUBLE.
An example of meta usage can be found here

New action

Code (YAML):
[meta ] <set/remove/add/subtract/switch> <key> <dataType> <value>
This action modifies the player's meta. The key can be anything you want. add/subtract are for number types. switch is for boolean. all values must be the same type as you specify.

New requirements

Check if the player has the specified meta.
Code (YAML):
type : has meta
key
: "views"
meta_type
: <STRING, BOOLEAN, DOUBLE, LONG, INTEGER>
value
: EXPECTED VALUE
Required fields: key, meta_type, value
If the meta_type is a number format (DOUBLE, LONG, INTEGER) it will check if the player's meta value is greater than or equal to the value
To invert the requirement (Check if the input doesn't match the output) you can simply add the exclamation mark before the type name (like this type: "!has meta").

Check if the player is near a location
Code (YAML):
type : is near
location
: "WORLDNAME,X,Y,Z"
distance
: #
Required fields: location, distance
To invert the requirement (Check if the input doesn't match the output) you can simply add the exclamation mark before the type name (like this type: "!is near").

New placeholder

Code (YAML):
%deluxemenus_meta_<key>_<dataType>_<default_value>%
example:
Code (YAML):
%deluxemenus_meta_OpenAttempts_INTEGER_0%

New command

Code (Text):
/dm execute <player> <action>
This allows you to execute any action string for the player specified. This command requires OP to be used as its real intention is to allow other plugins to perform actions that don't directly support DeluxeMenus. An example of usage:
Code (Text):
/dm execute clip [message] hey<delay=30>

Menu commands are now registered with the
server

This new system allows you to specify if your menu open comands are registered with the server. This fixes an issue where the command typed would display red and be recognized as an unknown command. This also allows your menu command support tab complete. If you would like to use this feature just add the following to your menu file:
Code (YAML):
open_command :
- menu
register_command
: true
Note that changing your menu open commands will require a full restart of the server in order to fix issues with tab completion not updating when a command is added/changed/removed

Revamped args

The args system has been completely overhauled. Use of this feature requires that you have your menu set to register a command as stated above.

To utilize args you must add an option to the menu config:
Code (YAML):
args :
- argument1
- argument2
- argument3
The amount of args required are the amount of strings listed where the top string in the list is the first arg. In the example above the menu would require 3 arguments be typed after the command /menu arg1 arg2 arg3 Args the player typed can be used in menus by using the placeholder {argument1} {argument2} {argument3} etc All expected args except the last arg can only be 1 word, the last expected arg will pass the rest of the args typed ex:
Code (YAML):
args :
- player
- reason
If /menu clip stealing items were typed, {player} would parse to clip and {reason} would parse to stealing items You can add a usage message to output if the minimum length of args is not provided by adding the following to the menu config:
Code (YAML):
args_usage_message : '/menu <player> <reason>'
Notable fixes

fixed Inventory_type not working correctly and allowing items be removed from menus when using inventories such as hopper
RGB and other menu options now allow placeholders to be parsed
shift_right_click actions now work


This version has fixed a ton of bugs and improved many other things that aren't listed above. Thanks to everyone who has been testing these new features by using development builds and providing feedback. Be sure to report any issues to our discord. Visit the wiki to explore all of the features of DeluxeMenus.
----------, May 5, 2020

1.13.1

Features:
  • Implemented a [givemoney] click action type to give money to your players during these hard times
Bug Fixes:
  • Fixed an issue with the default requirements_menu.yml throwing errors
  • Major rewrite to open commands and command arguments so they work
  • Fixed issues with a specific event throwing errors if you were below 1.12
  • Fixed some typos in the default menus

Changes:
  • Improved the efficiency of comparing commands to menus
  • Allow menus to actually not need an open command
  • Changed the command listener priority from lowest to highest
Note: We have played with this on multiple versions and see that it works as intended with all menus simple to complex. We can't guarantee full support for 1.8.8 but it seems that it works just fine. If not blame @ItsMeGlare
----------, Mar 25, 2020

1.13.0

special thanks to the HelpChat team for this update.

This version has been tested quite a bit on 1.15.2. If any issues arise please report them to our discord


Fixed a ton of issues and many internal changes in this version. These changes will not affect the current state of your menus.

Plugin now built against 1.15.2

DeluxeMenus now has new requirement options available to use, which are namely:
  • !has item
  • !has money
  • !has permission
  • !string contains
  • !string equals
  • !string equals ignorecase
  • !regex matches
When these requirements are prefixed with a !, the requirement check is inverted. Ex !has money will check if the player does not have a certain amount of money.

Menu commands now respect other commands with the same label but might have a different arg for the subcommand. Ex:
/kit - opens menu
/kit <kitname> - handled by your kit plugin

Entire configuration system internally refactored. Removed over 1000 lines of bloat code and reworked the entire loading of menus.

Default menus are now provided by actual files rather than being generated by code. New default menus are loaded when the plugin is first ran. No menus are generated in the main config file anymore by default as examples. I would like to migrate everyone over to using dedicated menu files rather than them all be in the config.

Plugin now uses gradle as the build environment.

Full list of changes can be found below.

Changes
#42 (Mar 20, 2020 7:37:32 PM)
  1. Only load finished menus until the others are done (commit: 4e39caa) — Ryan McCarthy / githubweb
  2. Bump version for release (commit: e0d8a5c) — Ryan McCarthy / githubweb
#41 (Mar 20, 2020 7:36:09 PM)
  1. Update requirements_menu.yml (commit: 032c1c5) — noreply / githubweb
  2. Add missing examples and comments. (commit: 14f835a) — 11576465+Andre601 / githubweb
  3. add view_requirement example (commit: ee60968) — 11576465+Andre601 / githubweb
#40 (Mar 11, 2020 2:35:10 PM)
  1. Make open_command optional (commit: e0756c1) — Ryan McCarthy / githubweb
  2. Make sure profile field is accessible (commit: 419bb95) — Ryan McCarthy / githubweb
#39 (Mar 9, 2020 1:21:00 PM)
  1. Small changes (commit: 0096c51) — noreply / githubweb
#38 (Mar 9, 2020 12:09:33 PM)
  1. Default config work (commit: a41cdd7) — Ryan McCarthy / githubweb
  2. Allow placeholders in has money requirement (commit: 754b19c) — Ryan McCarthy / githubweb
  3. Fix slots? (commit: a4e3387) — Ryan McCarthy / githubweb
#37 (Mar 9, 2020 10:41:24 AM)
  1. basics guide for dummies v0.0.2 (commit: fb45144) — Ryan McCarthy / githubweb
  2. remove public modifier (commit: ad40276) — noreply / githubweb
  3. Support for inverted requirements (commit: dc6dd19) — Ryan McCarthy / githubweb
  4. Support for inverted requirements (commit: a77b56f) — Ryan McCarthy / githubweb
  5. Remove toConfigString method as it is no longer used (commit: f1f68fe) — Ryan McCarthy / githubweb
  6. Add support for \n in item lore (commit: 096ac56) — Ryan McCarthy / githubweb
#36 (Mar 6, 2020 9:09:37 AM)
  1. use 1.15.2 API (commit: 8deb94e) — Ryan McCarthy / githubweb
#35 (Mar 6, 2020 9:08:26 AM)
  1. revert changes to listener (commit: 74fe130) — Ryan McCarthy / githubweb
  2. never execute close commands if not specified (commit: 01a42de) — Ryan McCarthy / githubweb
#34 (Mar 6, 2020 4:49:35 AM)
  1. Fix imports (commit: ce945b2) — noreply / githubweb
#33 (Mar 6, 2020 4:45:50 AM)
  1. do not execute close commands on [close] (commit: 691f8b9) — noreply / githubweb
#32 (Mar 6, 2020 4:41:30 AM)
  1. Do not run close commands when the plugin initiated the inventory close (commit: 3e5af9d) — noreply / githubweb
#31 (Mar 6, 2020 3:13:04 AM)
  1. Revert close listener and execute close_commands (commit: b5b8013) — noreply / githubweb
#30 (Mar 6, 2020 3:10:19 AM)
  1. allow close_commands to be executed in closeMenu method without closing inventory (commit: cd1d19a) — noreply / githubweb
#29 (Mar 6, 2020 3:06:44 AM)
  1. close_commands are executed on close (commit: b0b01d4) — noreply / githubweb
#28 (Mar 5, 2020 3:10:01 PM)
  1. enough example menus for now to work on (commit: da0a6a1) — Ryan McCarthy / githubweb
#27 (Mar 5, 2020 2:54:26 PM)
  1. default menu config when a new menu is created (commit: e3d43b9) — Ryan McCarthy / githubweb
  2. give them the basics (commit: be1ee85) — Ryan McCarthy / githubweb
  3. show them the requirements (commit: 469a8de) — Ryan McCarthy / githubweb
  4. give them the secrets (commit: fefd480) — Ryan McCarthy / githubweb
  5. load default menus when created, load config tutorial menus on first startup (commit: 018805f) — Ryan McCarthy / githubweb
#26 (Mar 5, 2020 11:19:05 AM)
  1. menu configuration internals cleanup (commit: 6ee1a77) — Ryan McCarthy / githubweb
#25 (Mar 4, 2020 1:22:56 PM)
  1. Remove duplicate code (commit: cd27c00) — Ryan McCarthy / githubweb
  2. Rename ClickType to ActionType (commit: eb4d674) — Ryan McCarthy / githubweb
#24 (Mar 4, 2020 10:50:15 AM)
  1. Move build number placeholder to build.gradle (commit: 34be25c) — Ryan McCarthy / githubweb
#23 (Mar 4, 2020 9:50:59 AM)
  1. Execute all actions sync (commit: c52bca8) — Ryan McCarthy / githubweb
#19 (Mar 4, 2020 3:25:37 AM)
  1. test push for jenkins (commit: 240b59b) — PiggyPiglet / githubweb
  2. test push for jenkins take 2 (commit: 1aea69a) — PiggyPiglet / githubweb
#18 (Mar 4, 2020 3:20:15 AM)
  1. removed - in the version (commit: d576b4b) — PiggyPiglet / githubweb
#14 (Mar 4, 2020 3:04:07 AM)
  1. Testing jenkins build nums (commit: 5ccd9af) — PiggyPiglet / githubweb
----------, Mar 20, 2020

1.12.0

Another update!

This update adds support for arguments when opening menus with your custom menu commands:

You can now specify a new section in your menu "args". The keys in this config section are the placeholders and will be parsed when using for example {target} (since we specified target below. The value for each key is the amount of words required for each argument when opening the menu. In the example below we can use /punish <target> <time> <reason> and there must be at least 3 arguments after the open command. Setting a value of an argument key to -1 allows every arg to be included in that "arg". NOTE: -1 can only be used as the last "arg" in your arg list in the config which means the arg spans from the start of "reason" until the end of the string provided. If you only want "reason" to allow 1 word, you would specify the value as 1, if you want 2 words, you would specify the value as 2. If you add this "args" option to a menu, the menu will not open if the required arg amount is not provided with the command. You must also specify an "args_usage_message" to tell the person opening the menu the correct usage.

Code (YAML):

args
:
  target
: 1
  time
: 1
  reason
: -1
args_usage_message
: "/punish <player> <time> <reason>"
 
This allows you to use arguments in your menus rather than having to make custom js placeholders.

From here, you can use the new "arg" placeholders in any of your "click commands".

NOTE: as of right now arg placeholders are not parsed in requirements.
The only place they are parsed are in material, display_name, lore, and "click commands".

Code (YAML):

items
:
  '1'
:
    material
: barrier
    slot
: 0
    display_name
: '&cMute {target }'
    lore
:
   - '&aClick to mute {target } for {time }'
    - '&aReason for mute
: {reason }'
    left_click_commands
:
   - ' [player ] mute {target } {time }'
    - '[message] {target} being muted for {time} for
: {reason }'
    - ' [close ]'
    right_click_commands
:
   - ' [player ] mute {target } {time }'
    - '[message] {target} being muted for {time} for
: {reason }'
    - ' [close ]'
Hope this allows more customization with your menus and especially anyone who wishes to create punishment menus!

This has been requested for ages so here you go! Enjoy!

[​IMG]
----------, Jul 2, 2019

1.11.6

Yeah 2 updates in 1 day....

This update adds support for CustomModelData via the new config option for items: nbt_int: <key>:<value>

example:
Code (YAML):
nbt_int : CustomModelData:2
This allows you to use your custom models within your texture packs to show new items that aren't provided by Minecraft but rather new models provided by your resource packs.
Here is an example of a green sword that is added with CustomModelData:
[​IMG]

This update also allows specifying other NBT data although it might be a rare case it is used:

Code (YAML):
nbt_string : <key>:<value>
nbt_int
: <key>:<value>
Hope this allows more customization with your menus and especially anyone who uses CustomModelData in resource packs!
----------, Jul 1, 2019

1.11.5

Fixed a bug where errors are thrown when an item is taken from a menu and dropped on the ground. This will never happen again and no way to obtain menu items anymore.

Added the following:

Code (Text):
shift_left_click_commands
shift_right_click_commands
middle_click_commands

shift_left_click_requirement
shift_right_click_requirement
middle_click_requirement
Now you can add "shift" left and right click commands as well as middle click!

You can also specify requirements for each of the new types of clicks for your items just as you have in the past with left + right click requirements.

Enjoy!
----------, Jul 1, 2019

1.11.3

This update adds a "safeguard" against any items becoming "obtainable" through hacks or magic. All menu items now contain an NBT tag that allow DeluxeMenus listeners to know if that item came from a menu. If that item a player dropped, moved, or tried to keep when the menu is closed, will be removed. We tested and found that a bug actually exists when using 1.14 and we actually ended up getting items from a menu (took a while but it was possible). This update resolved the issue for us so let me know if it solves it for you if you experienced the bug as well....

(Yes we skipped 1.11.2 but we have good reason to do so)
----------, Jun 10, 2019

1.11.1

This update should fix the errors that have been posted by users on 1.12 regarding
Code (Text):
java.lang.NoSuchFieldError: PLAYER_HEAD
which have caused the plugin to not load in some cases.
----------, May 25, 2019

1.11.0

This update is pretty big.....

First off this update adds compatibility for both 1.13 and 1.14
If you use these versions you will need to disregard the "data:" option and specify the material using the 1.13+ material system. (unless you have custom models for data values and use the "unbreaking" feature.

Added 2 new actions:

[chat] <message> will send chat as the player performing the click
[broadcast] <message> will send a message to the server

Fixed the half implemented unbreaking option for items that never worked until now which makes an item unbreakable.
[​IMG]
This is super cool as you can now define custom textures based on the damage of an item in your menus. The possibilities are endless....
Code (YAML):
unbreakable : <true/false>
Added support for colors with leather armor
[​IMG]
just make sure to follow the format in the image above and you can specify any rgb color for leather armor.

This version has been tested on 1.12, 1.13, and 1.14 with no issues so im excited to release it :)

I have also fixed a ton of bugs that have been present for a loooong time. If you find any more we didn't find please contact us on our Discord chat:
https://discordapp.com/invite/0utOOIYX82aImw7h

There might be some stuff i have left out but who cares! DeluxeMenus is finally updated! Enjoy!

Special thanks to @aBo0oDGamer, @MutimEndymion, @AndGK, and a few others for helping me test this build as much as we can to ensure everything works as it should on 1.13+

Very happy to release this update, it has been a year and 14 days since last update. The plugin has worked fine in that entire span of time althougn 1.13+ wasn't fully supported. Happy to drop this update today.
----------, May 24, 2019

1.10.5

Changed the way player commands are executed to provide compatibility with plugins such as CommandPrompter -> https://www.spigotmc.org/resources/commandprompter.47772/

Example using CommandPrompter:
https://img.extendedclip.com/2018-05-10_11-27-38.gif

Code (YAML):

menu_title
: '&cPunish menu'
open_command
: punish
size
: 9
open_requirement
:
  requirements
:
    permission
:
      type
: has permission
      permission
: menu.open.punish
      deny_commands
:
      - '[message] You dont have permission to open menu
: punish'
items
:
  '1'
:
    material
: barrier
    slot
: 0
    display_name
: '&cMute a player'
    lore
:
   - '&aYou will be prompted to type the player name'
    - '&ato mute after selecting this option'
    left_click_commands
:
   - ' [player ] mute <Type the name of the player you want to mute>'
    - ' [close ]'
    right_click_commands
:
   - ' [player ] mute <Type the name of the player you want to mute>'
    - ' [close ]'
  '2'
:
    material
: barrier
    slot
: 4
    display_name
: '&aKick a player'
    lore
:
   - '&aYou will be prompted to type the player name'
    - '&ato kick after selecting this option'
    left_click_commands
:
   - ' [player ] kick <Type the name of the player you want to kick>'
    - ' [close ]'
    right_click_commands
:
   - ' [player ] kick <Type the name of the player you want to kick>'
    - ' [close ]'
  '3'
:
    material
: barrier
    slot
: 8
    display_name
: '&aBan a player'
    lore
:
   - '&aYou will be prompted to type the player name'
    - '&ato ban by clicking here'
    left_click_commands
:
   - ' [player ] ban <Type the name of the player you want to ban>'
    - ' [close ]'
    right_click_commands
:
   - ' [player ] ban <Type the name of the player you want to ban>'
    - ' [close ]'

 
----------, May 10, 2018

1.10.4

Fixed Heads integration @sothatsit

Added support to use placeholders in the material and data options for menu items. There is a specific format for each:

Code (YAML):
material : 'placeholder- %player_item_in_hand%'
Code (YAML):
data : 'placeholder- %player_item_in_hand_data%'
----------, Apr 15, 2018

1.10.3

Config and menu files are now checked before being loaded to prevent wipes when you make a mistake.
----------, Mar 17, 2018

1.10.2

Added support for custom head items via the plugin Heads by @sothatsit

Added direct Vault economy support for new requirement and action:

Code (YAML):
# new eco requirement
view_requirement
:
  requirements
:
    economy
:
      type
: has money
      amount
: 500000.0
# new eco action
' [takemoney ] <amount>'
 
Code (YAML):
 'money':
    material
: 'heads-<head id>
    slot
: 1
    view_requirement
:
      requirements
:
        new eco requirement
:
          type
: has money
          amount
: 500000.0
    display_name
: '&b$&f500,000'
    lore
:
   - '&bClick to have money taken from you'
    left_click_commands
:
   - ' [takemoney ] 500000.0'
    - ' [close ]'
----------, Oct 16, 2017

1.10.1

Added support for pre-1.10.0 JavaScript requirements. Existing menus with requirements not using the new system will still be loaded.

Fixed bug where requirements aren't loaded.
Fixed bug where has item requirement throws an error when setting the item durability.
Fixed bug where requirement deny_commands are not loaded for a specific requirement in the requirements list.
----------, Sep 29, 2017

1.10.0
This update will break all existing menus that utilize the JavaScript based requirement system. Your menus will not disappear but if you are using any "view_requirement" or "click_requirement" you will need to update your menus to the new requirement system.


DeluxeMenus will no longer check if a player has the permission node for a menu for it to be opened. Now all permission requirements must be specified in an "open_requirement" for the menu.

To make things easier on everyone, I have switched the entire "requirement" system to allow more flexibility and also make things easier on the end user as JavaScript was required in the pre 1.10.0 versions of DeluxeMenus.

Below is an explanation and format of how the new "requirement" system works:
Code (yml (Unknown Language)):
# ==============================================================
#
# Requirement information
#
# Requirements can be set as the following:
#
# open_requirement: This requirement is checked when a menu is opened
# view_requirement: This requirement determines if an item should be set in a menu slot
# left_click_requirement: This requirement is checked when an item is left clicked
# right_click_requirement: This requirement is checked when an item is right clicked
#
# Requirement types:
#   javascript - Evaluates a javascript expression that must return true or false
#     configuration options:
#       expression:
#
#   has item - Checks if a player has a specific item
#     configuration options:
#       material:
#       amount:
#       data:
#       name:
#       lore:
#
#   has permission - Checks if a player has a specific permission
#     configuration options:
#       permission:
#
#   string contains - Checks if a string contains another string
#     configuration options:
#       input:
#       output:
#
#   string equals - Checks if a string equals another string
#     configuration options:
#       input:
#       output:
#
#   string equals ignorecase - Checks if a string equals another string ignoring case
#     configuration options:
#       input:
#       output:
#
#   > - Checks if a number is greater than another number
#     configuration options:
#       input:
#       output:
#
#   >= - Checks if a number is greater than or equal to another number
#     configuration options:
#       input:
#       output:
#
#   == - Checks if a number is equal to another number
#     configuration options:
#       input:
#       output:
#
#   <= - Checks if a number is less than or equal to another number
#     configuration options:
#       input:
#       output:
#
#   < - Checks if a number is less than another number
#     configuration options:
#       input:
#       output:
#
#
#
# So why would we want to use requirements?
# By default, DeluxeMenus does not require a player meet any conditions to open your menu.
# If you want to require a menu need a certain permission node for it to be accessed, or a certain amount of money
# for a menu to be opened, You do that with an 'open_requirement'.
# Below is an example of how you would deny opening a menu if the viewer does not have permission:
#
# menu_title: 'Menu that requires permission to open'
# open_command: testmenu
# size: 9
# open_requirement:
#   requirements:
#     this_requirement_name:
#       type: has permission
#       permission: 'testmenu.open'
#       deny_commands:
#       - '[message] you do not have permission to open testmenu'
#
#
# Below is a full example of use cases for requirements:
#
#                 menu_title: 'Menu that requires permission to open'
#                     open_command: testmenu
#                     size: 9
#                     open_requirement:
#                       requirements:
#                         this_requirement_name:
#                           type: has permission
#                           permission: 'testmenu.open'
#                           deny_commands:
#                           - '[message] you do not have permission to open testmenu'
#                     items:
#                       mymenuitem:
#                         priority: 2
#                         material: DIRT
#                         slot: 0
#                         name 'You dont have 100 diamonds to view this item'
#                       mymenuitem:
#                         priority: 1
#                         material: DIAMOND
#                         slot: 0
#                         name 'You have lots of diamonds so you can see this item'
#                         view_requirement:
#                           requirements:
#                             diamond_requirement:
#                               type: has item
#                               material: diamond
#                               amount: 100
#                         left_click_requirement:
#                           requirements:
#                             money_requirement:
#                               type: '>='
#                               input: '%vault_eco_balance_fixed%'
#                               output: 1000
#                               deny_commands:
#                               - '[message] you only have %vault_eco_balance_fixed%'
#                         left_click_commands:
#                         - '[message] you have over 1000 dollars!'
#                         right_click_requirement:
#                           requirements:
#                             staff_requirement:
#                               type: string equals
#                               input: '%vault_rank%'
#                               output: staff
#                               deny_commands:
#                               - '[message] you are not staff'
#                         right_click_commands:
#                         - '[message] you are staff'
#
# deny_commands: are optional and will be executed if the requirement is not met.
# ==============================================================
----------, Aug 28, 2017

1.9.2
[​IMG]
Added support for custom head textures through the plugin
Head Database and using the encoded texture properties string specific to a custom skull.

To use the Head Database hook, HDB must be enabled on your server and then all you will need to do is set the material to this format:
Code (Text):
    material: 'hdb-<head id>'
ex:
    material: 'hdb-4320'
For the encoded texture properties string (which requires no dependencies) it is a bit harder. First you need to travel to a custom skull site such as minecraft-heads.com or heads.freshcoal.com and pick the head you want, from there you need to copy the command which you can obtain the head with in vanilla minecraft.
[​IMG]

Then put the command in notepad and select what I have highlighted:
[​IMG]
From there you can paste the text below:
[​IMG]
There we go, we have a world:
[​IMG]
----------, Jul 14, 2017

1.9.0

You can now set an item to multiple slots in your menus (completely optional) with a single item entry in your config. I know this feature has been long requested so here it is...
[​IMG]
To allow an item to multiple slots, you will simply change the slot: entry to slots: and then switch the integer to a list of integers representing the slots you want the item to be set to! This allows you to save a ton of time and keep your configuration files small when assigning an item to multiple slots. No more duplicate config entries!

Added "unbreakable" option for items to make the item unbreakable.

[​IMG]

Updated dependencies to Spigot 1.12.
----------, Jun 17, 2017

This version of DeluxeMenus is ONLY compatible with PlaceholderAPI 2.7.0 or higher.

1.8.0


Fixed issues with PlaceholderAPI compatibility. This version is only compatible with PlaceholderAPI 2.7.0 or higher


Added ability to delay click actions:
Code (YAML):
# You can delay any click command being performed by ending the command with
# <delay=(time in TICKS)>
# example:
#     - '[close]'
#     - '[message] it has been 5 seconds since the menu closed!<delay=100>'
#     - '[message] Now 10 seconds has passed<delay=200>'
menu_title
: '&fservers &aGUI menu'
open_command
: serversgui
inventory_type
: HOPPER
size
: 9
items
:
  '1'
:
    material
: WOOL
    data
: 13
    amount
: 1
    slot
: 1
    priority
: 1
    view_requirement
: ' "%pinger_isonline_testplugins.com%".equals ( "online" );'
    display_name
: 'testplugins is online!'
    left_click_commands
:
   - ' [close ]'
    - ' [message ] one<delay=20>'
    - ' [message ] two<delay=40>'
    - ' [message ] three<delay=60>'
    - ' [message ] four<delay=80>'
  '2'
:
    material
: WOOL
    data
: 14
    amount
: 1
    slot
: 1
    priority
: 2
    display_name
: 'testplugins is offline : ('
    click_commands
:
   - ' [close ]'
 
Switched plugin metrics from McStats to bStats.
----------, Mar 21, 2017

1.7.2

Fixed bug where errors would occur on 1.8.x servers.

Removed some unnecessary checks / item manipulation that was in place to prevent items from being removed from menus by players. These methods relied on NMS and are no longer needed as there have been other methods implemented in previous updates of DeluxeMenus that are more efficient and effective.
----------, Dec 27, 2016

1.7.1

So there has been a bug with DeluxeMenus for quite some time now that I could never replicate so I kind of left it alone.....

In some weird cases, or with certain hack clients, players can open a menu, then obtain all of the items from the menu :/



Over the past few days myself and @Disorbs have been testing many different things to try and pinpoint the source of the problem and I am happy to update today with a solution which removes this bug from DeluxeMenus.

Much thanks goes to @Disorbs as he has done tons of testing specific to this problem and is the reason this update exists today.

I hope that everyone can update as soon as possible because he has went as far as joining servers that run the plugin to confirm the issue exists on those servers.

I am sorry if this problem has caused anyone issues in the past but it should no longer be an issue going forward.
----------, Oct 7, 2016

1.7.0

- All calculations for building a menu for a player when opened is now async. The actual inventory opening for the player is still sync to prevent issues. This should increase performance when you have complicated menus or tons of javascript conditions for inventory items. The only thing you should notice is the menu could take a millisecond or two to actually open.

- Added "inventory_type" option which can specify the type of menu a player is opening ex: HOPPER, ANVIL, etc. Don't use the option if you want to specify the size or are opening a chest. The menu will default to Chest.

- added '[json] <json text> ' click action to send a player a json message
----------, Oct 4, 2016

1.6.0

Added ability to list multiple open commands for menus

If you wish to specify a list of commands, simply set your open_command entry for the menu as a list:
Code (YAML):
gui_menus:
  example
:
    menu_title
: '&aExample GUI menu'
    open_command
:
   - openexamplemenu
    - oem
    - openmenu
    - menu
    size
: 9
    items
:
      '1'
:
        material
: head; %player_name%
        ....
 
Note that every open_command listed must be unique.

Added new option to specify a dynamic amount for items.

You can now add a new option to your item configurations which will set an item amount to the value of a placeholder
(requires a placeholder that returns an integer)
Code (YAML):

gui_menus
:
  servermenu
:
    menu_title
: '&aServer menu'
    open_command
:
   - menu
    - openmenu
    size
: 9
    items
:
      '1'
:
        material
: DIAMOND
        slot
: 0
        dynamic_amount
: ' %server_online%' # will set this item amount to the amount of players online
        left_click_commands
:
       - ' [close ]'
        right_click_commands
:
       - ' [close ]'
 
Keep in mind that if the amount exceeds 64, it will be set to 64. Also note that if the placeholder did not return an integer, the amount will be set to 1 OR the amount specified in the "amount" entry if both "amount" and "dynamic_amount" exist for that specific menu in the configuration.

Added flag argument to silence /dm open messages

You can now add a flag at the end of the /dm open command which silences message output:
Code (Text):
/dm open <menuname> -s
/dm open <menuname> <player> -s
----------, May 29, 2016

1.5.2

Completely refactored all permissions:

Code (Text):
permissions:
    deluxemenus.admin:
        description: admin commands
        default: op
    deluxemenus.open:
        description: open a menu with /dm open <menu>
        default: op
    deluxemenus.open.others:
        description: open a menu with /dm open <menu> <player>
        default: op
    deluxemenus.open.bypass:
        description: attempt to open a menu for a viewer regardless if the viewer has permission for the menu
        default: op
    deluxemenus.menu.*:
        description: permission for all menus
        default: op
    deluxemenus.openrequirement.bypass.*:
        description: ability for the viewer to bypass all menu open requirements
        default: op
For the viewer to have permission to open a specific menu, you need to give them the permission node: deluxemenus.menu.<menuname>
----------, Mar 22, 2016

1.5.1

Fixed a bug reported by @reeferx7 which caused right click requirements to not get checked.

Refactored /dm command output a bit.
----------, Mar 21, 2016

1.5

Removed click menus
Click menus have finally been removed for good. They have caused nothing but headache, confusion for some, and bloated the plugin as the way they were designed, they did not fit with how the gui menu system works. I will release a separate add-on later that will bring click menu support from a separate plugin if you want them.

Removed menu title "animations"
Support for gui menu title animations have been removed to improve performance, prevent possible bugs and glitches, and also remove the need to use reflection / nms code which makes the plugin liable to break on any given server version.

My goal of the plugin is more focused on functionality of the GUI rather than visual enhancements such as "animations" in GUI menus. This plugin is extremely configurable and very powerful as far as what you can do with it. While visuals such as animating materials, menu titles, and other things are cool, they all affect performance in one way or another. They also have the ability to cause unwanted issues and bugs.
There are a few premium GUI plugins which offer a more visual based GUI including item name, lore, material, etc "animations". Feel free to check those out if you don't care about functionality and ease of configuration, and are more worried about features that aren't necessary.

Fixed issue where menu actions are not executed in order
Previous versions caused menu actions to not be performed in the order they were listed in the menu configuration. Before they were all grouped in separate lists of the same action type and all actions of each type were performed at once before moving to the next type . This caused unwanted results when the order of the actions to be performed were sensitive. Now all actions are executed in the exact order regardless of the action type :)
----------, Feb 27, 2016

1.4.2

This is a quick hotfix version that may contain a solution to a few errors people were having with the gui menu title "animations", also a fix for people being able to pull items out of the inventory with macro although myself and a few others could not replicate this issue.
----------, Feb 20, 2016

1.4.1

This is a recommended update as it contains critical bug fixes....

Fixed issues with right click requirement not working correctly which allows players to bypass the requirement and have the actions executed no matter what.

Fixed issue where invalid player head name caused the gui not to open. This issue was found by @Rocky143

Added back ClickMenus as many people were upset that they were removed :)
----------, Jan 31, 2016

1.4

Removed "click menus" as it was confusing to some people and barely anyone actually used them. This should improve performance a bit as there are no longer 2 different GUI implementations inside of the plugin.

Changed view permission to view requirement which uses javascript to evaluate if a player should meet the requirement to view an item in the GUI.
This should allow more flexibility as you can do much more than simply check if a player has a certain permission node to view an item in your GUI menu.

More information on view_requirements:
Code (Text):
# ==============================================================
#
# View requirement information
#
# You can add a 'view requirement' to an item if it has a priority value set for it
# The view requirement has replaced the 'permission' entry for items
# This allows you to specify a specific requirement in javascript for the item to be shown
# In order to use view requirements, the item must have a priority value and a valid javascript expression
# that returns true or false.
#
#   'item_one':
#     material: DIAMOND
#     slot: 3
#     priority: 1
#     view_requirement: '%vaulteco_balance% > 100'
#   'item_two':
#     material: IRON_INGOT
#     slot: 3
#     priority: 2
#     view_requirement: 'BukkitPlayer.hasPermission("some.permission")'
#   'item_three':
#     material: STONE
#     slot: 3
#     priority: 3
#
# In the example above, the priority 1 item view requirement will be checked first, if a player has over 100 dollars, that item will be shown.
# If the player does not meet the requirement for the first item, the item with priority 2 will be checked. If the player does not have the permission
# node some.permission, the final item 'item_three' will be set to slot 3 as the player did not meet the requirement for the first 2 items with
# a higher priority.
#
# You may use placeholders in your Javascript expressions to evaluate if the player meets the requirement or not.
# You may also use a few keywords which give you access to the Player class and Bukkit.Server class if you understand the Bukkit API
#
# BukkitPlayer - references the Player object your expression is evaluating.
# BukkitServer - references Bukkit.getServer() in the Bukkit API.
#
# The choice to use this system to evaluate if a player meets requirements to click an item was an easy choice.
# This way I do not have to hook into every plugin to check if a player meets the requirement to click an item successfully.
# You can simply use placeholders, or the keywords provided to give you access to the Player and Server objects.
# If you want to check if a player has enough money, simply use an expression like so:
#
# view_requirement: '%vaulteco_balance% >= 100' (checks if players balance is greater than or equal to 100)
# ==============================================================
----------, Dec 26, 2015

1.3.2
[​IMG]
Added the ability to create "animated" menu titles :)
This feature is only enabled if your server version is 1.8 or higher!

Code (Text):
# example GUI menu configuration
#
# configuration layout:
#
# menu_title:
# - '<title of menu goes here>'
# - '<If using 1.8 you can specify many menu title frames and create animations>'
# - '<in order for animations to work you must specify a menu_title_update_interval: ##>'
# menu_title_update_interval: <amount of ticks to change title frames ex: 10, this is only needed if you have multiple frames>
# command: <command to open this menu goes here>
# size: <size of this menu, increments of 9, max size is 54>
# update_interval: <time in seconds this gui should update for a player if an item is set to uodate placeholders>
# items:
#   <item identifier>:
#     material: <name or id, for player heads use the format 'head;<players name/%player_name%>'>
#     data: <integer, used for data values for wool etc>
#     amount: <amount of this item to show>
#     slot: <slot number to put this item, slots start at 0 and end at 53 for a size 54 inventory>
#     priority: <this is used if you have multiple items set for the same slot>
#     permission: <the lowest priority item a player has permission for ex: 1, will be shown>
#     update: <true/false if this item should update placeholders on the interval set for the gui menu this item is in>
#     hide_attributes: <true/false if this item should display item attributes>
#     hide_enchantments: <true/false if this item should display item enchantment / level> (useful for 'enchantment glow' items)
#     hide_effects: <true/false if this item should display item effect attributes>
#     display_name: <display name to show for this item>
#     banner_meta: (this is used if you want to display a custom banner with specific patterns)
#     - <dyecolor>;<PatternType> (more information on where to find DyeColor and PatternType names below)
#     - 'RED;BASE'
#     - 'WHITE;CREEPER'
#     lore:
#     - 'placeholders can be used in the name and lore'
#     - '%<any placeholder from Papi>% shows the viewer values'
#     enchantments: valid enchantment names can be found here: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/enchantments/Enchantment.html
#     - '<ENCHANTMENT>;<LEVEL>'
#     - 'SILK_TOUCH;1'
#     left_click_commands:
#     - '[close]'
#     right_click_commands:
#     - '[player] spawn'
#
# All keys aside from update_interval are required for this menu to be valid and loaded!
# The only options for an item to be considered valid are material and slot!
#
# banner_meta must be listed with a specific format:
# banner_meta:
# - <DyeColor>;<PatternType>
#
# Valid DyeColor names can be found here: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/DyeColor.html
# Valid PatternTypes can be found here: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/block/banner/PatternType.html
# ==============================================================
#
# Click requirement information
#
# You can now add 'click requirements' to left and right click commands!'
# These are defined per item and must follow a specific format:
#
#   'item_one':
#     material: DIAMOND
#     slot: 3
#     left_click_commands:
#     - '[close]'
#     - '[message] You were charged 100 dollars for clicking that item!'
#     - '[console] eco take %player% 100'
#     left_click_requirement:
#       expression: '%vaulteco_balance% > 100'
#       deny_commands:
#       - '[close]'
#       - '[message] &cYou dont have 100 dollars to click that item'
#     right_click_commands:
#     - '[close]'
#     - '[message] You had permission to click that item!'
#     right_click_requirement:
#       expression: 'BukkitPlayer.hasPermission("some.permission.toclick")'
#       deny_commands:
#       - '[close]'
#       - '[message] &cYou dont have permission to click that item'
#
# Every left/right_click_requirement MUST have an expression specified that would return a boolean (true/false)
# These expressions must also follow JavaScript format as they are all javascript based!
#
# deny_commands: are optional and will be executed if the expression returns false.
# You may use placeholders in your Javascript expressions to evaluate if the player meets the requirement or not.
# You may also use a few keywords which give you access to the Player class and Bukkit.Server class if you understand the Bukkit API
#
# BukkitPlayer - references the Player object your expression is evaluating.
# BukkitServer - references Bukkit.getServer() in the Bukkit API.
#
# The choice to use this system to evaluate if a player meets requirements to click an item was an easy choice.
# This way I do not have to hook into every plugin to check if a player meets the requirement to click an item successfully.
# You can simply use placeholders, or the keywords provided to give you access to the Player and Server objects.
# If you want to check if a player has enough money, simply use an expression like so:
#
# expression: '%vaulteco_balance% >= 100' (checks if players balance is greater than or equal to 100)
# If you want to charge the player, simply run the economy command to take the amount from the players balance in your click_commands
# which will be executed if the player meets the requirement!
# ==============================================================
menu_title:
- '&aH'
- '&aHe'
- '&aHel'
- '&aHell'
- '&aHello'
- '&aHello '
- '&aHello &f%player%'
- '&aHello &e%player%'
- '&aHello &6%player%'
- '&aHello &e%player%'
- '&aHello &f%player%'
- '&aHello '
- '&aHello'
- '&aHell'
- '&aHel'
- '&aHe'
- '&aH'
menu_title_update_interval: 2
open_command: examplegui
update_interval: 1
size: 9
items:
  '1':
    material: head;%player_name%
    slot: 0
    display_name: '&aHey &f%player%'
    lore:
    - '&aYou opened a GUI menu'
    - '&aThis menu is just for you!'
    left_click_commands:
    - '[close]'
    right_click_commands:
    - '[player] help'
    - '[close]'
  '2':
    material: DIAMOND
    data: 0
    amount: 1
    slot: 1
    display_name: '&aBuy &f1 &3Diamond'
    lore:
    - '&bClick to buy one diamond'
    left_click_commands:
    - '[close]'
    - '[console] give %player_name% diamond 1'
    - '[console] eco take %player_name% 100'
    left_click_requirement:
      expression: '%vaulteco_balance% > 100'
      deny_commands:
      - '[close]'
      - '[message] &cYou do not have &a$&f100 &cto purchase a diamond!'
  '3':
    material: BANNER
    amount: 1
    slot: 2
    display_name: '&acustom banner'
    banner_meta:
    - 'RED;BASE'
    - 'WHITE;CREEPER'
    hide_effects: true
    lore:
    - 'testing'
    left_click_commands:
    - '[close]'
  '4':
    material: WATCH
    amount: 1
    slot: 3
    display_name: '&cTime played: &f%statistic_time_played%'
    update: true
    left_click_commands:
    - '[close]'
Fixed CME (ConcurrentModificationException) on /dm reload

As always, be sure to leave a like and review if you enjoy this update :)
----------, Sep 14, 2015

1.3.1

Added banner_meta: option that can be added to items to specify custom banners:

Code (Text):
  '3':
    material: BANNER
    amount: 1
    slot: 2
    display_name: '&acustom banner'
    banner_meta:
    - 'RED;BASE'
    - 'WHITE;CREEPER'
    hide_effects: true
    lore:
    - 'testing'
    left_click_commands:
    - '[close]'

You can list as many layers you like in the banner_meta: list.
The format is <DyeColor>;<PatternType>

Valid DyeColor names can be found here:
https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/DyeColor.html
Valid PatternType names can be found here:
https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/block/banner/PatternType.html

Removed message when a player opens a gui with /dm open <menuname> for themselves.
----------, Sep 10, 2015

1.3

This is my all time favorite update :)

I was going to wait to release this as it has been ready for a while, but decided what the heck.

Added Javascript based click requirements for left and right click commands to be executed!

I am not going to do a huge amount of explaining here, simply post the default configuration so you can read that as it has all information needed to get you an understanding of how it works.

Code (Text):
# example GUI menu configuration
#
# configuration layout:
#
# menu_title: <title of menu goes here>
# command: <command to open this menu goes here>
# size: <size of this menu, increments of 9, max size is 54>
# update_interval: <time in seconds this gui should update for a player if an item is set to uodate placeholders>
# items:
#   <item identifier>:
#     material: <name or id, for player heads use the format 'head;<players name/%player_name%>'>
#     data: <integer, used for data values for wool etc>
#     amount: <amount of this item to show>
#     slot: <slot number to put this item, slots start at 0 and end at 53 for a size 54 inventory>
#     priority: <this is used if you have multiple items set for the same slot>
#     permission: <the lowest priority item a player has permission for ex: 1, will be shown>
#     update: <true/false if this item should update placeholders on the interval set for the gui menu this item is in>
#     hide_attributes: <true/false if this item should display item attributes>
#     hide_enchantments: <true/false if this item should display item enchantment / level> (useful for 'enchantment glow' items)
#     hide_effects: <true/false if this item should display item effect attributes>
#     display_name: <display name to show for this item>
#     lore:
#     - 'placeholders can be used in the name and lore'
#     - '%<any placeholder from Papi>% shows the viewer values'
#     enchantments: valid enchantment names can be found here: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/enchantments/Enchantment.html
#     - '<ENCHANTMENT>;<LEVEL>'
#     - 'SILK_TOUCH;1'
#     left_click_commands:
#     - '[close]'
#     right_click_commands:
#     - '[player] spawn'
#
# All keys aside from update_interval are required for this menu to be valid and loaded!
# The only options for an item to be considered valid are material and slot!
#
# ==============================================================
#
# Click requirement information
#
# You can now add 'click requirements' to left and right click commands!'
# These are defined per item and must follow a specific format:
#
#   'item_one':
#     material: DIAMOND
#     slot: 3
#     left_click_commands:
#     - '[close]'
#     - '[message] You were charged 100 dollars for clicking that item!'
#     - '[console] eco take %player% 100'
#     left_click_requirement:
#       expression: '%vaulteco_balance% > 100'
#       deny_commands:
#       - '[close]'
#       - '[message] &cYou dont have 100 dollars to click that item'
#     right_click_commands:
#     - '[close]'
#     - '[message] You had permission to click that item!'
#     right_click_requirement:
#       expression: 'BukkitPlayer.hasPermission("some.permission.toclick")'
#       deny_commands:
#       - '[close]'
#       - '[message] &cYou dont have permission to click that item'
#
# Every left/right_click_requirement MUST have an expression specified that would return a boolean (true/false)
# These expressions must also follow JavaScript format as they are all javascript based!
#
# deny_commands: are optional and will be executed if the expression returns false.
# You may use placeholders in your Javascript expressions to evaluate if the player meets the requirement or not.
# You may also use a few keywords which give you access to the Player class and Bukkit.Server class if you understand the Bukkit API
#
# BukkitPlayer - references the Player object your expression is evaluating.
# BukkitServer - references Bukkit.getServer() in the Bukkit API.
#
# The choice to use this system to evaluate if a player meets requirements to click an item was an easy choice.
# This way I do not have to hook into every plugin to check if a player meets the requirement to click an item successfully.
# You can simply use placeholders, or the keywords provided to give you access to the Player and Server objects.
# If you want to check if a player has enough money, simply use an expression like so:
#
# expression: '%vaulteco_balance% >= 100' (checks if players balance is greater than or equal to 100)
# If you want to charge the player, simply run the economy command to take the amount from the players balance in your click_commands
# which will be executed if the player meets the requirement!
# ==============================================================
menu_title: '&fexample &aGUI menu'
open_command: examplegui
size: 9
items:
  '1':
    material: head;%player_name%
    slot: 0
    display_name: '&aHey &f%player%'
    lore:
    - '&aYou opened a GUI menu'
    - '&aThis menu is just for you!'
    left_click_commands:
    - '[close]'
    right_click_commands:
    - '[player] help'
    - '[close]'
  '2':
    material: DIAMOND
    data: 0
    amount: 1
    slot: 1
    display_name: '&aBuy &f1 &3Diamond'
    lore:
    - '&bClick to buy one diamond'
    left_click_commands:
    - '[close]'
    - '[console] give %player_name% diamond 1'
    - '[console] eco take %player_name% 100'
    left_click_requirement:
      expression: '%vaulteco_balance% > 100'
      deny_commands:
      - '[close]'
      - '[message] &cYou do not have &a$&f100 &cto purchase a diamond!'
Added [message] <message> which can now be used in click_commands or deny_commands.

Be sure to leave a like and review of this resource is you enjoy this update! I am very happy with it and I think this requirement system is far more configurable than any other GUI plugin offers! This resource is completely free to you and a review only takes a few minutes of your time and is greatly appreciated!
----------, Sep 9, 2015

1.2.5

Added option for GUI menus to create per file GUI configurations. This only applies to GUI menus and not click menus yet.

To create per file GUI menus, simply create the GUI name in the main config and create an option like so:
Code (Text):
gui_menus:
  example:
    file: example.yml
This will attempt to load the GUI menu "example" from the .yml file specified in the config from the gui_menus folder that will be created in the DeluxeMenus config folder:
[​IMG]
If no file exists for the gui menu file specified in the config, it will be created and an example configuration will be set to that file. From there you can edit the file to your liking and save it back to your server, then /dm reload to update your GUI menus.

Always specify the file name and option in the main config before attempting to create a gui menu in the gui_menus folder. GUI menu configuration formats are a bit different for individual file guis:

Code (Text):
# example GUI menu configuration
#
# configuration layout:
#
# menu_title: <title of menu goes here>
# priority: <priority of this menu>
# command: <command to open this menu goes here>
# size: <size of this menu, increments of 9, max size is 54>
# update_interval: <time in seconds this gui should update for a player if an item is set to uodate placeholders>
# items:
#   <item identifier>:
#     material: <name or id, for player heads use the format 'head;<players name/%player_name%>'>
#     data: <integer, used for data values for wool etc>
#     amount: <amount of this item to show>
#     slot: <slot number to put this item, slots start at 0 and end at 53 for a size 54 inventory>
#     priority: <this is used if you have multiple items set for the same slot>
#     permission: <the lowest priority item a player has permission for ex: 1, will be shown>
#     update: <true/false if this item should update placeholders on the interval set for the gui menu this item is in>
#     hide_attributes: <true/false if this item should display item attributes>
#     hide_enchantments: <true/false if this item should display item enchantment / level> (useful for 'enchantment glow' items)
#     hide_effects: <true/false if this item should display item effect attributes>
#     display_name: <display name to show for this item>
#     lore:
#     - 'placeholders can be used in the name and lore'
#     - '%<any placeholder from Papi>% shows the viewer values'
#     enchantments: valid enchantment names can be found here: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/enchantments/Enchantment.html
#     - '<ENCHANTMENT>;<LEVEL>'
#     - 'SILK_TOUCH;1'
#     left_click_commands:
#     - '[close]'
#     right_click_commands:
#     - '[player] spawn'
#
# All keys aside from update_interval are required for this menu to be valid and loaded!
# The only options for an item to be considered valid are material and slot!

menu_title: example&aGUI menu
open_command: example
priority: 1
size: 9
items:
  '1':
    material: head;%player_name%
    slot: 0
    display_name: '&aHey &f%player%'
    lore:
    - '&aYou opened a GUI menu'
    - '&aThis menu is just for you!'
    left_click_commands:
    - '[close]'
    right_click_commands:
    - '[player] help'
    - '[close]'
  '2':
    material: DIRT
    data: 0
    amount: 1
    slot: 1
    priority: 1
    permission: exampleguimenu.item.home
    display_name: '&bTeleport home'
    lore:
    - '&bClick to teleport'
    - '&bto your home'
    click_commands:
    - '[player] home'
    - '[close]'
  '3':
    material: DIRT
    data: 0
    amount: 1
    slot: 1
    priority: 2
    display_name: '&bTeleport to spawn'
    lore:
    - '&bClick to teleport'
    - '&bto the server spawn'
    click_commands:
    - '[player] spawn'
    - '[close]'

Removed "priority" option from GUI menus. This is no longer needed for any gui menu to be loaded as priority is only necessary for click menus.

Added Spigot update checker to check for updates and inform ops on join.

Added MetricsLite for plugin statistics.
----------, Sep 9, 2015

1.2.4

Added tons of new options for items in GUI menus:
These new options only apply to GUI menus. An update adding all of these features to click menus will be released sometime soon...

ability to use player heads as items:
material: 'head;<player name/ %player_name%>

Hide tool attributes such as attack damage:

hide_attributes: true

Hide enchantments if you want to add an enchantment glow:
hide_enchantments: true

Hide potion effect information:
hide_effects: true


Add enchantments to items:
enchantments:

- '<enchantment name>;<level>'
valid enchantment names can be found here: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/enchantments/Enchantment.html

Specify different actions for left and right click:

left_click_commands:
- '[close]'

right_click_commands:
- '[player] spawn'


Be sure to leave a review if you enjoy the plugin!


----------, Sep 4, 2015

1.2.3

Improved the loading of click_commands for menu items....

Added new click_command actions:

Code (Text):
# Every click_command must start with a specific identifier to know what to do that that execution.
# Valid click_command identifiers:
#
# [console] - Execute a command from the console
# Usage: - '[console] <command with no slash>'
#
# [player] - Execute a command for the menu viewer
# Usage: - '[player] <command with no slash>'
#
# [close] - Close the viewers open menu
# Usage: - '[close]
#
# [openguimenu] - Open a GUI menu (can only be used in GUI menu click_commands)
# Usage: - '[openguimenu] <guiMenuName>'
#
# [openclickmenu] - Open a different click menu for the viewer and target (can only be used in click menu click_commands)
# Usage: - '[openclickmenu] <clickMenuName>'
#
# [connect] - Connect to the specified bungee server
# Usage: - '[connect] <serverName>'
#
# [commandevent] - Fire a PlayerCommandPreprocessEvent for commands that do not use the bukkit command system
# Usage: - '[commandevent] <command with no slash>'
----------, Sep 3, 2015

1.2.2

Added epic update feature which allows you to update specific items in your GUI menu on an interval.
This allows you to refresh the placeholders while the inventory is still open! It is very cool and shouldn't affect performance.
Here is an example:
[​IMG]
To update an item, make sure your GUI menu has the option "update_interval: <time in seconds>"
and make sure at least one item in the GUI menu has the option "update: true"
Only items with "update: true" that are set in the inventory for the player, will be refreshed.

This feature is only available for GUI menus and not available for click menus....

I have tested this feature for a while now and haven't found any issues. As always, if you have a problem, let me know!

Fixed [player] <command> not executing for some commands.

Be sure to leave a like and review if you enjoy the plugin!
----------, Sep 3, 2015

1.2.1

Removed the ------------
lines from every message as some screen sizes don't like it...

Fixed menu title not working correctly for GUI menus.
----------, Sep 2, 2015

1.2

I decided to rename the plugin as "ClickMenus" didn't seem to fit for what this plugin now offers.

The plugin now allows you to create normal GUI menus that offer tons of customization.


Added the ability to create multiple items per slot and even set permissions for what its to show a player in your custom GUI menus and click menus.

Added the ability to define your own commands in GUI menus to open them.

Added complex open command system for GUI menus to allow players to open GUI menus for themselves, or admin / console to open a GUI menu for a specific player.


If you used "ClickMenus" You will need to reset your configuration. This will be the only time a config reset should be needed...

New config:

Code (Text):
# DeluxeMenus 1.2 main configuration file
#
# click_menu_options.crouch_to_open: <true/false>
#   Should players need to sneak to open a click menu
#
# Click menu configuration:
#
# You can create as many click menus you like.
# The highest priority menu you have permission for will be applied when you click a player.
# Highest priority is 1, Lowest priority is 2147483647
# Players must have permission for a click menu to open one!
# All click menu permissions default to false so this even applies to Ops.
# Permission for a click menu is: deluxemenus.clickmenu.<menuName>
# Permission to open a click menu by command is: deluxemenus.clickmenucommand
#
# Click menus configuration layout:
#
# click_menus:
#   <menuName>:
#     menu_title: <title of menu goes here>
#     priority: <priority of this menu>
#     size: <size of this menu, increments of 9, max size is 54>
#     items:
#       <item identifier>:
#         material: <name or id>
#         data: <integer, used for data values for wool etc>
#         amount: <amount of this item to show>
#         slot: <slot number to put this item, slots start at 0 and end at 53 for a size 54 inventory>
#         priority: <this is used if you have multiple items set for the same slot>
#         permission: <the lowest priority item a player has permission for ex: 1, will be shown>
#         display_name: <display name to show for this item>
#         lore:
#         - 'placeholders can be used in the name and lore'
#         - '%viewer% shows the menu viewers name'
#         - '%<any placeholder from pAPI>% shows the targets values'
#         click_commands:
#         - '[player] runs this command as a player'
#         - '[player] tpa %player%'
#         - '[console] runs this command from the console'
#         - '[console] ban %player%'
#         - '[connect] connects the viewer to the specified bungee server'
#         - '[connect] Hub'
#         - '[close] closes the click menu'
#         - '[close]'
#
# You do not need to specify item options that you don't use!
# The only required entries for a click menu item to be valid are:
#
# A valid material
# A valid slot
#
# Every item in the items list must have a unique <item identifier
#
# PER ITEM PERMISSION AND PRIORITY INFO:
#
# Per item permissions and priorities are optional.
# High priority = 1, Lowest priority = 2147483647.
# This allows you to show different items for a specific menu slot depending on the highest priority
# item permission a player has. This makes your menus very dynamic :)
#
# You CAN NOT specify a permission without a priority!
# You CAN specify a priority without a permission.
# You should always create a low priority item without a permission which will act as the no permission
# item if a player does not have permission for any of the items that require permission, otherwise
# no item will be set in the slot if a player does not have permission for any of the permission items.
#
#
#
# GUI menu configuration:
#
# You can create as many GUI menus you like.
# The menu priority must be a unique number for each GUI menu.
# Highest priority is 1, Lowest priority is 2147483647
# Players must have permission for a GUI menu to open one!
# All GUI menu permissions default to false so this even applies to Ops.
#
# Permission to open a GUI menu is: deluxemenus.guimenu.<menuName>
#
# You specify the command which opens the GUI menu. Make sure this command
# does not conflict with any existing commands on your server!
# A GUI menu without an open command specified will not be loaded!
#
# GUI menus configuration layout:
#
# gui_menus:
#   <menuName>:
#     menu_title: <title of menu goes here>
#     priority: <priority of this menu>
#     command: <command to open this menu goes here>
#     size: <size of this menu, increments of 9, max size is 54>
#     items:
#       <item identifier>:
#         material: <name or id>
#         data: <integer, used for data values for wool etc>
#         amount: <amount of this item to show>
#         slot: <slot number to put this item, slots start at 0 and end at 53 for a size 54 inventory>
#         priority: <this is used if you have multiple items set for the same slot>
#         permission: <the lowest priority item a player has permission for ex: 1, will be shown>
#         display_name: <display name to show for this item>
#         lore:
#         - 'placeholders can be used in the name and lore'
#         - '%<any placeholder from pAPI>% shows the viewer values'
#         click_commands:
#         - '[player] runs this command as a player'
#         - '[player] spawn'
#         - '[console] runs this command from the console'
#         - '[console] spawn %player%'
#         - '[connect] connects the viewer to the specified bungee server'
#         - '[connect] Hub'
#         - '[close] closes the gui menu'
#         - '[close]'
#
# You do not need to specify item options that you don't use!
# The only required entries for a gui menu item to be valid are:
#
# A valid material
# A valid slot
#
# Every item in the items list must have a unique <item identifier
click_menu_options:
  sneak_to_open: true
click_menus:
  example:
    menu_title: '&aExample menu'
    priority: 1
    size: 9
    items:
      '1':
        material: DIAMOND_BLOCK
        data: 0
        amount: 1
        slot: 0
        display_name: '&aHey &f%viewer%'
        lore:
        - '&aYou opened a click menu'
        - '&afor player: &f%player_name%'
        click_commands:
        - '[close]'
      '2':
        material: 368
        data: 0
        amount: 1
        slot: 1
        priority: 1
        permission: examplemenu.item.teleport
        display_name: '&bTeleport to player'
        lore:
        - '&bClick to teleport to player &f%player_name%'
        click_commands:
        - '[player] tp %player_name%'
        - '[close]'
      '3':
        material: 381
        data: 0
        amount: 1
        slot: 1
        priority: 2
        permission: examplemenu.item.tpa
        display_name: '&bRequest teleport to player'
        lore:
        - '&bClick to request to'
        - '&bteleport to &f%player_name%'
        click_commands:
        - '[player] tpa %player_name%'
        - '[close]'
gui_menus:
  example:
    menu_title: '&aExample GUI menu'
    open_command: examplemenu
    priority: 1
    size: 9
    items:
      '1':
        material: STONE
        data: 0
        amount: 1
        slot: 0
        display_name: '&aHey &f%player%'
        lore:
        - '&aYou opened a GUI menu'
        - '&aThis menus if just for you!'
        click_commands:
        - '[close]'
      '2':
        material: DIRT
        data: 0
        amount: 1
        slot: 1
        priority: 1
        permission: exampleguimenu.item.home
        display_name: '&bTeleport home'
        lore:
        - '&bClick to teleport'
        - '&bto your home'
        click_commands:
        - '[player] home'
        - '[close]'
      '3':
        material: DIRT
        data: 0
        amount: 1
        slot: 1
        priority: 2
        display_name: '&bTeleport to spawn'
        lore:
        - '&bClick to teleport'
        - '&bto the server spawn'
        click_commands:
        - '[player] spawn'
        - '[close]'
All permission nodes have changed:
Code (Text):
permissions:
    deluxemenus.admin:
        description: admin commands
        default: op
    deluxemenus.clickmenucommand:
        description: open click menus by command
        default: op
    deluxemenus.clickmenuexempt:
        description: exempt from anyone opening a click menu for this player
        default: false
    deluxemenus.clickmenuexempt.override:
        description: ignore exempt players and force open a click menu
        default: false
    deluxemenus.clickmenucommand.bypassperms:
        description: open a click menu for yourself regardless if you have permission for it
        default: op
    deluxemenus.guimenucommand:
        description: open a gui menu by command
        default: op
    deluxemenus.guimenucommand.others:
        description: open a gui menu for another player by command
        default: op
    deluxemenus.guimenucommand.bypassperms:
        description: open a gui menu for a viewer regardless if the viewer has permission for it
        default: op
    deluxemenus.guimenu.<menuName>:
        description: allows access to a specific GUI menu
        default: false
    deluxemenus.clickmenu.<menuName>:
        description: allows access to a specific click menu
        default: false
----------, Sep 2, 2015

1.1

Added [connect] <server> command which will connect the viewer to a different BungeeCord server when this argument is specified in an items click_commands.
----------, Sep 2, 2015

Resource Information
Author:
----------
Total Downloads: 491,623
First Release: Sep 1, 2015
Last Update: Dec 13, 2023
Category: ---------------
All-Time Rating:
601 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings