DUXPLIMA Documentation

Menu files

Every key a window file takes, the tile line, lists, clicks and actions, and changing a shipped window.

Every window is a file in menus/: collection.conf, leaderboard.conf, admin.conf and picker.conf. Move a slot, change a material, take a fact off a tile, and the plugin draws what you wrote; nothing about a window's layout is decided in the code. /uxmeastereggs reload reads the files again. A file that cannot be read falls back to the window shipped in the jar, and the console says why. A file you delete stops its window at the next reload, and the next start writes it back.

The windows are described on their own pages: Collection, Leaderboard, Placed eggs, Type picker.

The window

KeyMeaning
titleThe window title: @key for a line of the messages files, or your own words
rowsChest height, 1 to 6
open-actionsActions run when the window opens, such as its sound
close-actionsActions run when it closes
placeholders { }Values a tile reads as %name%, written by you
fill-itemOne item painted into every slot nothing else drew
click-cooldownMilliseconds two clicks must be apart to count as two
refresh { enabled, interval-ticks }Draws the window again on a timer
chest-onlytrue keeps Bedrock players on the chest instead of a form

A tile

Each entry under items { } is one tile, keyed by a name you choose.

KeyMeaning
slot, slotsWhere it sits: a number, or a list mixing numbers and ranges such as "10-16"
priorityWhich tile wins a slot two of them ask for; the highest is drawn last
materialThe item: a material name, a %token% the window fills in, or head:<url, texture or account id>
nameThe tile's name: @key, your own words, or " " for a tile whose title is drawn by its lore
loreLines under the name, or one tile line (below)
typeprevious or next turns the page of the window's list; leave it out for a plain tile
viewConditions that hide the tile unless they hold, such as ["eggs:nobody"] or ["has-next"]
click { }What each gesture does
list { }Fills the tile's slots from a list the plugin provides
decor { }The look of the item: see below
updatetrue draws the tile again on every refresh

The tile line

Every shipped tile is a blank name and one lore line that draws the whole tooltip in the house shape: a title, the category under it, a description, the facts, and the lines that say what a click does.

name = " "
lore = ["tile:accent @menu.summary found percent"]
PartMeaning
tile:<colour>The colour of the title: a gradient of theme.conf, a role such as good or muted, or a place on the colour wheel as a number
@<key>The block of the messages files the words come from: its title, crumb, description and action
<fact> ...The rows of that block to draw under Details, in this order. Take a word off and the tile shows one fact fewer
-actionLeaves the click lines off
state:<fact>Draws a fact as a state, with the theme's status glyph

A %token% inside the colour is filled in first, which is how tile:%type_position% gives each type tile its own place on the colour wheel. The words stay in the messages files, so moving a tile never touches a translation.

Clicks

click {
  left         = ["eggs:teleport", "sound:block.note_block.pling 0.6 1.5"]
  "shift-left" = ["eggs:remove", "sound:block.note_block.bass 0.6 0.9"]
}

The gestures are left, right, shift_left, shift_right, middle, drop, control_drop, double_click and any; a hyphen works in place of the underscore. A gesture with nothing written does nothing. Each is a list of actions, run in order.

ActionDoes
closeCloses the window
open:<window>Opens another window by its file name without .conf: open:leaderboard
command:<line>Runs a command as the player, without the slash
message:<line>Sends your own words to the player, in MiniMessage
sound:<name> <volume> <pitch>Plays a sound, by its key such as block.note_block.pling
eggs:...The window's own actions, listed on its page

An action the window does not know is reported in the console when the file is read.

Lists

standings {
  slots = ["10-16"]
  priority = 5
  list {
    source = "eggs:standings"
    template {
      material = "head:%player_id%"
      name = " "
      lore = ["tile:value @menu.leaderboard.tile found"]
    }
  }
}

The plugin fills the slots with one page of entries, row by row; the number of slots is the size of a page. A previous and a next tile turn the pages. They are drawn on every page and do nothing where there is no page to go to; write view = ["has-next"] or view = ["has-previous"] on one to show it only when it turns a page.

SourceWindowEntries
eggs:typescollection.confEvery egg type, with the viewer's progress on it
eggs:standingsleaderboard.confThe top finders, menu.leaderboard.size of them
eggs:placementsadmin.confEvery placed egg
eggs:pick-typespicker.confEvery egg type, to place
KeyMeaning
sourceThe list to draw
templateThe tile drawn once per entry, with the entry's tokens
empty { }A tile drawn in each slot a page leaves without an entry
align = centerCentres the short last row of a page

decor

KeyMeaning
amountThe stack size shown
glowtrue for the enchantment shine; may be a token such as %type_complete%
model-data, item-modelA resource pack's model
hide-tooltiptrue hides the whole tooltip, used on the filler panes
hide-vanilla-tooltipHides the lines the client writes under the lore; on by default
leather-colorA dye for leather, as #rrggbb
enchantments, flagsEnchantments to show, and item flags

Notes

  • A file that does not parse is reported in the console and the shipped window is drawn until it is fixed. /uxmeastereggs doctor counts the windows that were read.
  • A slot past the window's last is dropped.
  • Keep a filler. The grey pane under every free slot is what makes a handful of icons read as a menu.

Related: Menus, Messages, theme.conf