Skip to content

校验报错速查(Troubleshooting)

所属:参考 · 相关:物品定义 · 资源包 · 层与装配

保存 / 重载物品时,QI 会跑一整套校验(PolicyEngine 及各 validator)。本页把每一条可能出现的报错原文、触发原因、是错误(阻止保存)还是警告(允许保存)、以及修法列全。

报错出现在:/qi reload 控制台、GUI 保存提示、/qi status / /qi diagnose / /qi problems


1. 物品健康检查(QinhItemDefinition.healthIssues)

物品结构完整性。全部为 错误(物品 unhealthy,列入问题清单)。

报错原文原因修法
id 为空物品 ID 缺失补顶层键
type 为空类型缺失type 或确认文件名是合法类型
material 为空材质缺失material
sourceFile 为空来源文件丢失(内部)重新保存
缺少 displayName/lore名和 Lore 都没有至少给 display_namelore 之一
maxStackSize 非法options.max_stack_size ≤ 0改成 1–99
configVersion 非法版本号 ≤ 0update.version 为正整数
unknown type=$type类型不在 item_types.yml用合法类型,见 物品类型
unknown material=$material材质不是合法 Bukkit 材质用合法原版材质名或外部源引用

2. PolicyEngine(总校验)

报错原文原因类型
变量键 '$key' 违反 ICVM 红线变量键用了语义保留字(见 §8)错误
物品 $id ($sourceFile) 内联 actions 无法解析内联 actions 块解析失败(缩进 / 格式错)错误

「内联 actions 无法解析」最常见原因是 缩进错位actions 块必须与 material/type 同级,错一格整段失效。


3. 资源包字段校验(ResourcePackValidator)

全部为 错误。详见 资源包 → 校验约束

报错原文原因
resource_pack.custom_model_data 不能为负数 ($cmd)CMD < 0
resource_pack.model 不能为空字符串model 空白
resource_pack.model 需 namespace:path 格式,got '$trimmed'model 缺命名空间(无冒号)
resource_pack.model 不能含空格model 含空格
resource_pack.model 禁止与状态/变量绑定 ($deny)model 含禁止子串 { } $ star tier layer
resource_pack 含禁止字段 $forbidden — 仅允许 custom_model_data / modelresource_pack 出现非法键

resource_pack 仅允许两个键custom_model_datamodel


4. 资源包隔离扫描(ResourcePackReferenceScanner)

全部为 错误,前缀 [RP_POLICY]。设计意图:模型外观必须静态、不能随物品状态变化。

报错原文原因
[RP_POLICY] ResourcePack cannot reference ICVM variables — $field: '...'model 含 { } % ${ 或变量引用
[RP_POLICY] ResourcePack cannot bind layers — $field: '...'model 含层 token:layer/layers/patch/patch_pack/layerstack/write_domain/instance/runtime/compiled/compile_epoch
[RP_POLICY] ResourcePack cannot depend on actions — $field: '...'model 含动作 token:action/actions/trigger/triggers/handler/refs/dispatch/cooldown/routing
[RP_POLICY] ResourcePack cannot contain conditional rendering — $field: '...'model 含条件 token:if/when/unless/condition/switch/random/weight

5. 动作引用校验(ActionRefDeclarationValidator)

报错原文原因类型
ActionTable id 不能为空动作表无物品 ID错误
trigger '$trigger' 无 refs触发器没配处理器警告
trigger '$trigger' ref[$i] 缺少 handlerref 缺 handler错误
trigger '$trigger' ref[$i] handler 不能含空格handler 含空格错误
trigger '$trigger' ref[$i] handler 建议使用 namespace:id 格式(如 qinhskills:cast)handler 无冒号前缀警告
trigger '$trigger' ref[$i] handler '...' — QinhSkills 未加载,runtime 将为 HANDLER_UNAVAILABLE用了 qinhskills:cast 但 QS 未装警告
trigger '$trigger' ref[$i] handler '...' 未注册 — runtime 将为 HANDLER_UNAVAILABLEhandler 未注册警告

警告不阻止保存,但运行时该处理器会返回 HANDLER_UNAVAILABLE。处理器列表见 处理器


6. Provider 校验(ProviderDeclarationValidator)

全部为 错误

报错原文原因
providers.$id 含非载体键 $illegal — 仅允许 [value, raw, data, payload]provider 用了非法载体键
providers.$id 载荷为空provider 载荷为空

允许的载体键value / raw / data / payload。详见 Provider 与桥


7. 动作路由红线(ActionRoutingPolicy)

报错原文原因类型
[QinhItems] Action 路由红线: trigger '$trigger' 禁止字段 $forbidden — 只允许 trigger→refs/cooldown/conditions;复杂流程(if/else/when/switch…)请放 Handler 内触发器出现逻辑字段strict: true 阻止,false 仅警告

禁止字段(FORBIDDEN_TRIGGER_KEYS)if else when unless switch match filter require rules flow chain pipeline logic tree variables layer providers priority weight random

复杂逻辑请开发处理器


8. 层语义红线(LayerSemanticGuard)

变量键不能复用「战斗语义」保留字(防破坏平衡)。

报错原文原因
[QinhItems] Layer 红线: 禁止语义变量键 '$key' ($context)。请用 star/quality 等状态键。变量键命中拒绝列表
[QinhItems] Layer 红线: 可疑语义键 '$key' ($context)变量键含 attack(除 attack_count

拒绝列表(SEMANTIC_KEY_DENYLIST)attack_damage attack damage crit critical crit_rate crit_damage defense armor health hp mana mp physical_attack magic_attack element fire ice lightning skill skills ability abilities strength dexterity intelligence vitality attack_speed movement_speed lifesteal

想表达品质 / 星级,用 star / quality 等状态键,别用属性名当变量键。属性请走 providers.ap


9. 写域违规(WriteDomainPolicy)

strict: true(默认)为错误,false 为警告。三个域:INSTANCE / LAYER / RUNTIME,详见 层与装配 → 写域策略

报错原文原因
runtime owner 不能为空运行时写入 owner 空
owner '$o' 保留给 instance 域(give/init);runtime 请用 qi_admin / qi_ui / buff_*运行时用了 instance 保留 owner
owner '$o' 属于 layer 系统域;请用 QinhItemsAPI.assembly().applyLayerPatch()运行时用了 layer 域 owner
runtime override 只允许 UI/admin/临时 buff owner(如 qi_admin, qi_ui, buff_*)运行时 owner 不匹配
layer id / owner 不能为空层写入缺 owner/id
layer owner '$o' 不能来自 runtime 域(ui/admin/buff)层用了 runtime owner
layer owner 不能使用 instance 保留 owner '$o'层用了 instance 保留 owner
layer 只允许系统插件 owner/id(forge/gem/enchant/strengthen 等,见 write-domains.layer-owners)层 owner 不匹配

默认 owner / 前缀

owner前缀
RUNTIMEqi_admin qi_ui adminbuff_ temp_ ui_
LAYERstrengthen forge gem enchant socket refine embed upgradesys_ layer_
INSTANCE 保留qi_core give init template

10. 排错速查:最常见 8 类问题

  1. 动作不生效 / 整段失效 → 缩进错位,actions 必须与 material 同级;改完 /qi reload
  2. 变量键报红线 → 别用 attack_damage 等属性名当变量键,用 star/quality
  3. resource_pack 报错 → 只能有 custom_model_data / modelmodel 不能含变量 / 层 / 条件。
  4. provider 报错 → 载体键只能是 value/raw/data/payload,且非空。
  5. handler 警告 → 用 命名空间:id 格式;qinhskills:cast 需装 QinhSkills。
  6. 触发器禁止字段 → 别在 YAML 写 if/switch,逻辑放处理器。
  7. 写域违规 → 改物品状态分清是 instance / layer / runtime 域,用对应 API。
  8. unknown type / material → 类型查 item_types.yml,材质用合法原版名。

下一步