# DeluxeMenus (Fabric)
**Custom chest menus for your server, written in YAML. Buttons that run commands, items players only see when they qualify, shops, warps, kits, rule books — all without a client mod.**
Works on **every Minecraft 1.21 release, from 1.21 to 1.21.11.**
> ⚠️ **This is an unofficial port.** DeluxeMenus (Fabric) brings the [DeluxeMenus](https://modrinth.com/plugin/deluxemenus) Bukkit/Paper plugin to Fabric. It is based on HelpChat's MIT-licensed source code, but it is **not made, endorsed or supported by HelpChat**. Please don't report issues with this mod to them.
## 🎮 No client mod. Your players join vanilla.
DeluxeMenus (Fabric) is **100% server-side**. Drop it in your server's `mods/` folder with Fabric API and you're done: nothing for players to install. Menus open as normal chest (or hopper, dispenser, furnace…) screens that every vanilla client already knows how to show.
## 📋 Your Plugin Menus Work Here
It reads the **same menu files as the plugin**. Copy `plugins/DeluxeMenus/gui_menus/` to `config/deluxemenus/gui_menus/`, list them in `config.yml`, and they open. The [DeluxeMenus wiki](https://wiki.helpch.at/helpchat-plugins/deluxemenus) is the manual for both.
```yaml
menu_title: '&8» &6Warps'
open_command: warps
size: 27
items:
spawn:
material: GRASS_BLOCK
slot: 13
display_name: '&aSpawn'
lore:
- '&7Click to teleport'
left_click_commands:
- '[console] tp %player_name% 0 64 0'
- '[sound] ENTITY_ENDERMAN_TELEPORT'
- '[close]'
```
## 🧩 Menus
* **Any size chest** (9–54 slots), or **19 other screens**: hopper, dispenser, dropper, workbench, furnace, blast furnace, smoker, brewing stand, anvil, grindstone, smithing table, cartography table, loom, enchanting table, beacon, barrel, ender chest and shulker box.
* **Open commands** that players see and tab-complete, with **arguments** (`/shop diamond` → `{item}`) and their own checks.
* **Open requirements** — only VIPs, only above level 30, only in the nether.
* **Live updates** — items with `update: true` refresh their placeholders every few seconds; `refresh: true` re-checks the whole menu.
* **Priorities** — several items can share a slot, and the first one whose requirements pass is shown. That's how one slot becomes "Buy" / "Too poor" / "Sold out".
* **Nothing can be taken out.** Every click is cancelled and the screen is resynced, so menus can't be used to duplicate items.
## 🎨 Items
Every plugin item option: names and lore with `&` colours and `&#hex`, **player heads** (`head-`, `basehead-`, `texture-`), the item in your hand or armor slots, potions with colours and effects, banners and shields, armor trims, dyed leather, enchantments (old Bukkit names too), item flags, custom model data, item models, tooltip styles, rarity, enchantment glint, light blocks, and more.
New on Fabric: **any `/give` item** as a material — `diamond_sword[enchantments={sharpness:5}]` — so even modded items and components work.
## ⚡ Actions
What happens when someone clicks. Each can run after a `` or with a ``.
| Action | Does |
|---|---|
[player] / [console] |
Run a command as the player / the console |
[message] [broadcast] [actionbar] |
Send text (with & colours) |
[minimessage] [minibroadcast] |
Send MiniMessage text: gradients, rainbow, hover, click |
[json] [jsonbroadcast] |
Send raw JSON text |
[openguimenu] [close] [refresh] |
Switch menu, close, rebuild |
[sound] [broadcastsound] [broadcastsoundworld] |
Play a sound (Bukkit names or ids, with volume and pitch) |
[giveexp] [takeexp] |
XP points, or levels with L |
[givemoney] [takemoney] |
Pay or charge through your economy mod's commands |
[givepermission] [takepermission] |
Change LuckPerms permissions |
[meta] |
Store numbers, text and toggles on players (saved with the world) |
[ephemeralcooldown] |
Per-player cooldowns: "one free diamond every 30 minutes" |
[connect] |
Send the player to another server behind BungeeCord or Velocity |
[chat] [log] [placeholder] |
Chat as the player, write to the console, parse placeholders |
## ✅ Requirements
Show items only to the right people, and stop clicks that shouldn't happen — with deny messages.
`has permission` · `has permissions` · `has item` (name, lore, model data, armor, offhand) · `has exp` · `has money` · `has meta` · `is near` · `string equals / contains` (and ignore-case, and negated) · `>` `>=` `==` `!=` `<=` `<` · `regex matches` · `string length` · `is object` · `javascript` · `has ephemeral cooldown`
Combine them with `optional`, `minimum_requirements` and `stop_at_success`, and run `success_commands` or `deny_commands`.
## 🔤 Placeholders
There's no PlaceholderAPI on Fabric, so the common ones are built in:
| Placeholder | Shows |
|---|---|
%player_name% %player_displayname% %player_uuid% |
Who's looking |
%player_level% %player_health% %player_food_level% %player_gamemode% |
Their stats |
%player_world% %player_x% %player_y% %player_z% %player_biome% |
Where they are |
%player_has_permission_% %player_is_op% |
yes / no |
%server_online% %server_max_players% %server_tps% %server_motd% |
The server |
%deluxemenus_meta___% |
Stored player meta |
%deluxemenus_ephemeral_cooldown_% |
Seconds left on a cooldown |
With [Text Placeholder API](https://modrinth.com/mod/placeholder-api) installed, **every `%namespace:name%` placeholder from other mods works too** — balances, ranks, playtime, whatever your other mods register.
## 💬 Commands
`/deluxemenus`, also `/dm` and `/dmenu`.
| Command | Who | Does |
|---|---|---|
/dm open<menu>[player] [-p:]</menu> |
op | Open a menu, for someone else, or with another player's placeholders |
/dm list [page|all] |
op | Loaded menus and their commands |
/dm reload [menu] |
op | Reload everything or one menu, no restart |
/dm refresh<menu></menu> |
op | Rebuild a menu for everyone looking at it |
/dm execute |
op | Run any action on a player |
/dm meta … |
op | Read and change player meta |
Each `/dm` command has its own permission node (`deluxemenus.open`, `deluxemenus.reload`, …). **LuckPerms** works out of the box — the Fabric Permissions API is built in. Without a permissions mod, ops get everything, the same as Bukkit.
## 💰 Economy
Fabric has no Vault, so you point the money features at your economy mod in `config/deluxemenus/config.yml`:
```yaml
economy:
balance_placeholder: '%impactor:balance%' # for "has money"
give_command: 'eco give {player} {amount}' # for [givemoney]
take_command: 'eco take {player} {amount}' # for [takemoney]
```
## 🔁 Differences From the Plugin
* **`javascript` requirements** run on a built-in evaluator: comparisons, `&&` `||` `!`, maths, string methods like `.equals` and `.contains`, `parseInt`, `Math.*`. Full scripts with variables or loops aren't supported.
* **Items from other Bukkit plugins** (HeadDatabase, ItemsAdder, Oraxen, Nexo, MMOItems, ExecutableItems…) show as stone. Use the `/give` syntax for modded items instead.
* `/dm dump` and the `nbt_*` options (gone in Minecraft 1.21.4 anyway) aren't included.
* Open commands are always registered, so players always get tab-completion.
## 📦 Versions
**One jar, every 1.21 release.** `DeluxeMenus-Fabric-.jar` carries one build per group of versions (1.21–1.21.1, 1.21.2–1.21.3, 1.21.4, 1.21.5, 1.21.6–1.21.8, 1.21.9–1.21.10, 1.21.11), and Fabric Loader picks the one that matches your server.
Features that need a newer Minecraft simply do nothing on older ones: item models and tooltip styles start at 1.21.2, and the full custom-model-data component at 1.21.4.
**Requires:** Fabric Loader 0.16+ and Fabric API. **Optional:** LuckPerms, Text Placeholder API.
---
## 🛠️ Need it to fit your server? I'll build you your own version.
What is on this page is the public build. It is free, it is complete, and it reads your plugin menus out of the box — but it is made for a *general* server, and "a general server" is not yours.
**If your server runs on menus, message me and I will make it fit:**
* **Other versions.** Older or newer Minecraft than 1.21, or another mod loader.
* **Your mods, hooked in.** Your economy, your custom items, your ranks and placeholders, working directly in menus instead of through console commands.
* **New actions and requirements.** Whatever your menus need to do that the plugin never could.
* **Moving from Bukkit.** Bring your existing DeluxeMenus setup and I will get it running on Fabric.
**Contact me in my discord server if you need porting to other versions or to adjust the mod to your server**