How a glyph becomes a menu background
A chest menu prints its title in the top left corner, and that title can contain characters from the server resource pack. A glyph is such a character, drawn from your PNG. Place a large glyph in the title and the client paints it over the whole chest screen.
Two values position it. A negative shift moves the cursor left before the glyph, so the picture starts at the edge of the chest and not at the title indent. The glyph's ascent moves it vertically until it covers the menu. Slots stay real slots: where the picture shows a button, the menu has an empty slot with material: air that still runs click actions.
If you use ItemsAdder instead, read the ItemsAdder version of this guide. The idea is the same, only the config and placeholder names differ.
What you need
- DeluxeMenus and PlaceholderAPI on your server. DeluxeMenus parses PlaceholderAPI placeholders in
menu_title. - Nexo or Oraxen, which build the resource pack and provide the glyph and shift placeholders.
- For Oraxen: glyphs in inventory titles work natively on Paper 1.21.2 or newer. Older servers need PacketEvents, according to the Oraxen docs.
- A background PNG of at most 256×256 pixels. Bigger textures are not allowed for a single glyph.
Step 1: Design the background
Build the menu in the GUI Maker: choose the rows, a preset or theme, and draw big buttons across several slots. Under export pick Nexo or Oraxen, set a namespace (for example mymenus) and a menu name (for example shop).
The PNG is 256 pixels wide and between 164 pixels (one row) and 254 pixels (six rows) tall. The margin around the chest gives frames room to stick out of the normal menu outline.
Step 2a: Nexo glyph config
Nexo reads glyphs from any YAML file in its glyphs folder. The texture is written as namespace:path, here the PNG at plugins/Nexo/pack/assets/mymenus/textures/gui/shop.png:
gui_shop:
texture: mymenus:gui/shop
ascent: 45
height: 254heightis the drawn height. Use the real pixel height of the PNG.ascentmoves the glyph up. Nexo says the height must never be lower than the ascent.- The placeholders are
%nexo_gui_shop%for the glyph and%nexo_shift_<pixels>%for space, which may be negative.
Step 2b: Oraxen glyph config
Oraxen reads glyphs from plugins/Oraxen/glyphs/. Its texture path is relative to pack/textures/, so the PNG goes to plugins/Oraxen/pack/textures/gui/shop.png:
gui_shop:
texture: gui/shop
ascent: 45
height: 254- Oraxen requires
heightto be greater than or equal toascent; Minecraft enforces this. - The glyph placeholder is
%oraxen_gui_shop%. Shifts have two placeholders:%oraxen_shift_<pixels>%moves right,%oraxen_neg_shift_<pixels>%moves left. Each supports up to 2047 pixels. - A
charkey exists to pick the character yourself, but it is optional.
Step 4: Register the menu and reload
gui_menus:
shop:
file: shop.yml- Rebuild the pack:
/nexo reload(or/nexo reload pack) for Nexo,/oraxen reload allfor Oraxen. - Run
/dm reloadand test with/dm open shop. - Restart the server once. DeluxeMenus registers
/shopfromregister_command: trueonly on start. - Rejoin so you get the new resource pack.
Common errors and fixes
| What you see | Cause and fix |
|---|---|
%nexo_gui_shop% or %oraxen_gui_shop% as text | PlaceholderAPI is missing, or the glyph ID in the placeholder does not match the key in the glyph file. |
| An empty box or a wrong symbol | The pack was not rebuilt or the player has the old pack. Reload the plugin and rejoin. |
| Oraxen glyph missing only in menu titles | The server is older than Paper 1.21.2 and PacketEvents is not installed. |
| The picture is shifted | Shift or ascent does not match the PNG. Export again from the same design. |
| The picture is darker than the PNG | &f is missing before the first placeholder. |
| The glyph is rejected on load | ascent is higher than height, or the PNG is bigger than 256×256. |
/shop does nothing | The menu is not in config.yml, or the server was not restarted after adding it. |