Skip to content

config.yml raw text line-by-line annotation

Belongs to: Reference · Related: Config file (sectioned version)

This page shows the complete default raw text of plugins/QinhItems/config.yml, with line-by-line annotations after each section. For the topic-grouped explanatory version, see config.yml full config.

After editing, run /qi reload to apply. Comment lines (starting with #) are QI's built-in explanations and can be kept.


Top: language and folders

yaml
# QinhItems main config

language: zh_CN

# Item definition folder (relative to plugin folder)
items-folder: items

# Deprecated — Actions are only written inside actions.triggers in items/*.yml
# actions-folder: actions

# Items without a type field fall into this type
default-type: misc

# When giving items, whether to try filling the player's inventory slots
give-overflow-drop: true
KeyDefaultDescription
languagezh_CNMessage language code
items-folderitemsItem YAML folder (relative to plugin data folder)
default-typemiscDefault type for items without a type field
give-overflow-droptrueWhen /qi give finds the inventory full, the overflow drops naturally

actions-folder is deprecated: actions are only written inside actions.triggers in items/*.yml.


Write domain isolation write-domains

yaml
# Write Domain Isolation — separates runtime / layer / instance write sources
write-domains:
  strict: true
  runtime-owners:
    - qi_admin
    - qi_ui
    - admin
  runtime-prefixes:
    - buff_
    - temp_
    - ui_
  layer-owners:
    - strengthen
    - forge
    - gem
    - enchant
    - socket
    - refine
    - embed
    - upgrade
  layer-prefixes:
    - sys_
    - layer_
  • strict: true — Strict domain isolation; out-of-bounds writes raise an error; false only warns.
  • runtime-owners / runtime-prefixes — Owners / prefixes allowed to write to the RUNTIME domain (temporary buffs / UI).
  • layer-owners / layer-prefixes — Owners / prefixes allowed to write to the LAYER domain (socketing / strengthening / embedding).

For the mechanism see Layers and Assembly → Write domain policy; for related errors see Validation error quick reference §9.


Action routing and notifications

yaml
# Action routing red line — forbids logic fields like conditions / if / flow
action-routing:
  strict: true

# Action runtime player notifications (self-testing / troubleshooting)
actions:
  notify-cooldown: true
  notify-handler-unavailable: true
  • action-routing.strict: true — Logic fields (if/when/switch…) appearing in an action raise an error; false only warns. See Action system → Design.
  • actions.notify-cooldown — Notify the player when triggered during cooldown.
  • actions.notify-handler-unavailable — Notify when a handler is unavailable.

Gem bridge gem / legendinlay / magicgem

yaml
# Gem bridge (Legendinlay / MagicGem, choose one or coexist, see integrations/*_guide.yml)
gem:
  inject-sockets: true
  inject-on-rebuild: false

legendinlay:
  enabled: true
  # Fixed template seed, so items produced by /qi give and LegendCore getHookItem have consistent PDC (the inlay GUI recognizes gems)
  stable-item-compare: true
  socket-catalog: integrations/legendinlay_sockets.yml
  inject-sockets: true
  inject-on-rebuild: false
  # Automatically writes plugins/LegendCore/groovy/QinhItemsModule.groovy and runs lce reload
  auto-deploy-lc-script: true

magicgem:
  enabled: true
  socket-catalog: integrations/magicgem_sockets.yml
  inject-sockets: true
  inject-on-rebuild: false
  • gem.inject-sockets — Render socket Lore.
  • gem.inject-on-rebuild — Whether to re-sync the provider on rebuild() (off by default).
  • legendinlay.stable-item-compare — Fixed template seed, guaranteeing consistent PDC (the inlay GUI recognizes gems).
  • legendinlay.auto-deploy-lc-script — Automatically deploys the LegendCore groovy fallback script.
  • *.socket-catalog — Socket catalog path for each backend.

For full details see Gem sockets and Integrations.


Combat module combat

yaml
# Combat module (merged into QI) — when false, pure item-library mode
combat:
  enabled: true
  attribute-backend: auto   # auto | attributeplus | noop
  swing:
    vanilla-hit: true       # On swing, Bukkit attack(), damage settled by AP
  • combat.enabledfalse = pure item-library mode (no attributes added).
  • attribute-backendauto (detects AP) / attributeplus / noop.
  • swing.vanilla-hit — On swing, calls Bukkit attack(), damage settled by AP.

See Attributes and values.


Soulbound soulbound

yaml
soulbound:
  enabled: true
  lore-format: "&7{owner}的物品"
  auto-bind-on-pickup: true
  scan-containers: true
  bypass-permission: "qinhitems.bypass.soulbound"
  message-cooldown-ticks: 20
  messages:
    drop: "&c该物品已被灵魂绑定,无法丢弃。"
    pickup: "&c该物品属于 {owner},你无法拾取。"
    move: "&c该物品属于 {owner},你无法移动。"
    container: "&c该容器内存放着已绑定的物品,无法破坏。"
    container-drop: "&c「{container}」中存有绑定物品,不可丢弃。"

Item by item:

KeyDescription
enabledMaster switch
lore-formatBound Lore line; {owner} owner name, {level} bind level; leave empty to hide
auto-bind-on-pickupAuto-binds when picking up an unbound item carrying bind_on_acquire
scan-containersRecursively scans shulker boxes: retrieves bound items inside on death, blocks smuggling via drop / break
bypass-permissionHolders of this permission ignore all binding restrictions
message-cooldown-ticksRejection-notification cooldown (ticks), prevents spam; 0 = no limit
messages.dropDropping a bound item
messages.pickupPicking up another's bound item
messages.moveMoving a bound item in inventory / container
messages.containerBreaking a container holding bound items
messages.container-dropDropping a container holding bound items; {container} = shulker box name

See Soulbound.


Attribute mapping attribute-mapping

yaml
attribute-mapping:
  attack_damage: "物理伤害"
  health: "生命"
  defense: "防御"
  attack_speed: "攻击速度"
  magic_damage: "魔法伤害"
  armor_penetration: "护甲穿透"
  max_mana: "最大魔法"
  mana_regen: "魔法恢复"
  • The left side is QI's internal attribute key (ICVM), the right side is the real attribute display name in your AttributePlus.
  • The first three are core keys (used by the base editor / growth base values); the rest are non-core mappings for importing from MMOItems etc.
  • Keys not listed are passed as-is as lore lines to AP (no effect if AP doesn't recognize them).
  • AP attribute names are customized by the server owner in plugins/AttributePlus/attribute.yml.

See Attributes and values.


Next steps