Skip to content

配置智能体检

ArcartXSuite 内置智能配置自动修正系统,可在不中断服务的情况下,自动检测并修复 21 个模块的配置文件问题。

功能概览

智能体检系统提供四层诊断能力:

层级功能说明
1. 结构同步键对齐对比 jar 内默认配置,自动补全缺失键、标记废弃键
2. 类型修复值校验检查字段类型(STRING/INT/BOOLEAN 等),自动类型转换
3. 字段迁移版本升级根据 migrations/<from>-<to>.yml 执行重命名、删除、移动
4. 值验证范围/枚举验证数值范围(如 pool-size ∈ [1,100])、枚举值合法性

核心配置节说明

auth — 多方认证(单端)

仅在单端服务器有效。群组服请使用 ArcartXSuite-Proxy 插件,见 Proxy 使用文档

字段类型默认值说明
auth.auto-check-versionBOOLEANtrue启动时自动检测 authlib-injector 版本并提示更新
auth.yggdrasil-sourceSTRINGhttps://littleskin.cn/api/yggdrasil?mixed启动脚本中使用的 Yggdrasil API 地址。包含 ?mixed 时生成 start-mixed-auth 脚本
auth.mixed-proxy-portINT25599本地混合代理监听端口(?mixed 模式下使用)

account-type — 统一账号识别

字段类型默认值说明
account-type.enable-mojang-lookupBOOLEANtrue是否查询 Mojang API 识别微软正版。关闭后仅按 UUID 版本判定
account-type.mojang-timeout-msINT5000Mojang API 请求超时(毫秒)
account-type.debugBOOLEANfalse是否输出账号判定调试日志

tacz-compat — 永恒枪械工坊兼容

字段类型默认值说明
tacz-compat.enabledBOOLEANtrue是否启用 TaCZ(永恒枪械工坊)兼容性修复
tacz-compat.debugBOOLEANfalseTaCZ 兼容调试日志

keybinds — 全局按键绑定

由宿主统一注册到 ArcartX 客户端,各模块共享。

字段类型默认值说明
keybinds.interact.nameSTRINGAXS_INTERACT交互按键注册名
keybinds.interact.default-keySTRINGF默认键位(GLFW 键名)
keybinds.interact.categorySTRINGArcartXSuite按键设置界面分类名
keybinds.navigate-prev.nameSTRINGAXS_NAVIGATE_PREV导航上一项按键注册名
keybinds.navigate-prev.default-keySTRINGNUMPAD_8默认键位
keybinds.navigate-next.nameSTRINGAXS_NAVIGATE_NEXT导航下一项按键注册名
keybinds.navigate-next.default-keySTRINGNUMPAD_2默认键位

模块通过 context.registerKeybindHandler("AXS_INTERACT", ...) 订阅按键回调。详见 ModuleContext 全局按键订阅

cross-server — 全模块共用跨服传输

各模块在 ArcartX*.yml 中只需 cross-server.enabled;连接与签名在宿主配置。

字段类型默认值说明
cross-server.node-idSTRINGBukkit 服务器名当前子服节点 ID,多服必须唯一
cross-server.dedupe-ttl-msLONG60000入站 message-id 去重 TTL(毫秒)
cross-server.max-payload-charsINT524288单条 payload 最大字符数
cross-server.redis.enabledBOOLEANfalse是否启用 Redis Pub/Sub
cross-server.redis.hostSTRING127.0.0.1Redis 地址
cross-server.redis.portINT6379Redis 端口
cross-server.redis.channelSTRINGAXS:CROSS共用频道名
cross-server.proxy.enabledBOOLEANfalse是否启用 BungeeCord Forward
cross-server.proxy.messenger-channelSTRINGAXS_CROSSForward 子频道
cross-server.signature.enabledBOOLEANfalse是否 HMAC 签名
cross-server.signature.secretSTRING""签名密钥(多服一致)

完整说明见 跨服功能配置指南跨服通信架构

client-packet-guard — 客户端包频率限制

防止伪造/高频回包 DoS,按模块和动作粒度独立配置。

字段类型默认值说明
client-packet-guard.enabledBOOLEANtrue总开关
client-packet-guard.cleanup-interval-ticksINT200过期窗口清理间隔(tick)
client-packet-guard.defaults.window-msINT1000默认时间窗口(毫秒)
client-packet-guard.defaults.max-hitsINT20默认窗口内最大命中数
client-packet-guard.defaults.modeSTRINGsilent默认超限处理模式:silent(静默丢弃)/ notify(通知玩家)/ kick(踢出)
client-packet-guard.defaults.notify-messageSTRING&c操作过快,请稍后再试。通知模式下的提示消息
client-packet-guard.defaults.notify-cooldown-msINT3000通知冷却(毫秒,防止刷屏)
client-packet-guard.defaults.punish-commandSTRING(空)超限后执行的惩罚命令(留空则不执行)

各模块可独立覆写 window-msmax-hitsmode,并为每个动作(action)设置更严格的限制:

yaml
client-packet-guard:
  modules:
    title:
      window-ms: 1000
      max-hits: 4
      actions:
        equip:
          window-ms: 1500
          max-hits: 1
          mode: "notify"

当前已细分的模块:titlemailquestgpsmapannouncereventpacketloginviewtabessentialsregionsmarket

命令使用

/arcartxsuite config 子命令

子命令权限说明
diagnose [owner]arcartxsuite.admin重新运行诊断(owner 可以是 core、模块ID或留空查全部)
preview <owner>arcartxsuite.admin查看某模块的诊断报告 Markdown
apply <owner>arcartxsuite.admin应用自动修复提案(会备份原文件)
rollback <owner>arcartxsuite.admin回滚到最近一次 apply 之前的备份
status [owner]arcartxsuite.admin查看诊断状态统计

典型工作流

场景 1:首次升级后检查

升级 ArcartXSuite 或模块 jar 后,控制台会显示:

[AXS] 配置诊断: 21 个目标, 0 ERROR / 0 WARN / 21 INFO
[AXS] 报告: plugins/ArcartXSuite/diagnosis/2026-05-18_15-30-22

若看到 ERRORWARN,执行:

/arcartxsuite config preview core          # 查看宿主配置问题
/arcartxsuite config preview warehouse     # 查看仓库模块问题

场景 2:安全应用修复

/arcartxsuite config apply warehouse       # 应用仓库模块修复(会自动备份)
/arcartxsuite config status warehouse      # 确认修复成功

如需回滚:

/arcartxsuite config rollback warehouse     # 恢复到修复前状态

场景 3:配置文件刚从旧位置迁移

当模块检测到配置文件从 plugins/ArcartXSuite/xxx.yml 迁移到 plugins/ArcartXSuite/data/<module>/config.yml 时,控制台会提示:

[模块名] 配置文件已迁移至新位置,建议运行 '/arcartxsuite config preview <module>' 检查配置兼容性

此时建议执行 preview 检查是否有结构差异。

诊断报告解读

诊断报告存储在 plugins/ArcartXSuite/diagnosis/YYYY-MM-DD_HH-mm-ss/summary.md,包含:

问题分级

级别图标含义
ERROR🔴必须修复,可能导致功能异常
WARN🟡建议修复,可能影响性能或体验
INFO🟢信息提示,无实质影响

常见问题类型

markdown
## 结构差异 (Sync)
- `storage.pool-size` — INFO: 值类型不匹配 (预期: int, 实际: string)
- `settings.new-feature` — INFO: 缺失键,将从默认值合并

## 版本迁移 (Migration)
- `v1→v2`: 执行 Rename `old-key``new-key`
- `v1→v2`: 执行 Remove `deprecated-section`

## 值验证 (Validation)
- `storage.mode` — ERROR: 值 "sql" 不在允许集合 {sqlite, mysql} 中
- `pool-size` — WARN: 值 500 超出范围 [1, 100]

配置版本管理

每个配置文件独立维护版本号:

yaml
# data/warehouse/config.yml
config-version: 1

当模块需要破坏性变更时:

  1. 新版本 jar 包含 migrations/1-2.yml
  2. 诊断引擎检测到 config-version: 1 低于当前版本 2
  3. 自动应用迁移规则(重命名、删除、设置默认值)

与物理文件迁移的整合

智能配置体检与物理文件迁移协同工作:

启动流程:
1. 旧配置文件检测 → 从 plugins/ArcartXSuite/xxx.yml 迁移到 data/<module>/config.yml
2. 触发智能诊断 → 对比 jar 内默认配置,检测结构差异
3. 提示管理员 → 建议运行 config preview 检查兼容性
4. 服务正常启动 → 即使存在配置问题也不中断

配置目录拆分

自 Build 2026-05-19 起,以下模块的大型数据段从主配置文件拆分到独立目录:

模块原内联段新配置键目录内容
announcerentries:entries-directory: "entries"公告条目
combateffectpackets:packets-directory: "packets"战斗特效包定义
titletitles:titles-directory: "titles"称号定义(按组分文件)
rgbentries:entries-directory: "entries"渐变色条目
mapanchors:anchors-directory: "anchors"锚点定义
questgpsquests:quests-directory: "quests"任务定义(按分类分文件)
onlinerewardssign-in: / rewards:sign-in-file / rewards-file签到与奖励
tabtabs:tabs-directory: "tabs"Tab 面板定义
entitytrackerbosses (旧根级)bosses-directory: "bosses"Boss 追踪定义
eventpacketrules:rules-directory: "rules"事件包规则

目录文件规范

  • 目录下每个 *.yml 文件可包含多个定义,根键即为该定义的 ID。
  • 不需要每条定义独立一个文件,可按业务逻辑分组管理。
  • 文件按文件名字母序加载,同名 ID 后加载的覆盖先加载的。
  • 首次启动时模块会自动导出默认示例文件(如 default.yml)。

示例

yaml
# data/rgb/entries/my-custom.yml
# 同一文件中放多个 RGB 定义
welcome:
  enabled: true
  text: "欢迎来到服务器"
  gradient-colors: ["#FF7A18", "#FFD64D"]
  shine: true

server_name:
  enabled: true
  text: "我的服务器"
  gradient-colors: ["#6A5CFF", "#FF6B9D"]
  shine: false

破坏性变更

主配置中的旧内联段(如 entries:tabs: 等)不再被读取。升级前请将旧数据手动迁移到对应目录文件中。

最佳实践

  1. 定期检查:每周执行一次 /arcartxsuite config diagnose 检查累积问题
  2. 先 preview 后 apply:重要生产环境务必先查看报告再应用修复
  3. 利用备份:apply 会自动创建 .bak 备份,rollback 可快速恢复
  4. 关注日志:启动时若看到 configFileJustMigrated 提示,及时检查兼容性

故障排除

诊断报告路径找不到

检查目录权限:

bash
ls -la plugins/ArcartXSuite/diagnosis/

apply 后配置未生效

某些字段需要重启才能生效,apply 后观察控制台是否提示:

[AXS] 配置已修复,部分变更需重启后生效

迁移文件加载失败

确认 migrations/<from>-<to>.yml 格式正确:

yaml
from-version: 1
to-version: 2
operations:
  - type: rename
    from: "old-key"
    to: "new-key"

何时需要更新诊断声明

智能诊断引擎对大多数 yml 改动可自动识别,但部分情况必须显式更新声明,否则会丢值或漏告警。

自动覆盖(无需更新声明)

改动自动行为
新增 jar 默认字段报告 JAR_NEW,用户配置自动合并
删除 jar 默认字段报告 USER_DEPRECATED
修改 jar 默认值标记用户旧值为 USER_MODIFIED
修改注释/排版不影响

必须更新声明

改动必须做的事
重命名字段a.bc.dmigrations/<from>-<to>.yml 添加 rename 操作 + 递增 currentConfigVersion()
移动字段(嵌套层级变化)写 migration + 升版本号
新增字段类型/范围/枚举约束在模块的 mainConfigValidations()additionalConfigSpecs()ValidationRule
新增动态节(用户可自由扩展的子节)defaultSyncPolicy()SyncPolicy.builder().dynamicSection("path").build() 声明

字段约束速查

模块入口(继承 AbstractAXSModule)需要覆写:

java
@Override
protected List<ValidationRule> mainConfigValidations() {
    return List.of(
        ValidationRule.of("storage.mode", ValueType.STRING)
            .withEnum(Set.of("sqlite", "mysql")),
        ValidationRule.of("storage.pool-size", ValueType.INT)
            .withRange(1, 100),
        ValidationRule.required("storage.url", ValueType.STRING)
    );
}

@Override
protected SyncPolicy defaultSyncPolicy() {
    return SyncPolicy.builder()
        .dynamicSection("warehouses")  // 用户自由添加子节
        .build();
}

@Override
protected int currentConfigVersion() {
    return 2; // 字段重命名时递增
}

强制流程

每次改动 yml 默认配置时按此清单执行:

  1. ✅ 修改 jar 默认 yml
  2. ✅ 如重命名/移动字段 → 写 migration + 升版本号
  3. ✅ 如有新增值约束 → 加 ValidationRule
  4. ✅ 如有新增动态节 → 更新 SyncPolicy
  5. ✅ 在 docs/appendix/changelog.md 记录改动
  6. ✅ 跑 .\gradlew.bat build 验证

反模式(禁止)

  • ❌ 重命名字段但不写 migration → 用户值丢失
  • ❌ 修改字段含义但保持名字不变 → 用户值会被错误保留
  • ❌ 删除已发布的 migration 文件 → 老版本升级路径断裂

基于 GPL-3.0 许可发布