Content generated with AI — it may contain mistakes.

Configuring

The menu

One screen: armor along the top, three faces in the grid, all of it editable in menus/trims.yml.

/armortrim opens a single window. What is being engraved sits along the top; what can go on it sits below. Nothing is reopened between steps, so the armor never moves and a half-built choice is never lost.

The two lists

SectionDefault slotsWhat it holds
targets2,3,4,5,6FULL SET and the four pieces. The marked row is what is being engraved.
grid10-16,19-25,28-34,37-43What can go on it: presets, patterns or materials, depending on the tab.

The grid has three faces and one section, because a slot belongs to one list. The tab swaps what it holds:

PRESETS

Every preset from trims.yml, each under its own name.

CUSTOM → patterns

The tab always lands on the patterns, never on the materials of a pattern chosen minutes ago: switching tabs is how a player starts over.

CUSTOM → materials

Once the pattern is picked, the grid moves to the materials, already previewed with that pattern.

Presets and materials are drawn on the armor the player is really wearing: a netherite chestplate previews the trim on netherite. The patterns are drawn as their own smithing template instead — at that point no material has been picked, and the same shape on a helmet the size of an inventory icon is one picture eighteen times over. Swap %entry_icon% back to %preview_material%, with an armor_trim block, to preview them on armor too.

Fixed buttons

ButtonSlotWhat it does
PRESETS0Opens the presets face.
CUSTOM8Opens the patterns. With require-permission on it needs exyliaarmortrims.custom.
BARE EVERYTHING45Takes the trim off all four pieces.
CLOSE49Closes.
Previous / next48 / 50Grid pagination.

The two tabs are one button each, not two drawings of the same slot: each shows %presets_status% or %custom_status%, which come from menu.tab-open and menu.tab-closed in config.yml.

What a click does

WhereClickResult
A piece along the topLeftEngraves that piece from now on.
A piece along the topRightTakes its trim off.
A row in the gridLeftPuts that trim on, or takes it off when it was already the one worn.

Wearing something on FULL SET engraves only what the player may wear: a rank holding one piece of a preset gets that piece rather than a flat refusal.

Templates

The first template of a list is what a row in no particular state uses, so item_template goes first.

ListTemplates
targetsitem_template, focused_template, set_template, focused_set_template
grid · presetspreset_template, preset_selected_template, preset_unsupported_template, preset_locked_template
grid · patternspattern_template, pattern_selected_template, pattern_locked_template
grid · materialsmaterial_template, material_selected_template, material_locked_template

unsupported is a preset that does not fit the focused piece; locked is one the player may not use. A locked entry looks locked rather than simply not being there.

Placeholders in the file

These are the menu's own tokens, filled in while the screen is drawn. They are not PlaceholderAPI placeholders and only work inside this file.

The targets list holds two kinds of row — the full-set row first, then one row per piece — and each kind carries its own tokens.

PlaceholderWhereWhat it draws
%target%targets, anywhereWhat is being engraved: a piece key, or set for the full set.
%target_name%targets, anywhereIts name from menu: full-set, or the piece's own name.
%engraved%targets, full-set rowHow many of the four pieces carry a trim.
%pieces%targets, full-set rowHow many pieces there are in total — four.
%piece%targets, piece rowsThe piece's key: helmet, chestplate, leggings or boots.
%piece_material%targets, piece rowsThe material the player is actually wearing in that slot.
%trim_name%targets, piece rowsThe trim chosen for that piece, or menu.empty.
%trim_pattern%targets, piece rowsThat trim's pattern, empty when the piece carries none.
%trim_material%targets, piece rowsThat trim's metal, empty when the piece carries none.
%entry_id%gridThe row's id: a preset id, a pattern id, or a pattern/material pair.
%entry_name%gridIts display name.
%entry_icon%gridThe material the row is drawn as.
%preview_material%gridThe armor piece the row is previewed in.
%trim_pattern%gridThe pattern this row would engrave.
%trim_material%gridThe metal this row would engrave.
%entry_worn%gridThe pieces the player already wears it on, empty when none.
%entry_worn_name%gridThe same, but menu.empty when none.
%entry_pieces%grid · presetsThe pieces the preset fits.
%material_name%grid · materialsThe metal's display name.
%pattern_name%grid · materials, anywhereThe chosen pattern's display name, or menu.empty before one is chosen.
%tab%AnywhereThe grid being shown: presets, patterns or materials.
%pattern%AnywhereThe chosen pattern's id, empty before one is chosen.
%presets_status%Anywheremenu.tab-open or menu.tab-closed for the presets tab.
%custom_status%AnywhereThe same, for the custom tab.

Actions

Six verbs, in the armortrim namespace:

ActionWhat it does
armortrim:openOpens the menu.
armortrim:focus <piece|set>Changes what is being engraved.
armortrim:tab <presets|custom>Swaps the face of the grid.
armortrim:pattern <id>Takes the first half and moves to the materials.
armortrim:wear <id|pattern/material>Puts that trim on, or takes it off.
armortrim:clear <piece|set>Takes the trim off one piece or all of them.

Each acts on the window the click came from, so a player with the menu open twice cannot move the wrong one.

Wording

The few strings a template cannot spell out slot by slot live in config.yml:

config.yml
menu:
  full-set: "{primary}&lFULL SET"
  helmet: "{primary}&lHELMET"
  chestplate: "{primary}&lCHESTPLATE"
  leggings: "{primary}&lLEGGINGS"
  boots: "{primary}&lBOOTS"
  empty: "{muted}Nothing"
  custom-name: "{primary}&l%pattern% {letters_black}» {secondary}&l%material%"
  tab-open: "{success}✔ You are here"
  tab-closed: "{warning}➥ Click to open"
No menu, no screen

With mode: item the menu does not exist: /armortrim answers with menu-disabled and nothing opens.

Something missing on this page? Tell us on Discord