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/: stats.conf, top.conf, list.conf and editor.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. /uxmkotl reload reads the files again. A file that is missing or cannot be read falls back to the window shipped in the jar, and the console says why.

The windows are described on their own pages: Your record, Leaderboard, Arena list, Arena editor.

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, or a %token% the window fills in
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 ["kotl:nobody-yet"] 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:header @menu.stats.record held longest claims kills"]
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 key is filled in first, which is how one line reads @menu.list.arena.%arena_state% and so picks the block for an open, shut or half built arena. The words stay in the messages files, so moving a tile never touches a translation.

Clicks

click {
  left        = ["kotl:edit", "sound:block.note_block.pling 0.6 1.5"]
  shift_right = ["kotl:delete", "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:top
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
kotl:...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

players {
  slots = ["10-16", "19-25", "28-34"]
  priority = 5
  list {
    source = "kotl:top"
    template {
      material = PLAYER_HEAD
      name = " "
      lore = ["tile:header @menu.top.player held longest"]
    }
  }
}

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
kotl:toptop.confThe best players by time held, menu.top.size of them
kotl:arenaslist.confEvery arena, complete or not
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 %enabled%
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. /uxmkotl 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