diff --git a/astro.config.ts b/astro.config.ts
index 797cdc5..cab0cc0 100644
--- a/astro.config.ts
+++ b/astro.config.ts
@@ -72,15 +72,10 @@ export default defineConfig({
collapsed: true,
items: [
"manual/zh/config/配置列表",
- "manual/zh/config/backend-server",
- "manual/zh/config/database",
- "manual/zh/config/messages",
- "manual/zh/config/modules",
- "manual/zh/config/misc",
- "manual/zh/config/remap",
- "manual/zh/config/offline-auth",
- "manual/zh/config/offlinematch",
+ "manual/zh/config/start",
+ "manual/zh/config/core",
"manual/zh/config/yggd-entry",
+ "manual/zh/config/auth-offline",
"manual/zh/config/profile-skin",
"manual/zh/config/safe",
"manual/zh/config/merge-am",
diff --git a/src/content/docs/manual/zh/config/auth-offline.md b/src/content/docs/manual/zh/config/auth-offline.md
new file mode 100644
index 0000000..81d8c36
--- /dev/null
+++ b/src/content/docs/manual/zh/config/auth-offline.md
@@ -0,0 +1,134 @@
+---
+title: auth-offline.conf
+---
+
+离线登陆验证模块配置文件。在模块`auth-offline`激活时有效。
+
+```hocon
+# 离线认证主要设置
+main {
+ # 密码规则
+ password {
+ # 最短密码长度
+ min-length=6
+ # 最长密码长度
+ max-length=64
+ # 禁止密码含用户名
+ deny-name-in-password=true
+ }
+ # 登录保护
+ login {
+ # 输错多少次锁定登录
+ max-attempts=5
+ # 锁定冷却时间(秒)
+ block-seconds=300
+ }
+ # 邮箱与找回
+ email {
+ # 启用邮箱命令
+ enabled=true
+ # 恢复码投递模式:LOG 或 SMTP
+ delivery-mode=LOG
+ # 恢复码长度
+ recovery-code-length=6
+ # 恢复码有效期(分钟)
+ recovery-code-expire-minutes=15
+ # 请求恢复邮件冷却(秒)
+ recovery-cooldown-seconds=120
+ # 单个恢复码允许输错次数
+ max-code-verify-attempts=3
+ # 恢复码校验成功后,允许修改密码的时间窗口(分钟)
+ reset-password-window-minutes=10
+ # 恢复邮件模板与 SMTP 配置
+ smtp {
+ # 邮件显示的服务器名称
+ server-name=HyperZoneLogin
+ # ❇️SMTP 服务器地址
+ host="smtp.example.com"
+ # ❇️SMTP 端口
+ port=587
+ # 是否启用 SMTP 认证
+ auth=true
+ # ❇️SMTP 用户名
+ username="noreply@example.com"
+ # ❇️SMTP 密码或应用专用密码
+ password=change-me
+ # 是否启用 STARTTLS
+ start-tls=true
+ # ❇️是否直接使用 SSL
+ ssl=false
+ # 连接超时(毫秒)
+ connection-timeout-millis=10000
+ # 读取超时(毫秒)
+ read-timeout-millis=10000
+ # 写入超时(毫秒)
+ write-timeout-millis=10000
+ # ❇️发件人邮箱
+ from-address="noreply@example.com"
+ # ❇️发件人名称
+ from-name=HyperZoneLogin
+ # ❇️恢复邮件主题,支持占位符:%server%、%player%
+ recovery-subject="[%server%] 账号密码找回验证码"
+ # ❇️恢复邮件正文,支持占位符:%server%、%player%、%email%、%code%、%minutes%。使用 \n 表示换行
+ recovery-body="你好,%player%。\\n\\n你在 %server% 请求了离线账号密码找回。\\n验证码:%code%\\n有效期:%minutes% 分钟\\n\\n如果不是你本人操作,请忽略这封邮件。"
+ }
+ }
+ # 提示
+ prompt {
+ # 首次进入邮箱找回提示
+ show-recovery-hint=true
+ }
+ # 会话自动登录
+ session {
+ # 短期会话自动登录
+ enabled=false
+ # 会话有效期(分钟)
+ expire-minutes=30
+ # 会话与玩家 IP 绑定
+ bind-ip=true
+ # 注册成功后立刻签发会话
+ issue-on-register=true
+ }
+ # ⚠️透传离线 UUID
+ pass-offline-uuid-to-profile-resolve=true
+ # TOTP 二步验证
+ totp {
+ # 启用 TOTP(二步验证功能)
+ enabled=true
+ # 在验证器 App 中显示的名称
+ issuer=HyperZoneLogin
+ # 待确认 TOTP 密钥的有效期(分钟)
+ pending-expire-minutes=10
+ # 允许 短期会话 跳过二次验证
+ allow-session-bypass=false
+ }
+}
+# ⚠️玩家正离线形态匹配设置
+match {
+ # 是否允许进行匹配
+ enable=true
+ # UUID匹配设定
+ uuid-match {
+ # 是否允许全0的UUID(Zalith) 匹配为离线
+ zero=true
+ # 是否允许默认uuid生成方法 匹配为离线
+ offline=true
+ # 关于PCL2启动器匹配的细节设定
+ pcl2 {
+ # PCL2的UUID匹配
+ enable=true
+ # PCL2的UUID进行哈希计算匹配
+ hash=true
+ # PCL2的苗条模型UUID匹配
+ slim=true
+ }
+ }
+ # Host匹配设定
+ host-match {
+ start=[
+ offline,
+ o-
+ ]
+ }
+}
+```
diff --git a/src/content/docs/manual/zh/config/core.md b/src/content/docs/manual/zh/config/core.md
new file mode 100644
index 0000000..241dc63
--- /dev/null
+++ b/src/content/docs/manual/zh/config/core.md
@@ -0,0 +1,161 @@
+---
+title: core.conf
+---
+
+插件核心配置文件,包括数据库、模块、等待区设置、调试输出等配置。
+
+```hocon
+# 数据库
+database {
+ # ❇️数据库类型
+ # 支持的值: SQLITE, MYSQL, MARIADB
+ type=SQLITE
+ # SQLite 数据库配置
+ sqlite {
+ # 数据库文件路径(相对于插件数据目录)
+ path="data/hyperzone_login.db"
+ }
+ # MySQL 数据库配置
+ mysql {
+ # ❇️地址
+ host=localhost
+ # ❇️端口
+ port=3306
+ # 库名
+ database="hyperzone_login"
+ # ❇️用户名
+ username=root
+ # ❇️密码
+ password=password
+ # ⚠️额外的连接参数
+ parameters="useSSL=false&serverTimezone=UTC&characterEncoding=utf8"
+ # ⚠️JDBC 驱动类(通常不需要修改)
+ driver-class-name="com.mysql.cj.jdbc.Driver"
+ }
+ # MariaDB 数据库配置
+ mariadb {
+ # ❇️地址
+ host=localhost
+ # ❇️端口
+ port=3306
+ # 库名
+ database="hyperzone_login"
+ # ❇️用户名
+ username=root
+ # ❇️密码
+ password=password
+ # ⚠️额外的连接参数
+ parameters="useSSL=false&characterEncoding=utf8"
+ # ⚠️JDBC 驱动类(通常不需要修改)
+ driver-class-name="org.mariadb.jdbc.Driver"
+ }
+ # ⚠️数据库表前缀(随意修改可能导致无法读取数据)
+ table-prefix="hz_"
+ # ⚠️连接池配置(影响数据库连接性能)
+ pool {
+ # ⚠️最大连接数
+ maximum-pool-size=10
+ # ⚠️最小空闲连接数
+ minimum-idle=2
+ # ⚠️连接超时时间(毫秒)
+ connection-timeout=30000
+ # ⚠️空闲连接超时时间(毫秒)
+ idle-timeout=600000
+ # ⚠️连接最大生命周期(毫秒)
+ max-lifetime=1800000
+ }
+}
+# UUID映射
+remap {
+ # ⚠️未开启对应渠道UUID透传时的生成前缀,如果填OfflinePlayer则为行业标准离线生成法
+ prefix=HyperZone
+}
+# 杂项
+misc {
+ # ⚠️不给服务器发送 CHAT_SESSION_UPDATE包
+ kill-chat-session=true
+}
+# Debug
+debug {
+ # 日志调试开关;建议统一放在此分支下配置
+ log {
+ # 通用 debug 日志
+ general=false
+ # Floodgate / OutPre 预登录链路追踪日志
+ out-pre-trace=false
+ # ProfileSkin 相关调试日志
+ profile-skin=false
+ # 后端等待区兼容链路调试日志
+ backend-compat=false
+ # Netty / GameProfile 重写链路调试日志
+ network-rewrite=false
+ # Yggdrasil 认证链路调试日志
+ yggdrasil-auth=false
+ }
+ # 慢测试模式相关配置
+ slow-test {
+ # 开启后,外部模块直接调用 overVerify 将被忽略,只有等待区 /over 才会真正完成 overVerify
+ enabled=false
+ }
+}
+# ❇️模块开关
+modules {
+ # Floodgate 认证;仅在已安装 floodgate 时生效
+ auth-floodgate=true
+ # 离线认证
+ auth-offline=true
+ # Yggdrasil 认证
+ auth-yggd=true
+ # 安全防护
+ safe=true
+ # 皮肤缓存
+ profile-skin=true
+ # 数据迁移
+ data-merge=false
+}
+# 等待区服务器
+v-server {
+ # 登录服实现模式:backend 或 outpre。推荐 outpre 模式,若有问题请使用backend模式。
+ mode=outpre
+ # ❇️认证完成后默认进入的服务器
+ post-auth-default-server=play
+ # 记住认证时收到的服务器跳转请求
+ remember-requested-server-during-auth=true
+ backend {
+ # 使用的真实认证等待服 Velocity 服务器名
+ fallback-auth-server=lobby
+ # 等待区 UpsertPlayerInfo/TabList 兼容过滤补偿
+ enable-player-info-compensation=true
+ # 档案补偿同步
+ enable-profile-compensation=true
+ # 在线热改 name(风险较低,默认开启)
+ enable-name-hot-change=true
+ # 在线热改 UUID(高风险,默认关闭)
+ enable-uuid-hot-change=false
+ }
+ outpre {
+ # 认证服的逻辑名,仅用于日志/状态标识;不需要在 Velocity 的 servers 中注册。
+ # 如果使用 ViaVersion,你需要在 Velocity 的 servers 中添加注册条目,如 outpre-auth = "127.0.0.1:30066",但不需要将其配置到 try 队列。
+ auth-label=outpre-auth
+ # 认证服的直连 Host
+ auth-host="127.0.0.1"
+ # 认证服的直连 Port
+ auth-port=30066
+ # 转接给认证服时,在连接握手中对后端暴露的 Host;留空时使用 authHost
+ presented-host=""
+ # 转接给认证服时,在连接握手中对后端暴露的 Port;<=0 时使用 authPort
+ presented-port=-1
+ # 转接给认证服时,在连接握手中对后端暴露的玩家源 IP;留空时使用玩家真实 IP
+ presented-player-ip=""
+ }
+}
+# 消息
+messages {
+ # 默认语言;当未启用客户端语言检测,或客户端语言没有对应语言文件时使用
+ default-locale="zh_cn"
+ # 消息缺失时的回退语言;建议始终保留 en_us 或 zh_cn 之一
+ fallback-locale="en_us"
+ # 优先尝试读取客户端语言
+ use-client-locale=true
+}
+```
diff --git a/src/content/docs/manual/zh/config/backend-server.mdx b/src/content/docs/manual/zh/config/legacy/backend-server.mdx
similarity index 100%
rename from src/content/docs/manual/zh/config/backend-server.mdx
rename to src/content/docs/manual/zh/config/legacy/backend-server.mdx
diff --git a/src/content/docs/manual/zh/config/database.mdx b/src/content/docs/manual/zh/config/legacy/database.mdx
similarity index 100%
rename from src/content/docs/manual/zh/config/database.mdx
rename to src/content/docs/manual/zh/config/legacy/database.mdx
diff --git a/src/content/docs/manual/zh/config/merge-am.mdx b/src/content/docs/manual/zh/config/legacy/merge-am.mdx
similarity index 100%
rename from src/content/docs/manual/zh/config/merge-am.mdx
rename to src/content/docs/manual/zh/config/legacy/merge-am.mdx
diff --git a/src/content/docs/manual/zh/config/merge-ml.mdx b/src/content/docs/manual/zh/config/legacy/merge-ml.mdx
similarity index 100%
rename from src/content/docs/manual/zh/config/merge-ml.mdx
rename to src/content/docs/manual/zh/config/legacy/merge-ml.mdx
diff --git a/src/content/docs/manual/zh/config/messages.mdx b/src/content/docs/manual/zh/config/legacy/messages.mdx
similarity index 100%
rename from src/content/docs/manual/zh/config/messages.mdx
rename to src/content/docs/manual/zh/config/legacy/messages.mdx
diff --git a/src/content/docs/manual/zh/config/misc.mdx b/src/content/docs/manual/zh/config/legacy/misc.mdx
similarity index 100%
rename from src/content/docs/manual/zh/config/misc.mdx
rename to src/content/docs/manual/zh/config/legacy/misc.mdx
diff --git a/src/content/docs/manual/zh/config/modules.mdx b/src/content/docs/manual/zh/config/legacy/modules.mdx
similarity index 100%
rename from src/content/docs/manual/zh/config/modules.mdx
rename to src/content/docs/manual/zh/config/legacy/modules.mdx
diff --git a/src/content/docs/manual/zh/config/offline-auth.mdx b/src/content/docs/manual/zh/config/legacy/offline-auth.mdx
similarity index 100%
rename from src/content/docs/manual/zh/config/offline-auth.mdx
rename to src/content/docs/manual/zh/config/legacy/offline-auth.mdx
diff --git a/src/content/docs/manual/zh/config/offlinematch.mdx b/src/content/docs/manual/zh/config/legacy/offlinematch.mdx
similarity index 100%
rename from src/content/docs/manual/zh/config/offlinematch.mdx
rename to src/content/docs/manual/zh/config/legacy/offlinematch.mdx
diff --git a/src/content/docs/manual/zh/config/profile-skin.mdx b/src/content/docs/manual/zh/config/legacy/profile-skin.mdx
similarity index 100%
rename from src/content/docs/manual/zh/config/profile-skin.mdx
rename to src/content/docs/manual/zh/config/legacy/profile-skin.mdx
diff --git a/src/content/docs/manual/zh/config/remap.mdx b/src/content/docs/manual/zh/config/legacy/remap.mdx
similarity index 100%
rename from src/content/docs/manual/zh/config/remap.mdx
rename to src/content/docs/manual/zh/config/legacy/remap.mdx
diff --git a/src/content/docs/manual/zh/config/safe.mdx b/src/content/docs/manual/zh/config/legacy/safe.mdx
similarity index 100%
rename from src/content/docs/manual/zh/config/safe.mdx
rename to src/content/docs/manual/zh/config/legacy/safe.mdx
diff --git a/src/content/docs/manual/zh/config/yggd-entry.mdx b/src/content/docs/manual/zh/config/legacy/yggd-entry.mdx
similarity index 100%
rename from src/content/docs/manual/zh/config/yggd-entry.mdx
rename to src/content/docs/manual/zh/config/legacy/yggd-entry.mdx
diff --git "a/src/content/docs/manual/zh/config/legacy/\351\205\215\347\275\256\345\210\227\350\241\250.mdx" "b/src/content/docs/manual/zh/config/legacy/\351\205\215\347\275\256\345\210\227\350\241\250.mdx"
new file mode 100644
index 0000000..c785097
--- /dev/null
+++ "b/src/content/docs/manual/zh/config/legacy/\351\205\215\347\275\256\345\210\227\350\241\250.mdx"
@@ -0,0 +1,43 @@
+---
+title: "配置列表(旧)"
+---
+
+import { FileTree } from "@astrojs/starlight/components";
+
+本页面介绍插件所涉及的各种配置文件。
+
+:::caution[配置格式已过时!]
+此页面所载的配置格式已经过时,仅适用于26.4.5-SNAPSHOT-8fcde1ec及以前版本。
+关于目前正在使用的配置格式,请前往[新版配置列表](/manual/zh/config/配置列表/)页面。
+:::
+
+:::danger[危险]
+**部分配置项会直接影响本插件的关键行为,配置不得当的情况下很可能导致插件无法正常工作乃至崩溃。**
+此类配置项已在对应的描述中添加了“⚠️”作为标识。除非你真的知道你在做什么,否则不要改动这些配置项目。
+:::
+
+
+ - plugins/hyperzonelogin/ HyperZoneLogin 插件数据目录
+ - data/ 数据库目录
+ - entry/ Yggdrasil 验证条目目录
+ - example/ 示例配置文件目录,不会被插件加载
+ - example.conf 示例配置文件
+ - elyby.conf Ely.by外置登录支持
+ - littleskin.conf Littleskin外置登录支持
+ - mojang.conf ⚠️正版登录支持
+ - [验证条目配置格式](/manual/zh/config/legacy/yggd-entry)
+ - libs/ 代码库目录
+ - merge/ 数据迁移目录
+ - [merge-am.conf](/manual/zh/config/legacy/merge-am) Authme 数据迁移配置
+ - [merge-ml.conf](/manual/zh/config/legacy/merge-ml) Multilogin 数据迁移配置
+ - [backend-server.conf](/manual/zh/config/legacy/backend-server) 后端服务器配置
+ - [database.conf](/manual/zh/config/legacy/database) 数据库配置
+ - [messages.conf](/manual/zh/config/legacy/messages) 语言选择配置
+ - [misc.conf](/manual/zh/config/legacy/misc) 杂项配置
+ - [modules.conf](/manual/zh/config/legacy/modules) 模块配置
+ - [offline-auth.conf](/manual/zh/config/legacy/offline-auth) 离线验证模块配置
+ - [offlinematch.conf](/manual/zh/config/legacy/oflinematch) 离线玩家匹配配置
+ - [profile-skin.conf](/manual/zh/config/legacy/profile-skin) 皮肤缓存与恢复模块配置
+ - [remap.conf](/manual/zh/config/legacy/remap) ⚠️UUID重映射配置
+ - [safe.conf](/manual/zh/config/legacy/safe) 安全防护模块配置
+
diff --git a/src/content/docs/manual/zh/config/merge-am.md b/src/content/docs/manual/zh/config/merge-am.md
new file mode 100644
index 0000000..ca75985
--- /dev/null
+++ b/src/content/docs/manual/zh/config/merge-am.md
@@ -0,0 +1,42 @@
+---
+title: "data-merge/authme.conf"
+---
+
+Authme 插件数据迁移配置文件。在`data-merge`模块激活时有效。
+
+```hocon
+# 源数据库配置
+source {
+ # ❇️源库类型,支持 SQLITE 或 MYSQL
+ type=SQLITE
+ # SQLite 配置
+ sqlite {
+ # ⚠️可选:直接指定 JDBC URL。留空时按 path + parameters 生成
+ jdbc-url=""
+ # ❇️SQLite 文件路径(相对于插件数据目录)
+ path="merge/authme.db"
+ # ⚠️SQLite JDBC 附加参数
+ parameters=""
+ }
+ # MySQL 配置
+ mysql {
+ # ❇️MySQL 地址
+ host="127.0.0.1"
+ # ❇️MySQL 端口
+ port=3306
+ # 数据库名
+ database=authme
+ # ❇️用户名
+ username=root
+ # ❇️密码
+ password=password
+ # ⚠️JDBC 参数
+ parameters="useSSL=false&serverTimezone=UTC&characterEncoding=utf8"
+ }
+}
+# 源表配置
+tables {
+ # ⚠️AuthMe 数据表名
+ auth-me-table=authme
+}
+```
diff --git a/src/content/docs/manual/zh/config/merge-ml.md b/src/content/docs/manual/zh/config/merge-ml.md
new file mode 100644
index 0000000..9e8fbfd
--- /dev/null
+++ b/src/content/docs/manual/zh/config/merge-ml.md
@@ -0,0 +1,95 @@
+---
+title: "data-merge/multilogin.conf"
+---
+
+Multilogin 插件数据迁移配置文件。在`data-merge`模块激活时有效。
+
+```hocon
+# 源数据库配置
+source {
+ # ❇️源库类型,支持 H2DB 或 MYSQL
+ type=H2DB
+ # H2 配置
+ h2 {
+ # ⚠️可选:直接指定 JDBC URL。留空时按 path + parameters 生成
+ jdbc-url=""
+ # ❇️H2 文件路径(相对于插件数据目录)
+ path="data-merge/multilogin"
+ # ⚠️H2 JDBC 附加参数
+ parameters="MODE=MySQL"
+ # H2 用户名
+ username=root
+ # H2 密码
+ password=root
+ }
+ # MySQL 配置
+ mysql {
+ # ❇️MySQL 地址
+ host="127.0.0.1"
+ # ❇️MySQL 端口
+ port=3306
+ # 数据库名
+ database="mixed_login"
+ # ❇️用户名
+ username=root
+ # ❇️密码
+ password=password
+ # ⚠️JDBC 参数
+ parameters="useSSL=false&serverTimezone=UTC&characterEncoding=utf8"
+ }
+}
+# 源表名配置
+tables {
+ # ⚠️旧库 UserDataTableV3 的表名
+ user-data-table="multilogin_user_data_v3"
+ # ⚠️旧库 InGameProfileTableV3 的表名
+ in-game-profile-table="multilogin_in_game_profile_v3"
+}
+# ❇️service_id 到 entryId 的映射,键为旧库的服务 ID,值为新库的服务 ID;未配置时默认使用 ml_{serviceId}
+service-id-mapping {
+ "1"=mojang
+}
+
+```
+
+## 服务ID映射配置
+
+`service-id-mapping`配置部分将决定 Multilogin 中的旧用户数据与 HyperZoneLogin 中的 Yggdrasil 服务的对应关系。
+
+此部分需要按照两个插件的具体配置手动填写键值对,其中键名为 Multilogin 中 Yggdrasil 服务的数字ID,而键值为 HyperZoneLogin 中 Yggdrasil 服务的入口ID。
+
+例如,Multilogin 和 HyperzoneLogin 中关于 Littleskin 的条目配置文件分别如下:
+
+```yaml title=multilogin/services/littleskin.yml
+id: 2 # Multilogin 的服务数字ID
+
+name: 'LittleSkin'
+serviceType: BLESSING_SKIN
+yggdrasilAuth:
+ blessingSkin:
+ apiRoot: 'https://littleskin.cn/api/yggdrasil'
+```
+
+```hocon title=hyperzonelogin/auth-yggd/littleskin.conf
+id=littleskin # Hyperzonelogin 的服务入口ID
+name="Little Skin"
+yggdrasil {
+ url="https://littleskin.cn/api/yggdrasil/sessionserver/session/minecraft/hasJoined?username={username}&serverId={serverId}{ip}"
+ pass-yggdrasil-uuid-to-profile-resolve=true
+ timeout=10000
+ retry=0
+ retry-delay=0
+ proxy {
+ ...
+ }
+}
+```
+
+那么你应当在`service-id-mapping`中添加这样一个键值对:
+
+```hocon title=hyperzonelogin/data-merge/multilogin.conf
+...
+service-id-mapping {
+ "2"=littleskin
+}
+```
diff --git a/src/content/docs/manual/zh/config/profile-skin.md b/src/content/docs/manual/zh/config/profile-skin.md
new file mode 100644
index 0000000..596b5a4
--- /dev/null
+++ b/src/content/docs/manual/zh/config/profile-skin.md
@@ -0,0 +1,33 @@
+---
+title: "profile-skin.conf"
+---
+
+玩家皮肤缓存模块配置。在模块`profile-skin`激活时有效。
+
+```hocon
+# 启用本模块
+enabled=true
+# 优先缓存并已携带签名的材质
+prefer-upstream-signed-textures=true
+# 不修复的入口ID
+trusted-signed-texture-entries=[
+ mojang
+]
+# 修复非官方签名
+restore-unsigned-textures=true
+# MineSkin 修复配置
+mine-skin {
+ # 生成方式:URL 或 UPLOAD
+ method=URL
+ # 出错时改模式重试
+ retry-upload-on-url-read-failure=true
+ # ⚠️URL 模式接口地址
+ url-endpoint="https://api.mineskin.org/generate/url"
+ # ⚠️上传模式接口地址
+ upload-endpoint="https://api.mineskin.org/generate/upload"
+ # 请求超时时间(毫秒)
+ timeout-millis=15000
+ # HTTP User-Agent
+ user-agent="HyperZoneLogin/1.0"
+}
+```
diff --git a/src/content/docs/manual/zh/config/safe.md b/src/content/docs/manual/zh/config/safe.md
new file mode 100644
index 0000000..ea9331e
--- /dev/null
+++ b/src/content/docs/manual/zh/config/safe.md
@@ -0,0 +1,77 @@
+---
+title: "safe.conf"
+slug: "manual/zh/config/safe"
+---
+
+基础安全模块(`safe`)的配置。
+
+```hocon
+# 启用防护
+enable=true
+# 全局连接频率限制
+global-rate-limit {
+ max-attempts=80
+ window-seconds=10
+}
+# 同 IP 连接频率限制
+ip-rate-limit {
+ max-attempts=8
+ window-seconds=10
+}
+# 同 IP 超阈值后的临时冷却
+ip-cooldown {
+ # 同 IP 临时冷却
+ enabled=true
+ # 在统计窗口内触发多少次限流后,开始临时封禁
+ trigger-attempts=3
+ # 统计窗口长度(秒)
+ window-seconds=60
+ # 触发后的冷却时长(秒)
+ cooldown-seconds=300
+}
+# 自动高峰防护模式
+strict-mode {
+ # 自动高峰防护模式
+ enabled=true
+ # 全局连接请求在窗口内达到多少次后进入 严格模式
+ trigger-attempts=120
+ # 统计窗口(秒)
+ window-seconds=15
+ # 保持时长(秒)
+ recover-after-seconds=90
+ # 全局限流
+ global-rate-limit {
+ max-attempts=30
+ window-seconds=10
+ }
+ # 同 IP 限流
+ ip-rate-limit {
+ max-attempts=4
+ window-seconds=10
+ }
+}
+# 认证失败联动防护
+auth-failure {
+ # 统一认证失败联动
+ enabled=true
+ # 同一 IP 在统计窗口内累计多少次认证失败后开始冷却
+ trigger-attempts=4
+ # 认证失败统计窗口(秒)
+ window-seconds=300
+ # 触发后的冷却时长(秒)
+ cooldown-seconds=600
+}
+# 用户名基础校验
+username {
+ # 用户名基础校验
+ enable=true
+ # 最短长度
+ min-length=3
+ # 最长长度
+ max-length=16
+ # 用户名不包含首尾空白
+ deny-leading-or-trailing-whitespace=true
+ # 允许的用户名正则,默认与 Minecraft 传统用户名规则一致
+ pattern="^[A-Za-z0-9_]+$"
+}
+```
diff --git a/src/content/docs/manual/zh/config/start.md b/src/content/docs/manual/zh/config/start.md
new file mode 100644
index 0000000..b440507
--- /dev/null
+++ b/src/content/docs/manual/zh/config/start.md
@@ -0,0 +1,20 @@
+---
+title: start.conf
+---
+
+插件首次启动时生成的预备配置文件。
+
+:::caution[必须正确配置此文件才能生成后续配置文件。]
+HyperzoneLogin 需要根据此配置文件中的语言选项生成后续的配置文件。
+如果不正确设置语言并设置`ready=true`,插件将不会工作。
+:::
+
+```hocon
+# ❇️配置注释语言,影响其他配置文件首次生成时的注释语言。
+language="zh_cn"
+# ⚠️配置文件格式,影响其他配置文件的序列化方式。
+# 当前版本仅完整支持 hocon,gson/yaml 为预留选项。
+format=hocon
+# ❇️就绪标志,必须为 true 插件才会正常启动。
+ready=false
+```
diff --git a/src/content/docs/manual/zh/config/yggd-entry.md b/src/content/docs/manual/zh/config/yggd-entry.md
new file mode 100644
index 0000000..fab7dca
--- /dev/null
+++ b/src/content/docs/manual/zh/config/yggd-entry.md
@@ -0,0 +1,43 @@
+---
+title: Yggdrasil 条目配置文件
+---
+
+每个 Yggdrasil 服务都需要一个对应的条目配置文件,你需要将它们统一放到插件数据目录的`entry`目录下。注意`example`目录中的配置文件不会被读取。配置文件结构见下。配置在激活`auth-yggd`模块时有效。
+
+```hocon
+# 入口ID(不区分大小写),用于内部识别
+id=Example
+# 别称,用于内容显示
+name=Unnamed
+# 验证服务配置
+yggdrasil {
+ # hasJoined 验证 URL
+ # 在hasJoined URL后面还需要添加参数 "?username={username}&serverId={serverId}{ip}" 进行验证请求
+ # 链接样例参见hyperzonelogin/auth-yggd/littleskin.conf文件
+ url=""
+ # UUID透传
+ pass-yggdrasil-uuid-to-profile-resolve=true
+ # 验证请求超时时间(毫秒)
+ timeout=10000
+ # 重试次数
+ retry=0
+ # 重试请求延迟(毫秒)
+ retry-delay=0
+ # ⚠️代理设置
+ proxy {
+ # 设置代理类型
+ # DIRECT - 直接连接、或没有代理
+ # HTTP - 表示高级协议(如HTTP或FTP)的代理
+ # SOCKS - 表示一个SOCKS (V4或V5)代理
+ type=DIRECT
+ # 代理服务器地址
+ hostname="127.0.0.1"
+ # 代理服务器端口
+ port=1080
+ # 代理鉴权用户名,留空则不进行鉴权
+ username=""
+ # 代理鉴权密码
+ password=""
+ }
+}
+```
diff --git "a/src/content/docs/manual/zh/config/\351\205\215\347\275\256\345\210\227\350\241\250.mdx" "b/src/content/docs/manual/zh/config/\351\205\215\347\275\256\345\210\227\350\241\250.mdx"
index fdd9f23..51f2891 100644
--- "a/src/content/docs/manual/zh/config/\351\205\215\347\275\256\345\210\227\350\241\250.mdx"
+++ "b/src/content/docs/manual/zh/config/\351\205\215\347\275\256\345\210\227\350\241\250.mdx"
@@ -6,33 +6,42 @@ import { FileTree } from "@astrojs/starlight/components";
本页面介绍插件所涉及的各种配置文件。
-:::danger[危险]
+:::note[提示]
+**此页面所载的是第2版配置格式,适用于26.4.6-SNAPSHOT-896799ef及以后版本。**
+关于之前版本使用的配置格式,请前往[旧版配置列表](/manual/zh/config/legacy/配置列表/)页面。
+:::
+
+:::tip[图例说明]
**部分配置项会直接影响本插件的关键行为,配置不得当的情况下很可能导致插件无法正常工作乃至崩溃。**
-此类配置项已在对应的描述中添加了“⚠️”作为标识。除非你真的知道你在做什么,否则不要改动这些配置项目。
+关键配置已使用“❇️”标出,请务必仔细阅读配置说明,并在启动服务器前确认这些配置项是否正确。
+同时,请不要随意改动带有“⚠️”标识的配置项,除非你真的知道你在做什么。
:::
- plugins/hyperzonelogin/ HyperZoneLogin 插件数据目录
- - data/ 数据库目录
- - entry/ Yggdrasil 验证条目目录
+ - auth-yggd/ Yggdrasil 验证条目目录
- example/ 示例配置文件目录,不会被插件加载
- example.conf 示例配置文件
- elyby.conf Ely.by外置登录支持
- littleskin.conf Littleskin外置登录支持
- mojang.conf ⚠️正版登录支持
- [验证条目配置格式](/manual/zh/config/yggd-entry)
+ - data/ 数据库目录
- libs/ 代码库目录
- - merge/ 数据迁移目录
- - [merge-am.conf](/manual/zh/config/merge-am) Authme 数据迁移配置
- - [merge-ml.conf](/manual/zh/config/merge-ml) Multilogin 数据迁移配置
- - [backend-server.conf](/manual/zh/config/backend-server) 后端服务器配置
- - [database.conf](/manual/zh/config/database) 数据库配置
- - [messages.conf](/manual/zh/config/messages) 语言选择配置
- - [misc.conf](/manual/zh/config/misc) 杂项配置
- - [modules.conf](/manual/zh/config/modules) 模块配置
- - [offline-auth.conf](/manual/zh/config/offline-auth) 离线验证模块配置
- - [offlinematch.conf](/manual/zh/config/oflinematch) 离线玩家匹配配置
+ - messages/ 语言文件目录。每个目录下都会包含英文(en_us.conf)、俄文(ru_ru.conf)、中文(zh_cn.conf)三个语言的配置文件。根目录下为核心插件的语言文件。
+ - auth-offline/ 离线登录模块语言文件
+ - auth-yggd/ Yggdrasil验证模块语言文件
+ - profile-skin/ 皮肤缓存模块语言文件
+ - safe/ 安全防护模块语言文件
+ - en_us.conf
+ - ru_ru.conf
+ - zh_cn.conf
+ - data-merge/ 数据迁移目录
+ - [authme.conf](/manual/zh/config/merge-am) Authme 数据迁移配置
+ - [multilogin.conf](/manual/zh/config/merge-ml) Multilogin 数据迁移配置
+ - [auth-offline.conf](/manual/zh/config/auth-offline) 离线验证模块配置
+ - [core.conf](/manual/zh/config/core) 插件核心配置
- [profile-skin.conf](/manual/zh/config/profile-skin) 皮肤缓存与恢复模块配置
- - [remap.conf](/manual/zh/config/remap) ⚠️UUID重映射配置
- [safe.conf](/manual/zh/config/safe) 安全防护模块配置
+ - [start.conf](/manual/zh/config/start) 首次启动配置。插件首次安装时只会生成此文件,必须正确配置此文件后才会生成其他配置。
diff --git "a/src/content/docs/manual/zh/\345\237\272\347\241\200\345\256\211\350\243\205.md" "b/src/content/docs/manual/zh/\345\237\272\347\241\200\345\256\211\350\243\205.md"
index 361a3d5..2de0cce 100644
--- "a/src/content/docs/manual/zh/\345\237\272\347\241\200\345\256\211\350\243\205.md"
+++ "b/src/content/docs/manual/zh/\345\237\272\347\241\200\345\256\211\350\243\205.md"
@@ -8,15 +8,14 @@ HyperZoneLogin 目前主要以单文件 JAR 包分发,运作时使用内置的
## 安装前准备
-如[`快速上手`](快速上手.md)中所述,HyperZoneLogin 需要:
+HyperZoneLogin 需要:
-* 一个真实的后端服务器,或者利用 LimboAPI 作为认证等待区;
* 一个游戏后端作为认证成功后跳转的服务器;
* 将整个群组服网络配置为使用`modern`转发模式。
在安装 HyperZoneLogin 之前,请务必按照前述章节的指引完成 Velocity 与后端服的基础配置。
-此外,你还需要阅读[`模块介绍`](模块介绍.md)页面,确认你所需要激活的模块。
+此外,你还需要阅读[`模块介绍`](/manual/zh/模块介绍/)页面,确认你所需要激活的模块。
## 安装步骤
@@ -24,8 +23,10 @@ HyperZoneLogin 目前主要以单文件 JAR 包分发,运作时使用内置的
2. 从 [Github Release](https://github.com/HyperZoneLogin/HyperzoneLogin/releases) 下载所需的插件文件;
3. 将插件放入 Velocity 的 `plugins/` 目录;
4. 重启 Velocity,让插件下载所需的依赖并生成配置文件;
-5. 按照[`配置索引`](/manual/zh/config/配置列表)中的说明正确配置[`backend-server.conf`](/manual/zh/config/backend-server),并在[`modules.conf`](/manual/zh/config/modules)中激活你所需的模块;
-6. 再次重启 Velocity,让插件配置生效。
+5. 在[`start.conf`](/manual/zh/config/start)中设置好语言,并设置`ready=true`;
+6. 重启 Velocity;
+7. 按照[`配置索引`](/manual/zh/config/配置列表)中的说明正确配置[`core.conf`](/manual/zh/config/core)中的`module`、`v-server`、和`database`字段;
+8. 再次重启 Velocity,让插件配置生效。
## 安装后检验
@@ -33,8 +34,8 @@ HyperZoneLogin 目前主要以单文件 JAR 包分发,运作时使用内置的
1. 玩家不能直接连接后端服务器,只能从 Velocity 反代理端连接;
2. 玩家先进入等待区,此时玩家名称为`HZLxxxxxx`(后接随机数字);
-3. 正版玩家或外置登录玩家应自动完成认证过程,离线玩家会被提示需要使用`/register`或`/login`命令进行注册或登录;
+3. 正版玩家、外置登录玩家或基岩版玩家应自动完成认证过程,离线玩家会被提示需要使用`/register`或`/login`命令进行注册或登录;
4. 认证通过后,玩家应当自动跳转到正式游戏服务器,并恢复原有名称;
5. 整个过程中 Velocity 控制台没有输出明显的错误。
-如果出现了异常,请参考[`常见问题`](常见问题.md)排查,或者按照[`问题反馈`](问题反馈.md)中的说明求助。
+如果出现了异常,请参考[`常见问题`](/manual/zh/常见问题/)排查,或者按照[`问题反馈`](/manual/zh/问题反馈/)中的说明求助。
diff --git "a/src/content/docs/manual/zh/\345\270\270\350\247\201\351\227\256\351\242\230.md" "b/src/content/docs/manual/zh/\345\270\270\350\247\201\351\227\256\351\242\230.md"
index 63ea14b..5a9b49d 100644
--- "a/src/content/docs/manual/zh/\345\270\270\350\247\201\351\227\256\351\242\230.md"
+++ "b/src/content/docs/manual/zh/\345\270\270\350\247\201\351\227\256\351\242\230.md"
@@ -2,7 +2,7 @@
title: "常见问题"
---
-本章用于集中整理在部署和使用 HyperZoneLogin 时较常遇到的问题。遇到异常时,建议先对照本章判断问题属于哪一类,再结合 [`配置索引`](/manual/zh/config/配置列表) 和 [`问题反馈`](./问题反馈.md) 继续排查或整理反馈材料。
+本章用于集中整理在部署和使用 HyperZoneLogin 时较常遇到的问题。遇到异常时,建议先对照本章判断问题属于哪一类,再结合 [`配置索引`](/manual/zh/config/配置列表) 和 [`问题反馈`](/manual/zh/问题反馈) 继续排查或整理反馈材料。
## 加入游戏后提示“登录失败:无效会话(请尝试重启游戏及启动器)”
diff --git "a/src/content/docs/manual/zh/\345\277\253\351\200\237\344\270\212\346\211\213.md" "b/src/content/docs/manual/zh/\345\277\253\351\200\237\344\270\212\346\211\213.md"
index d2f4579..dcb3606 100644
--- "a/src/content/docs/manual/zh/\345\277\253\351\200\237\344\270\212\346\211\213.md"
+++ "b/src/content/docs/manual/zh/\345\277\253\351\200\237\344\270\212\346\211\213.md"
@@ -4,36 +4,46 @@ title: "快速上手"
如果你现在的目标是:**先把 HyperZoneLogin 跑起来,再逐步细化配置**,请先按本章完成一套最小可用部署。
-本文档展示了一个完整示例思路:**Velocity 代理 + 真实等待后端 + 真实游戏后端**。这也是当前更稳妥、排障成本更低的入门方式。
+本文档展示了一个完整示例思路:**Velocity 代理 + Outpre等待后端 + 真实游戏后端**。这也是当前更稳妥、排障成本更低的入门方式。
## 前置条件
开始前请先确认:
- [ ] 你已经准备好一台 Velocity 代理;
-- [ ] 你至少准备了两个后端服:一个等待后端、一个正式游戏后端;
+- [ ] 你至少准备好了一个正式游戏后端;
- [ ] 你打算让玩家通过代理地址进入,而不是直连后端;
-- [ ] 你已经看过 [`服务器基础配置`](./服务器基础配置.md),或者熟悉 Velocity 的`modern`转发配置方法。
- - 尤其是 `modern forwarding`、`forwarding.secret`、后端 `online-mode` 这些基础项,**本章不会重复展开配置片段**。如果这里还没有配置好,请先回到 [`服务器基础配置`](./服务器基础配置.md)。
+- [ ] 你已经看过 [`服务器基础配置`](/manual/zh/服务器基础配置/),或者熟悉 Velocity 的`modern`转发配置方法。
+ - 尤其是 `modern forwarding`、`forwarding.secret`、后端 `online-mode` 这些基础项,**本章不会重复展开配置片段**。如果这里还没有配置好,请先回到 [`服务器基础配置`](/manual/zh/服务器基础配置/)。
## 安装方式
1. 下载 HyperZoneLogin 的发行 jar;
2. 把 jar 放进 Velocity 的 `plugins/`目录中;
-3. 在`velocity.toml`中正确配置等待后端服和正式游戏后端服的ID和IP地址;
-4. 启动一次 Velocity,让 `plugins/hyperzonelogin/` 配置目录自动生成;
-5. 按照下方说明修改 [`backend-server.conf`](/manual/zh/config/backend-server) 配置:
-
-```hocon title=backend-server.conf
-# 等待后端服在velocity.toml里面设置的ID
-fallback-auth-server=lobby
-# 正式游戏后端服在velocity.toml里面设置的ID
-post-auth-default-server=play
-# 在真实服务器认证等待区内,如果玩家尝试前往其他服务器,是否记住新的目标并在认证成功后自动连接
-remember-requested-server-during-auth=true
+3. 在`velocity.toml`中正确配置正式游戏后端服的ID和IP地址;
+4. 启动一次 Velocity,让插件生成初始配置文件;
+5. 按照下方说明修改 [`start.conf`](/manual/zh/config/start) 配置:
+
+```hocon title=start.conf
+# 配置注释语言,影响其他配置文件首次生成时的注释语言。使用中文请设置为"zh_cn"。
+language="zh_cn"
+# 配置文件格式,影响其他配置文件的序列化方式。建议保持hocon不变。
+format=hocon
+# 确认上述配置完成之后,将本字段改为true。
+ready=true
```
-6. 再检查你的 Velocity 服务器和后端服是否都已启动。
+6. 再次重启Velocity,让插件生成完整配置。
+7. 按照下方说明修改 [`core.conf`](/manual/zh/config/core) 配置:
+
+``` hocon title=core.conf
+v-server {
+ # 认证完成后默认进入的服务器。将其改为你在velocity.toml中设置的游戏后端服ID。
+ post-auth-default-server=play
+}
+```
+
+8. 最后再次重启Velocity,并确保游戏后端服也已经运行。
## 检验方式
@@ -41,28 +51,20 @@ remember-requested-server-during-auth=true
如果链路正常,应该会观察到以下现象:
-1. 玩家先进入等待后端;
-2. 在等待后端里看到的玩家名表现为 `HZLxxxxxx`(`xxxxxx` 为一串随机数字);
+1. 玩家先进入Outpre等待区;
+2. 在Outpre等待区里看到的玩家名表现为 `HZLxxxxxx`(`xxxxxx` 为一串随机数字);
3. 认证完成并进入正式游戏后端后,玩家名恢复为正常玩家名称。
如果没有出现上述现象,优先回查以下内容:
-- [`服务器基础配置`](./服务器基础配置.md):确认 `modern forwarding` 与后端代理设置;
+- [`服务器基础配置`](/manual/zh/服务器基础配置/):确认 `modern forwarding` 与后端代理设置;
- [`velocity.toml`](https://docs.papermc.io/velocity/configuration/):确认后端服务器名与 `try` 顺序;
-- [`backend-server.conf`](/manual/zh/config/backend-server):确认等待后端与正式游戏后端名称填写正确。
-
-## 为什么不优先考虑 LimboAPI
-
-虽然某些部署会考虑把 `limboapi` 作为认证等待区方案,但对于“先跑通”的目标来说,不建议把它当成第一选择。
-
-原因很简单:**首次使用时更强调稳定、可观察、容易排障。**相比之下,直接准备一个真实后端等待区服务器,通常更容易验证链路是否正常。
-
-如果你后续确实要研究该方案,建议在已经跑通真实子服方案后再单独测试。
+- [`core.conf`](/manual/zh/config/core):确认正式游戏后端名称填写正确。
## 继续阅读
当你已经完成本文内容后,建议继续按下面顺序阅读:
-1. [`模块介绍`](./模块介绍.md):确定你到底需要哪些模块;
-2. [`基础安装`](./基础安装.md):了解更完整的安装与首次启动检查项;
+1. [`模块介绍`](/manual/zh/模块介绍/):确定你到底需要哪些模块;
+2. [`基础安装`](/manual/zh/基础安装/):了解更完整的安装与首次启动检查项;
3. [`配置索引`](/manual/zh/config/配置列表):调整配置,以接入自己的皮肤站、自定义 Entry、调整数据库或离线识别策略等。
diff --git "a/src/content/docs/manual/zh/\346\234\215\345\212\241\345\231\250\345\237\272\347\241\200\351\205\215\347\275\256.md" "b/src/content/docs/manual/zh/\346\234\215\345\212\241\345\231\250\345\237\272\347\241\200\351\205\215\347\275\256.md"
index 420cc07..29bb48f 100644
--- "a/src/content/docs/manual/zh/\346\234\215\345\212\241\345\231\250\345\237\272\347\241\200\351\205\215\347\275\256.md"
+++ "b/src/content/docs/manual/zh/\346\234\215\345\212\241\345\231\250\345\237\272\347\241\200\351\205\215\347\275\256.md"
@@ -84,5 +84,4 @@ proxies:
- [ ] 已完成 Velocity 与后端服的基础联通;
- [ ] `velocity.toml` 使用 `modern` 转发;
- [ ] 后端的`modern`转发已正确配置,`online-mode=false`和`bungeecord=false`均已设置正确;
-- [ ] 玩家无法绕过代理直连后端;
-- [ ] 你知道认证等待区准备放在哪个后端服务器上。
+- [ ] 玩家无法绕过代理直连后端。
diff --git "a/src/content/docs/manual/zh/\346\246\202\350\246\201.md" "b/src/content/docs/manual/zh/\346\246\202\350\246\201.md"
index 31c8e66..cf68f81 100644
--- "a/src/content/docs/manual/zh/\346\246\202\350\246\201.md"
+++ "b/src/content/docs/manual/zh/\346\246\202\350\246\201.md"
@@ -29,11 +29,11 @@ title: "概要"
建议按以下顺序阅读:
-1. 如果你想先把环境快速跑通,先看 [`快速上手`](./快速上手.md);
-2. 再看 [`服务器基础配置`](./服务器基础配置.md),确认代理服基础环境正确;
-3. 然后阅读 [`模块介绍`](./模块介绍.md),决定你需要启用哪些模块;
-4. 接着查看 [`基础安装`](./基础安装.md),完成更完整的最小部署;
+1. 如果你想先把环境快速跑通,先看 [`快速上手`](/manual/zh/快速上手/);
+2. 再看 [`服务器基础配置`](/manual/zh/服务器基础配置/),确认代理服基础环境正确;
+3. 然后阅读 [`模块介绍`](/manual/zh/模块介绍/),决定你需要启用哪些模块;
+4. 接着查看 [`基础安装`](/manual/zh/基础安装/),完成更完整的最小部署;
5. 需要继续微调时,再参考 [`配置索引`](/manual/zh/config/配置列表);
-6. 遇到问题时,可查阅 [`常见问题`](./常见问题.md) 并按 [`问题反馈`](./问题反馈.md) 整理反馈材料。
+6. 遇到问题时,可查阅 [`常见问题`](/manual/zh/常见问题/) 并按 [`问题反馈`](/manual/zh/问题反馈/) 整理反馈材料。
如果你当前还没有完成 Velocity 与后端服的基础转发配置,请不要急着安装本项目。对代理服登录框架来说,**基础网络与转发配置是前置条件,不是可选项**。
diff --git "a/src/content/docs/manual/zh/\346\250\241\345\235\227\344\273\213\347\273\215.md" "b/src/content/docs/manual/zh/\346\250\241\345\235\227\344\273\213\347\273\215.md"
index aabc9ba..5b69652 100644
--- "a/src/content/docs/manual/zh/\346\250\241\345\235\227\344\273\213\347\273\215.md"
+++ "b/src/content/docs/manual/zh/\346\250\241\345\235\227\344\273\213\347\273\215.md"
@@ -2,7 +2,7 @@
title: "模块介绍"
---
-**HyperZoneLogin** 由核心模块与多个子模块组成,打包在同一个jar文件中,由`modules.conf`控制是否激活。并不是所有模块都激活,正确做法是根据你的登录方案与迁移需求选择组合。
+**HyperZoneLogin** 由核心模块与多个子模块组成,打包在同一个jar文件中,由`core.conf`中的`modules`部分控制是否激活。并不是所有模块都激活,正确做法是根据你的登录方案与迁移需求选择组合。
## 模块总览
@@ -11,6 +11,7 @@ title: "模块介绍"
| Velocity | - | 主插件 / 核心运行时,负责 Profile、数据库、命令与模块注册 | - |
| Yggdrasil验证 | `auth-yggd` | 提供 Mojang / 第三方 Yggdrasil 在线验证能力 | 正版登录/外置登录 |
| 离线登陆验证 | `auth-offline` | 提供本地 / 离线账号注册、登录、绑定、改密等能力 | 离线登录 |
+| Floodgate登陆验证 | `auth-floodgate` | 提供利用 Floodgate 认证基岩版玩家的能力 | 基岩版玩家登录 |
| 数据迁移 | `data-merge` | 从 AuthMe 或 MultiLogin 迁移数据 | 只在迁移时需要 |
| 皮肤恢复 | `profile-skin` | 在认证链路中提取、修复、缓存并应用皮肤属性 | 有皮肤需求 |
| 安全防护 | `safe` | 简易的反假人功能 | 无其他反假人插件时 |
@@ -22,37 +23,47 @@ title: "模块介绍"
如果你希望只允许 Mojang 正版和第三方外置登录玩家进入,不提供离线本地账号注册,且希望围绕 Yggdrasil 档案做统一管理:
-请**激活`auth-yggd`模块** ,无需激活`auth-offline`模块。如果需要恢复玩家皮肤,亦可激活`profile-skin`模块。
+请**激活`auth-yggd`模块** ,无需激活`auth-offline`模块。如果需要缓存玩家皮肤,亦可激活`profile-skin`模块。
对应的配置文件样例如下:
-```hocon
-auth-offline=false
-auth-yggd=true
-data-merge=false
-profile-skin=true
-safe=true
+```hocon title=core.conf
+modules {
+ auth-floodgate=false
+ auth-offline=false
+ auth-yggd=true
+ safe=true
+ profile-skin=true
+ data-merge=false
+}
```
### 2. 正版登录+外置登录+离线玩家密码登录
如果你的服务器既要接收离线玩家,又要兼容正版和第三方外置登录玩家:
-请**激活`auth-yggd`模块和`auth-offline`模块** 。如果需要恢复玩家皮肤,亦可激活`profile-skin`模块。
+请**激活`auth-yggd`模块和`auth-offline`模块** 。如果需要缓存玩家皮肤,亦可激活`profile-skin`模块。
对应的配置文件样例如下:
-```hocon
-auth-offline=true
-auth-yggd=true
-data-merge=false
-profile-skin=true
-safe=true
+```hocon title=core.conf
+modules {
+ auth-floodgate=false
+ auth-offline=true
+ auth-yggd=true
+ safe=true
+ profile-skin=true
+ data-merge=false
+}
```
-### 3. 需要从Authme或Multilogin迁移
+### 3. 基岩版玩家支持
-如果你的服务器之前在使用上述插件,并希望将数据迁移到本插件,在前文所述的基础上还需要 **激活`data-merge`模块** 。具体操作参见[`迁移数据`](迁移数据.md)。
+如果你的服务器还希望支持基岩版玩家进入,请在前文所述的基础上进一步 **激活`auth-floodgate`模块** ,同时需要在 Velocity 服务器安装 Geyser 和 Floodgate 插件。
+
+### 4. 需要从Authme或Multilogin迁移
+
+如果你的服务器之前在使用上述插件,并希望将数据迁移到本插件,在前文所述的基础上还需要 **激活`data-merge`模块** 。具体操作参见[`迁移数据`](/manual/zh/迁移数据/)。
`data-merge`模块仅在进行数据迁移时才需要,数据正确迁移后即可禁用或移除。
@@ -63,8 +74,9 @@ safe=true
1. **先装核心主插件**;
2. 需要在线验证,就激活 `auth-yggd`;
3. 需要离线本地账号,就激活 `auth-offline`;
-4. 需要迁移历史数据,才暂时激活 `data-merge`;
-5. 需要皮肤修复与缓存,再激活 `profile-skin`;
-6. 没有额外的反假人插件,并且有反假人的需求,才激活 `safe`。
+4. 需要支持基岩版玩家,就激活 `auth-floodgate`,并安装 Geyser 和 Floodgate;
+5. 需要迁移历史数据,才暂时激活 `data-merge`;
+6. 需要皮肤修复与缓存,再激活 `profile-skin`;
+7. 没有额外的反假人插件,并且有反假人的需求,才激活 `safe`。
这样选出来的组合,通常就是最接近实际需求的最小集。
diff --git "a/src/content/docs/manual/zh/\350\277\201\347\247\273\346\225\260\346\215\256.md" "b/src/content/docs/manual/zh/\350\277\201\347\247\273\346\225\260\346\215\256.md"
index 906d05e..5d63d68 100644
--- "a/src/content/docs/manual/zh/\350\277\201\347\247\273\346\225\260\346\215\256.md"
+++ "b/src/content/docs/manual/zh/\350\277\201\347\247\273\346\225\260\346\215\256.md"
@@ -6,10 +6,12 @@ title: 迁移数据
## 迁移步骤
-首先,请在`modules.conf`配置中激活`data-merge`模块。
+首先,请在`core.conf`配置中激活`data-merge`模块。
-```hocon
-data-merge=true
+```hocon title=core.conf
+modules {
+ data-merge=true
+}
```
然后重启服务器一次,令模块生成对应的配置文件。你需要按照下方指引修改配置文件中的字段,使插件能够正确获取原有数据库中的信息。
@@ -20,10 +22,15 @@ data-merge=true
## Multilogin 迁移配置
-Multilogin 数据迁移的配置文件为`/plugins/hyperzonelogin/merge`目录下的`merge-ml.conf`文件。你需要注意修改以下配置:
+Multilogin 数据迁移的配置文件为`/plugins/hyperzonelogin/data-merge`目录下的`multilogin.conf`文件。
+
+在此之前,你需要先按照 Multilogin 中的原有配置,**为每个 Yggdrasil 登录服务创建好[条目配置文件](/manual/zh/config/yggd-entry/)** 。
+
+之后,你需要注意修改以下配置:
- `source.type`:Multilogin 插件数据库的类型。请根据你原先的配置选择 `H2DB` 或 `MYSQL` 。
- `tables.user-data-table`和`tables.in-game-profile-table`:**默认配置下勿动。** 如果你修改过 Multilogin 配置中的数据表前缀(`tablePrefix`),请将最开头的`multilogin`更改为你设定的前缀,其余部分勿动。
+- `service-id-mapping`:参照[配置页面说明](/manual/zh/config/merge-ml#服务id映射配置)修改。
如果你原先使用 H2DB 数据库,你还需要调整以下配置:
@@ -41,7 +48,7 @@ Multilogin 数据迁移的配置文件为`/plugins/hyperzonelogin/merge`目录
## Authme 迁移配置
-Authme 数据迁移的配置文件为`/plugins/hyperzonelogin/merge`目录下的`merge-am.conf`文件。你需要注意修改以下配置:
+Authme 数据迁移的配置文件为`/plugins/hyperzonelogin/data-merge`目录下的`authme.conf`文件。你需要注意修改以下配置:
- `source.type`:Authme 插件数据库的类型。请根据你原先的配置选择 `SQLITE` 或 `MYSQL` 。
diff --git "a/src/content/docs/manual/zh/\351\234\200\350\246\201\350\241\245\345\205\205.md" "b/src/content/docs/manual/zh/\351\234\200\350\246\201\350\241\245\345\205\205.md"
index baa13fa..4ca3caa 100644
--- "a/src/content/docs/manual/zh/\351\234\200\350\246\201\350\241\245\345\205\205.md"
+++ "b/src/content/docs/manual/zh/\351\234\200\350\246\201\350\241\245\345\205\205.md"
@@ -131,7 +131,7 @@ slug: "manual/todo-list"
### FAQ 持续补充
-当前用户手册已经新增 [`常见问题`](./常见问题.md) 作为基础 FAQ 章节,但它仍然只覆盖了第一批可以明确确认的高频场景。后续仍建议继续补充下面这类问题:
+当前用户手册已经新增 [$1](/manual/zh/$2/) 作为基础 FAQ 章节,但它仍然只覆盖了第一批可以明确确认的高频场景。后续仍建议继续补充下面这类问题:
- [ ] 我到底该装哪几个模块?
- [ ] 为什么玩家认证成功后没有自动进目标服?