Skip to content

Item Types and Capability Matrix

Belongs to: Server Admin Guide · Related: Item Definition · Quality and Display

An item type determines "which category an item belongs to" and "which features it can use". Configuration file: plugins/QinhItems/item_types.yml.

📋 Want to see the full table of each type's default material / editor icon / library category? See Resource File Overview → Full item_types table.


1. What Is a Capability (TypeCapability)

Each type declares which capabilities it supports. A capability is an enum:

CapabilityMeaning
SKILLSupports skills / action triggers (e.g. the left_click trigger)
ATTRIBUTESupports attribute modifiers (e.g. providers.ap)
GEM_SOCKETSupports gem sockets (gem-sockets field)
SETSupports Set bonuses
RENDERSupports custom rendering (resource pack / model data)
CONSUMABLEConsumable actions (consume trigger)
PROJECTILEProjectile behavior (bow / crossbow / trident)

The capability matrix defines boundaries: adding gem-sockets to a currency item (which only has RENDER) is meaningless, because it does not support GEM_SOCKET.

Query interface (developers):

kotlin
TypeCapabilityMatrix.capabilitiesOf(typeId): Set<TypeCapability>   // Includes capabilities inherited from parent types
TypeCapabilityMatrix.supports(typeId, capability): Boolean

2. Complete List of Built-in Types

The table below lists all of QI's built-in types (from QinhItemTypeRegistry.builtinDefaults()), grouped by purpose. The Aliases column lists the alternative spellings that can be used interchangeably at type:.

Combat

TypeAliasesCapabilities
weaponsword/weaponsSKILL · ATTRIBUTE · GEM_SOCKET · RENDER
armorarmourATTRIBUTE · RENDER
helmet(parent: armor)ATTRIBUTE · RENDER
chestplate(parent: armor)ATTRIBUTE · RENDER
leggings(parent: armor)ATTRIBUTE · RENDER
boots(parent: armor)ATTRIBUTE · RENDER
shieldATTRIBUTE · RENDER · SET
projectileammoPROJECTILE · RENDER
bowPROJECTILE · ATTRIBUTE · RENDER
crossbowPROJECTILE · ATTRIBUTE · RENDER
tridentPROJECTILE · SKILL · ATTRIBUTE · RENDER

Accessories

TypeAliasesCapabilities
ringSKILL · ATTRIBUTE · GEM_SOCKET · RENDER
necklaceSKILL · ATTRIBUTE · GEM_SOCKET · RENDER
braceletwristlet/bandSKILL · ATTRIBUTE · GEM_SOCKET · RENDER
accessorySKILL · ATTRIBUTE · GEM_SOCKET · RENDER

Crafting / Materials

TypeAliasesCapabilities
gemjewelRENDER · ATTRIBUTE
materialmat/materialsRENDER · SET

Consumables

TypeAliasesCapabilities
consumableuseableCONSUMABLE · RENDER · SET
foodedible/foodsCONSUMABLE · RENDER
scrollCONSUMABLE · SKILL · RENDER
seedcropsCONSUMABLE · RENDER
baitCONSUMABLE · RENDER

Tools / Miscellaneous

TypeAliasesCapabilities
tooltoolsRENDER · ATTRIBUTE
fishing_rodRENDER · SET
wandstaffSKILL · ATTRIBUTE · GEM_SOCKET · RENDER
horse_armorATTRIBUTE · RENDER
horsemountRENDER · SET
skullheadRENDER
currencycoin/coins/moneyRENDER
tokenticketsRENDER · CONSUMABLE
trophyaward/prizeRENDER · CONSUMABLE
propgadget/propsSKILL · CONSUMABLE · RENDER
miscother/miscellaneousRENDER (fallback type)

3. Parent Types and Capability Inheritance

Some types have a parent type and inherit the parent's capabilities. The most typical case is armor:

armor
├── helmet      (inherits armor's ATTRIBUTE · RENDER)
├── chestplate
├── leggings
└── boots

So helmet does not need to declare its capabilities separately; it inherits them from armor. TypeCapabilityMatrix.capabilitiesOf("helmet") returns the inherited capabilities as well.


4. item_types.yml Structure

item_types.yml defines type IDs, display names, capabilities, parent types, library categories, and so on. The structure roughly looks like:

yaml
types:
  weapon:
    display: "武器"
    aliases: [sword, weapons]
    capabilities: [SKILL, ATTRIBUTE, GEM_SOCKET, RENDER]
    library-category: weapons
  helmet:
    display: "头盔"
    parent: armor          # Inherits armor's capabilities
    capabilities: [ATTRIBUTE, RENDER]

In general you do not need to edit this file; the built-in types already cover the vast majority of needs. Only add a brand-new type when you need one. display is shown on the item's Lore in the "Item Type: xxx" line.


5. Custom Types

To add a brand-new type, add an entry under types: with at least display and capabilities, then run /qi reload. The item can then use type: your-new-type.

Note: the type must exist, otherwise the item will be unhealthy due to "unknown type" (see Item Definition → Health Check).


6. Types and "Libraries"

A type can be assigned to a library category (library-category). A library (LibraryManifest) is metadata that packages a group of types / capabilities into a distributable content pack, mainly used for content distribution / editor grouping. For developer details, see Layers and Assembly → Library Manifest.


Next Steps