Skip to content

Accessory Sets ​

Accessory sets: which members make up a set, where each piece must be worn, and how many pieces trigger which tier. Accessory sets live under plugins/EmakiAccessory/sets/; the file name is not used for identification, and the set id comes from the id field inside the file

Accessory sets and EmakiItem equipment sets are independent mechanisms that do not affect each other: this one only counts pieces worn in accessory slots, while EmakiItem only counts the equipment slots. One item can belong to both sides at once, and each side counts independently

Only the enabled page contributes pieces: accessories on other pages never count, even when a full set sits there. When a player loses the enabled page's permission, that page contributes zero and the set deactivates

Full Example ​

yaml
id: "example_set"
display_name: "<gold>Trialist's Accessories</gold>"

pieces:
  necklace:
    item: "example_necklace"
    slot: "necklace"
    display: "<gray>Trialist's Necklace</gray>"

  ring:
    item: "example_ring"
    slot: "ring"
    display: "<gray>Trialist's Ring</gray>"

  charm:
    item: "example_charm"
    slot: "charm"
    display: "<gray>Trialist's Charm</gray>"

thresholds:
  2:
    effects:
      - ea_attributes:
          max_health: 4.0
          defense: 2.0

  3:
    effects:
      - ea_attributes:
          max_health: 6.0
          crit_chance: 0.05
        es_skills:
          - "example_dash"

Top-Level and pieces Fields ​

FieldTypeRequiredDefaultAllowed valuesDescription
idstringYes——Set id; when it normalizes to blank the whole file is skipped
display_namestringNo""—Set display name; MiniMessage is supported
piecesmap<string, object>Yes——Set members; with zero members the whole definition is skipped (accessory.set_without_pieces)
pieces.<memberKey>.itemstringYes——EmakiItem's item definition id; when it normalizes to blank the member is skipped (accessory.set_piece_invalid)
pieces.<memberKey>.slotstringNoempty (treated as all internally)a part id / a slot instance id / emptyWhere this accessory must be worn to count; a value that can never hit an accessory slot keeps the member at zero
pieces.<memberKey>.displaystringNo""—Text used when presenting this member in the window
thresholdsmap<integer, object>No{}keys must be integers between 1 and the member countPiece thresholds; when the section is missing or fully skipped, the set still exists but grants nothing

The key names are only identifiers within the file; what actually matters is item and slot

Without EmakiItem the whole set is inactive: with no definition id, the system cannot decide "this is that accessory"

The Three Forms of slot ​

FormMeaning
A part id, such as ringAny cell of that part counts
An instance id, such as ring_1Only that one cell counts
EmptyAny accessory slot counts (the internal value is all)

thresholds — Piece Thresholds ​

The key is "how many pieces are worn" and must be an integer between 1 and the member count; non-numeric or out-of-range tiers are skipped and logged as accessory.set_threshold_not_numeric / accessory.set_threshold_out_of_range

Thresholds are cumulative, not exclusive: wearing 3 pieces activates both the 2-piece and 3-piece tiers. Take the example above: a player wearing 3 pieces receives max_health: 10.0 (4.0 + 6.0), defense: 2.0, crit_chance: 0.05 and the skill example_dash

effects ​

FieldTypeRequiredDefaultAllowed valuesDescription
thresholds.<count>.effectslist<object>No[]—Effects of that tier; across the entries of the list, same-named attributes are summed and skills deduplicated
thresholds.<count>.effects[].ea_attributesmap<string, number>No{}values must be finite numbers (NaN/Infinity are dropped)A map from attribute name to value, feeding EmakiAttribute. Names that normalize to blank are dropped
thresholds.<count>.effects[].es_skillslist<string>No[]—A list of skill ids, feeding EmakiSkills; duplicates are removed
yaml
thresholds:
  2:
    effects:
      - ea_attributes:
          max_health: 4.0
          defense: 2.0

  3:
    effects:
      # several entries and several skills can stack on one tier
      - ea_attributes:
          max_health: 6.0
        es_skills:
          - "example_dash"
      - es_skills:
          - "example_leap"

Attribute names and value semantics follow EmakiAttribute, and skill ids follow EmakiSkills. For how these connect to the respective modules, see Attributes and Skills

Piece Count Notifications ​

When a set's equipped piece count changes, AccessorySetBonusChangeEvent fires. It fires only at the moment the count changes, never repeats while the count stays the same, and cannot be cancelled; see Event API

Accessories in orphaned slots never count toward the total, so removing a part from parts.yml lowers the count reported here