Skip to content

The Menu

The whole look of the quest board lives in the menu section of config.yml. Leave the section out entirely and you get the classic three-row board. Every key has a safe default, so you only set the ones you want to change. Run /dq reload after editing.

menu:
# How many rows tall, 1 to 6. Only used when you do not set a layout.
rows: 3
# Hide the tool info on icons: the "6 Attack Damage, 0.6 Attack Speed"
# block and the "Durability" line a weapon or tool icon shows. Keep true
# unless you want them.
hide-item-attributes: true
# Sound played when the board opens. Empty means silent.
open-sound: ""
open-sound-volume: 1.0
open-sound-pitch: 1.0
# The filler item drawn in empty frame slots.
filler:
material: GRAY_STAINED_GLASS_PANE
name: " "
# Your own decoration items, keyed by a single letter used in the layout.
custom-items:
P:
material: BLACK_STAINED_GLASS_PANE
name: " "
# Optional custom layout. Overrides rows. One line per row, 9 columns.
# layout:
# - "PPPPTPPPP"
# - "PQQQQQQQP"
# - "PPPPBPPPP"

For a plain resize, set rows between 1 and 6 and leave layout commented out. You get the classic frame at that height, with the timer up top, the quests centered, and the bonus at the bottom.

The filler item fills the frame. Set its material (any item, or a head) and its name. An optional lore list works too.

Uncomment layout to draw the board yourself. One string per row, nine columns each. Setting layout overrides rows, the height comes from how many rows you write.

Each character is a role:

CharacterSlot
Tthe time-left clock
Qa quest slot, add as many as your quests-per-player
Bthe completion bonus
a spaceleft empty
any other lettera custom-items entry for that letter, or the filler when that letter has no custom item
menu:
custom-items:
P:
material: BLACK_STAINED_GLASS_PANE
name: " "
layout:
- "PPPPTPPPP"
- "PQQQQQQQP"
- "PPPPBPPPP"

If a player has fewer quests than there are Q slots, the spare slots fall back to filler, so there are no holes.

Want the quests one row lower, with a full top row of decoration? Just move the Q line down. This board is five rows, decoration on top, quests on row four:

menu:
custom-items:
P:
material: BLACK_STAINED_GLASS_PANE
name: " "
layout:
- "PPPPTPPPP"
- "PPPPPPPPP"
- "PPPPPPPPP"
- "PQQQQQQQP"
- "PPPPBPPPP"

The board is exactly as tall as the number of rows you write, so add or remove lines to grow or shrink it, up to six rows.

Every entry under custom-items is keyed by a single letter you then place in the layout. Each takes a material, a name, and an optional lore list.

Anywhere a material or an icon is set, you can use a player head instead of a normal item:

SpecResult
head-<playername>that player’s skin, e.g. head-Notch
basehead-<base64>a custom textured head, the base64 is the value you copy from a heads site
menu:
custom-items:
H:
material: "basehead-eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6..."
name: "&aServer Info"
lore:
- "&7Play nice out there"

The same specs work for quest icons, see Creating Quests. A bad or missing texture falls back to a plain head rather than breaking the board.

Give a custom item an actions list and it turns into a clickable button. This is how you build a close button, a refresh button, a link to another menu, and so on. Actions run top to bottom on each click. The shape is the same one DeluxeMenus uses, each line starts with a tag in square brackets:

ActionWhat it does
[close]shut the board
[refresh]rebuild the board in place, so progress numbers go live again
[player] <command>make the clicker run the command
[console] <command>run the command from console
[message] <text>send the clicker a chat line
[broadcast] <text>send everyone a chat line
[sound] <key>play a sound to the clicker, optional key volume pitch

A close button and a refresh button, each on its own custom letter:

menu:
custom-items:
C:
material: BARRIER
name: "&cClose"
actions:
- "[close]"
R:
material: SUNFLOWER
name: "&eRefresh"
actions:
- "[refresh]"
layout:
- "PPPPTPPPP"
- "PQQQQQQQP"
- "PPPRBCPPP"

You can stack several actions on one button, they fire in order:

S:
material: EMERALD
name: "&aVisit Spawn"
actions:
- "[message] &aOff to spawn!"
- "[sound] entity.enderman.teleport"
- "[player] warp spawn"
- "[close]"

The [sound] tag takes the same sound names as open-sound below, and an unknown tag or a bad sound key is skipped quietly rather than breaking the click.

open-sound plays when a player opens the board. Leave it empty for silence. open-sound-volume and open-sound-pitch tune it, 1.0 is normal for both.

menu:
open-sound: "block.chest.open"
open-sound-volume: 1.0
open-sound-pitch: 1.0

A name the game does not know simply plays nothing, it never breaks the open.

Use the Minecraft sound key, the lowercase dotted form shown below. That form always works. An enum-style name like BLOCK_CHEST_OPEN is also accepted, but only for sounds whose parts have no underscore of their own, so block.chest.open is fine as BLOCK_CHEST_OPEN, while block.note_block.pling must be written in the key form because of the underscore inside note_block. When in doubt, copy the key form straight from this table.

Sounds likeMinecraft key (use this)Enum form also accepted
Chest openingblock.chest.openBLOCK_CHEST_OPEN
Chest closingblock.chest.closeBLOCK_CHEST_CLOSE
Ender chest openingblock.ender_chest.openkey form only
Barrel openingblock.barrel.openBLOCK_BARREL_OPEN
Soft button clickui.button.clickUI_BUTTON_CLICK
Lever flipblock.lever.clickBLOCK_LEVER_CLICK
Wooden buttonblock.wooden_button.click_onkey form only
Toast pop inui.toast.inUI_TOAST_IN
Page turnitem.book.page_turnkey form only
Note block plingblock.note_block.plingkey form only
Note block bellblock.note_block.bellkey form only
Note block harpblock.note_block.harpkey form only
Amethyst chimeblock.amethyst_block.chimekey form only
Bell ringblock.bell.useBLOCK_BELL_USE
XP pickupentity.experience_orb.pickupkey form only
Level upentity.player.levelupENTITY_PLAYER_LEVELUP
Item pickupentity.item.pickupENTITY_ITEM_PICKUP
Villager yesentity.villager.yesENTITY_VILLAGER_YES
Villager tradeentity.villager.tradeENTITY_VILLAGER_TRADE
Beacon power onblock.beacon.activateBLOCK_BEACON_ACTIVATE