Skip to content

User Guide Groups

Adam Burdík edited this page Sep 28, 2026 · 1 revision

Groups

A group represents a list of values read from an item. Either builtin (engine reads it directly off the ItemStack) or PDC-backed (admin-defined data stored as a delimited list).

Group definitions only describe the data source, never rendering.

group "enchantments" {
    builtin "enchantments"
// exposes: <ench_name>, <ench_level>, <ench_level_roman>
}

group "attributes" {
    builtin "attributes"
// exposes: <attr_name>, <attr_value>, <attr_slot>, <attr_color>
}

Attribute groups can be pre-filtered by equipment slot, useful for rendering a vanilla-style "When on Head: / When in Main Hand:" layout:

group "attributes-main-hand" {
    builtin "attributes" slot="main-hand"
}

group "attributes-off-hand" {
    builtin "attributes" slot="off-hand"
}

group "attributes-any" {
    builtin "attributes" slot="any"
}

group "attributes-head" {
    builtin "attributes" slot="head"
}

group "attributes-chest" {
    builtin "attributes" slot="chest"
}

group "attributes-legs" {
    builtin "attributes" slot="legs"
}

group "attributes-feet" {
    builtin "attributes" slot="feet"
}

Admin-defined groups are backed by a PDC-stored list:

group "tags" {
    source "pdc" key="tags" type="string_list"
    value-name "tag"
// exposes: <tag>
}

group "description" {
    source "pdc" key="description" type="string_list"
    value-name "line"
// exposes: <line>
}

group "abilities" {
    source "pdc" key="abilities" type="string_list"
    value-name "ability"
// exposes: <ability>
}

value-name sets the placeholder name usable inside a template each string. For tags, thats <tag>.

Using a group in a template

group "enchantments" each="<gray><ench_name> <ench_level_roman>" empty="skip"
Property Description
each Format string rendered once per element. Uses the group exposed placeholders, plus MiniMessage tags.
empty What happens with zero elements. Currently: skip (render nothing).
joiner Optional separator string, used with inline.
inline If true, all elements are joined into a single lore line using joiner instead of one line per element.

User Guide

Developer API

Plugin Integrations

Clone this wiki locally