- 版权类型
- 二次开发
- 插件中文名称
- Yee登录
- 插件英文名称
- Logyee
- 支持的核心(代理-服务端)
- Bungee
- Velocity
- Spigot
- PaperSpigot
- Purpur
- Leaves
- 语言支持
- 中文(简体)
- 前置组件
- PacketEvents https://modrinth.com/plugin/packetevents
ProtocalLib https://www.spigotmc.org/resources/protocollib.1997/
- 适配版本(Java)
- 最新版本
- 26.x
- 1.21
- 1.20
- 1.19
- 1.18
- 1.17
- 1.16
- 1.15
- 1.14
- 1.13
[MD]
# Logyee
> 一款轻量、安全、跨代理的 Minecraft 登录插件(Auth / Login 插件)。
Logyee 是一个以账号安全为核心的登录注册插件,**同一个 JAR 文件同时支持 Bukkit / Spigot / Paper 服务端、BungeeCord 代理端、Velocity 代理端**三大平台。它在一个插件中集成了账号注册、登录、改密、邮箱找回密码,以及一套完整的「登录前行为限制 + 跨代理登录态同步 + 防绕过指令防火墙」安全体系。
要点:类似AuthMe的正版免登录
本项目基于 [CatSeedLogin](https://github.com/CatSeed/CatSeedLogin) 二次开发,相关许可声明见文末 [许可证](#许可证)。
---
## 目录
- [核心特性](#核心特性)
- [支持的平台与版本](#支持的平台与版本)
- [工作原理(架构)](#工作原理架构)
- [快速安装](#快速安装)
- [配置文件详解](#配置文件详解)
- [Bukkit 端 settings.yml](#1-bukkit-端-settingsyml)
- [数据库连接 sql.yml](#2-数据库连接-sqlyml)
- [邮箱服务 emailVerify.yml](#3-邮箱服务-emailverifyyml)
- [Bukkit ↔ 代理通讯 bungeecord.yml](#4-bukkit--代理通讯-bungeecordyml)
- [代理端 bungeecord.yml / velocity.yml](#5-代理端-bungeecordyml--velocityyml)
- [语言文件 language.yml](#6-语言文件-languageyml)
- [玩家指令](#玩家指令)
- [管理员指令(/logyee、/ly)](#管理员指令logyee小写字)
- [正版免登录(Premium)](#正版免登录premium)
- [安全机制](#安全机制)
- [数据库](#数据库)
- [开发者 API](#开发者-api)
- [构建项目](#构建项目)
- [许可证](#许可证)
---
## 核心特性
| 特性 | 说明 |
| --- | --- |
| **三端合一** | 单个 JAR 同时兼容 Bukkit 服务端、BungeeCord 代理、Velocity 代理;各平台只加载自身代码,互不影响。 |
| **账号体系** | 邮箱式注册、登录、修改密码、邮箱找回密码,全程 SHA‑512 加盐哈希存储。 |
| **密码强度校验** | 强制 6–16 位、必须同时包含字母与数字,杜绝弱口令。 |
| **登录前全面限制** | 未登录玩家无法移动、聊天、交互、打开/点击背包、丢弃/拾取物品、攻击、传送、执行非白名单指令。 |
| **登录前免伤** | 可配置未登录期间玩家不受任何伤害(`BeforeLoginNoDamage`)。 |
| **隐藏背包** | 安装 ProtocolLib 后,登录前通过发包隐藏玩家物品栏,防止被窥探。 |
| **跨代理登录态同步** | 通过 Socket 长连接,服务端(Bukkit)与代理端(Bungee/Velocity)实时同步登录/登出状态,切服无需重复登录。 |
| **防重复登录** | 同一账号已登录时,禁止从其他地方再次连接(代理端 + 服务端双重校验)。 |
| **指令防火墙(Anti‑Bypass)** | 未登录玩家只允许执行白名单指令(支持正则);**代理指令(如 `/ban`)和非白名单指令一律拦截**,无法绕过权限直接进入子服。 |
| **Velocity 原生拦截** | Velocity 端使用原生 `CommandExecuteEvent`(而非 Bungee 的 `ChatEvent`),从根本上解决 Snap 等环境下 `ChatEvent` 失效导致指令绕过的问题。 |
| **IP 限制** | 同一 IP 注册账号数量上限(`IpRegisterCountLimit`)与同 IP 在线账号数量上限(`IpCountLimit`)均可配置。 |
| **自动踢出** | 未在限定时间内登录的玩家会被自动踢出(`AutoKick`),防止占位与卡服。 |
| **登录回退点** | 登录后自动传送回上一次退出的位置(`AfterLoginBack`)。 |
| **大小写防护** | 登录名与注册名大小写必须一致,防止大小写冒用他人账号。 |
| **多数据库** | 默认内置 SQLite,亦可一键切换到 MySQL。 |
| **可自定义语言** | 所有提示信息集中在 `language.yml`,支持颜色代码自定义。 |
| **开发者扩展** | 提供 `LogyeeAPI` 与 `LogyeePlayerLoginEvent` / `LogyeePlayerRegisterEvent` 事件。 |
| **正版免登录** | 正版玩家 `/premium` opt-in 后,经 Mojang 加密验证免密登录(支持 online-mode / 代理 / PacketEvents 三条路径,fail-closed)。 |
---
## 支持的平台与版本
| 组件 | 平台 | 技术要求 |
| --- | --- | --- |
| 服务端 | Bukkit / Spigot / Paper(api‑version 1.13+,兼容 1.13 及以上) | Java 17 |
| 代理 · BungeeCord | BungeeCord(基于 `bungeecord-api` 1.16‑R0.4) | Java 17 |
| 代理 · Velocity | Velocity(基于 `velocity-api` 3.3.0) | Java 17 |
| 可选依赖 | ProtocolLib(用于登录前隐藏背包) | 服务端侧可选 |
> 编译要求:**Java 17 + Maven 3**(见 [构建项目](#构建项目))。
---
## 工作原理(架构)
Logyee 采用「**服务端为 Socket 服务端,代理端为 Socket 客户端**」的长连接架构:
```
┌─────────────────────────┐
│ Bukkit 服务端 (Logyee) │
│ 运行 Socket Server │
│ 账号数据 / 登录逻辑核心 │
└───────────┬─────────────┘
│ 长连接 (TCP)
┌───────────┴─────────────┐
│ BungeeCord / Velocity │
│ 运行 Socket Client │
│ 拦截未登录玩家指令 │
└─────────────────────────┘
```
通讯协议(明文、行分隔)如下:
| 方向 | 指令 | 含义 |
| --- | --- | --- |
| 代理 → 服务端 | `CONNECT <玩家名>` | 查询某玩家是否已登录 |
| 服务端 → 代理 | `CONNECT_RESULT <玩家名> <0\|1>` | 0=未登录,1=已登录 |
| 服务端 → 代理 | `PLAYER_LOGIN <玩家名>` | 玩家登录,通知代理标记登录态 |
| 服务端 → 代理 | `PLAYER_LOGOUT <玩家名>` | 玩家登出,通知代理清除登录态 |
| 代理 → 服务端 | `KEEP_LOGGED_IN <玩家> <时间戳> <签名>` | 切服回到登录服时维持登录态(带 MD5 签名校验) |
| 双向 | `PING <时间戳>` / `PONG <时间戳>` | 心跳保活(30s 一次,60s 超时重连) |
- **登录态同步**:玩家在子服登录后,服务端主动推送 `PLAYER_LOGIN`,代理端将其加入「已登录集合」。此后该玩家在代理层的命令不再被拦截。
- **切服免重登**:玩家切回登录服(`LoginServerName`,默认 `lobby`)时,代理端若已是登录态,会发送 `KEEP_LOGGED_IN` 让服务端恢复其登录态。
- **防重复登录**:玩家进入代理前,代理端会同时检查自身登录态与子服登录态(`CONNECT`),只要有一处已登录即拒绝连接。
- **断线自愈**:代理端内置自动重连与心跳超时检测,服务端端口断开后会持续重连。
---
## 快速安装
### 仅服务端(单机 / 无代理)
1. 将编译好的 `Logyee.jar` 放入服务端的 `plugins/` 目录。
2. 启动服务器,插件会在 `plugins/Logyee/` 下生成配置文件。
3. 按需修改 `plugins/Logyee/settings.yml`、`sql.yml`、`emailVerify.yml`。
4. 使用 `/logyee reload` 或重启服务器使配置生效。
### 服务端 + 代理(BungeeCord / Velocity)
1. **服务端**:将 `Logyee.jar` 放入子服(登录服及所有需要保护的子服)的 `plugins/`,并确保 `plugins/Logyee/bungeecord.yml` 中 `Enable: true`,填写 `Host` / `Port` 与一致的 `AuthKey`。
2. **代理端**:将**同一个** `Logyee.jar` 放入 BungeeCord 的 `plugins/` 或 Velocity 的 `plugins/`。
- BungeeCord:配置文件为 `plugins/Logyee-Bungee/bungeecord.yml`(由插件从 `bungee-resources/bungeecord.yml` 生成)。
- Velocity:配置文件为 `plugins/logyee-velocity/velocity.yml`(由插件从 `velocity-resources/velocity.yml` 生成)。
3. 代理端配置中同样设置 `Enable: true`、`Host`、`Port`、`LoginServerName`、`AuthKey`(与服务端 `bungeecord.yml` 保持一致)。
4. 重启代理与子服,观察日志中出现 `Connected to Bukkit <Host>:<Port>` 即表示通讯建立。
> ⚠️ 服务端 `bungeecord.yml` 中的 `Host`/`Port` 是 **Socket 监听地址(服务端侧)**;代理端 `bungeecord.yml` / `velocity.yml` 中的 `Host`/`Port` 是**代理连向服务端的地址**。两端 `AuthKey` 必须相同。
---
## 配置文件详解
### 1. Bukkit 端 settings.yml
这是最常用的配置文件,控制所有行为开关与限制。
| 配置项 | 默认值 | 说明 |
| --- | --- | --- |
| `IpRegisterCountLimit` | `2` | 同一 IP 最多可注册的账号数量。 |
| `IpCountLimit` | `2` | 同一 IP 同时在线的最大账号数(≤0 表示不限制)。 |
| `LimitChineseID` | `true` | 是否限制游戏名只能由数字、字母、下划线组成(禁止中文名)。 |
| `MinLengthID` | `2` | 游戏名最小长度(至少 1,且不能大于最大长度)。 |
| `MaxLengthID` | `15` | 游戏名最大长度(不超过 16)。 |
| `BeforeLoginNoDamage` | `true` | 登录前玩家是否免疫一切伤害。 |
| `ReenterInterval` | `60` | 玩家退出后重新进入、被视为「重连而非新登录」的时间间隔(单位:tick)。 |
| `AfterLoginBack` | `true` | 登录后是否传送回上次退出的位置。 |
| `CanTpSpawnLocation` | `true` | 登录前是否强制把玩家限制在登录点(禁止乱跑)。 |
| `AutoKick` | `120` | 未登录玩家的自动踢出时间(秒,<1 表示关闭)。 |
| `DeathStateQuitRecordLocation` | `true` | 玩家在死亡状态下退出时是否记录退出位置(防止利用死亡退出刷地点)。 |
| `CommandWhiteList` | 见下 | Bukkit 侧登录前允许执行的指令(**正则表达式**,匹配整条消息或指令名)。 |
默认 `CommandWhiteList` 内容(正则):
```
- /(?i)l(ogin)?(\z| .*) # 允许 /login、/l
- /(?i)reg(ister)?(\z| .*) # 允许 /register、/reg
- /(?i)resetpassword?(\z| .*) # 允许 /resetpassword、/repw
- /(?i)repw?(\z| .*) # 允许 /repw
- /(?i)worldedit cui # 允许 WorldEdit 的 cui 指令
```
> 提示:绝大多数玩家指令已在代理端内置白名单中,这里一般不需要改动。
### 2. 数据库连接 sql.yml
| 配置项 | 默认值 | 说明 |
| --- | --- | --- |
| `MySQL.Enable` | `false` | 是否使用 MySQL(false 时使用内置 SQLite)。 |
| `MySQL.Host` | `127.0.0.1` | MySQL 主机地址。 |
| `MySQL.Port` | `3306` | MySQL 端口。 |
| `MySQL.Database` | `databaseName` | 数据库名。 |
| `MySQL.User` | `root` | 用户名。 |
| `MySQL.Password` | `root` | 密码。 |
> 使用 MySQL 时,切换后会在启动时自动建表。
### 3. 邮箱服务 emailVerify.yml
开启邮箱找回密码功能的前提。
| 配置项 | 默认值 | 说明 |
| --- | --- | --- |
| `Enable` | `false` | 是否启用邮箱功能(`/bindemail`、`/resetpassword` 依赖此项)。 |
| `EmailAccount` | `763737569@qq.com` | 发件邮箱账号。 |
| `EmailPassword` | `123456` | 发件邮箱授权码/密码。 |
| `EmailSmtpHost` | `smtp.qq.com` | SMTP 服务器地址。 |
| `EmailSmtpPort` | `465` | SMTP 端口。 |
| `SSLAuthVerify` | `true` | 是否启用 SSL。 |
| `FromPersonal` | `xxx服务器` | 收件人看到的发件人名称。 |
### 4. Bukkit ↔ 代理通讯 bungeecord.yml
| 配置项 | 默认值 | 说明 |
| --- | --- | --- |
| `Enable` | `false` | 服务端是否启动 Socket 监听(接入代理时改为 `true`)。 |
| `Host` | `127.0.0.1` | Socket 监听地址(服务端侧)。 |
| `Port` | `2333` | Socket 监听端口。 |
| `AuthKey` | `""` | 通讯签名密钥,**务必与代理端一致**。 |
### 5. 代理端 bungeecord.yml / velocity.yml
> BungeeCord 实际路径为 `plugins/Logyee-Bungee/bungeecord.yml`;Velocity 为 `plugins/logyee-velocity/velocity.yml`。两者的字段完全相同。
| 配置项 | 默认值 | 说明 |
| --- | --- | --- |
| `Enable` | `true` | 代理端是否启用跨服登录同步。 |
| `Host` | `127.0.0.1` | 代理连向服务端 Socket 的地址。 |
| `Port` | `2333` | 代理连向服务端 Socket 的端口。 |
| `LoginServerName` | `lobby` | 登录服在代理中的服务器名(切服回此服时维持登录态)。 |
| `AuthKey` | `""` | 通讯签名密钥,须与服务端一致。 |
| `CommandWhitelist` | `[]` | 除内置白名单外,额外允许未登录玩家执行的指令(不区分大小写、不带 `/`)。 |
**内置命令白名单**(无需手动添加,硬编码在代理端):
```
login, l, register, reg, bindemail, bdmail, resetpassword, repw, changepassword, changepw
```
### 6. 语言文件 language.yml
所有玩家可见提示均在此文件,使用 `&` 颜色代码(如 `&a` 绿色、`&c` 红色)。修改后 `/logyee reload` 即可生效。常用键:`LOGIN_REQUEST`(提示登录)、`REGISTER_REQUEST`(提示注册)、`LOGIN_SUCCESS`、`LOGIN_FAIL`、`REGISTER_SUCCESS`、`AUTO_KICK` 等。
---
## 玩家指令
| 指令 | 别名 | 用途 | 说明 |
| --- | --- | --- | --- |
| `/login <密码>` | `/l` | 登录 | 账号已注册后输入密码登录。 |
| `/register <密码> <重复密码>` | `/reg` | 注册 | 两次密码需一致,且满足强度规则;受同 IP 注册数量限制。 |
| `/changepassword <旧密码> <新密码> <重复新密码>` | `/changepw` | 修改密码 | 需已登录,新密码需满足强度规则。 |
| `/bindemail set <邮箱>` | `/bdmail` | 绑定邮箱(第一步) | 向邮箱发送验证码;需先开启邮箱功能且已登录。 |
| `/bindemail verify <验证码>` | `/bdmail` | 绑定邮箱(第二步) | 校验验证码完成绑定,用于后续找回密码。 |
| `/resetpassword forget` | `/repw` | 申请找回密码 | 向已绑定邮箱发送重置验证码(有效期 20 分钟)。 |
| `/resetpassword re <验证码> <新密码>` | `/repw` | 重置密码 | 校验验证码后设置新密码,需满足强度规则。 |
**密码强度规则**:长度 6–16 位,且必须同时包含英文字母和数字(纯数字或纯字母会被拒绝)。
**邮箱验证码**:绑定与找回两类验证码默认有效期 20 分钟,过期需重新申请。
---
## 管理员指令(/logyee、/ly)
主命令 `/logyee`(可缩写为 `/ly`、`/logy`),需要权限节点 `logyee.command.logyee`。所有 `set` 改动会自动保存到 `settings.yml`。
### 设置项(set / see 动词)
| 用法 | 默认值 | 说明 |
| --- | --- | --- |
| `/logyee set/see cmdwhitelist\|cw add\|rm <指令>` | — | 登录前允许执行的指令(支持正则),可增删查看。 |
| `/logyee set/see ipreg\|ir <数量>` | `2` | 同一 IP 注册账号数量限制。 |
| `/logyee set/see ipjoin\|ij <数量>` | `2` | 同一 IP 同时在线账号限制(<1 不限制)。 |
| `/logyee set/see name\|nm least\|long <值>` | `2` / `15` | 游戏名最小 / 最大长度。 |
| `/logyee set/see reconnect\|re <间隔>` | `60` | 重连判定间隔(tick)。 |
| `/logyee set/see autokick\|ak <秒数>` | `120` | 未登录自动踢出时间(<1 关闭)。 |
| `/logyee set/see/tp Spawn` | 世界出生点 | 设置 / 查看 / 传送到登录点。 |
| `/logyee set/see chineseid\|cnid on/off` | `true` | 限制中文游戏名。 |
| `/logyee set/see nodamage\|nd on/off` | `true` | 登录前免伤。 |
| `/logyee set/see alb\|afterloginback on/off` | `true` | 登录后返回退出点。 |
| `/logyee set/see forceloginlocation\|fsl on/off` | `true` | 登录前强制在登录点。 |
| `/logyee set/see deathrecord\|dr on/off` | `true` | 死亡退出记录位置。 |
### 直接指令
| 用法 | 说明 |
| --- | --- |
| `/logyee rmplayer\|rmp <玩家名>` | 强制删除某账号(在线则一并踢出)。 |
| `/logyee setpwd\|sp <玩家名> <密码>` | 强制设置/重置某玩家密码(账号不存在会自动注册)。 |
| `/logyee reload\|re` | 重新加载配置文件、重建数据库连接与 Socket 监听。 |
> 所有 `set` 命令改动即时落盘;修改数据库相关或通讯开关后建议用 `/logyee reload`。
---
## 正版免登录(Premium)
持有官方 Minecraft 正版账号的玩家可以主动 opt-in,之后每次入服由插件通过 Mojang 加密会话验证身份,验证通过即跳过密码登录。**安全优先**:任何无法通过密码学验证的身份一律 fail-closed 回退到密码认证。
### 启用方式
1. 在 `settings.yml` 中将 `EnablePremium` 设为 `true`(默认 `false`)。
2. **离线无代理**场景(路径 C)需额外安装 **PacketEvents** 插件;未安装时该路径自动禁用(fail-closed),不影响密码登录。
3. 服务器需能访问 `api.mojang.com` 与 `sessionserver.mojang.com`。
### 玩家指令
| 指令 | 说明 |
| --- | --- |
| `/premium` | 开启正版免登录(opt-in)。在线模式/代理下 UUID v4 直接生效;离线模式下需重连完成加密验证。 |
| `/freemium` | 关闭正版免登录,恢复密码登录。 |
### 管理员指令
| 指令 | 说明 |
| --- | --- |
| `/logyee premium <玩家名>` | 为指定玩家开启正版免登录(会踢出同名冒名者)。 |
| `/logyee freemium <玩家名>` | 关闭指定玩家的正版免登录。 |
### 三条验证路径
| 路径 | 部署模式 | 验证方式 |
| --- | --- | --- |
| A | online-mode=true | 连接层已由 Mojang 验证,UUID v4 直接比对。 |
| B | offline-mode + 代理 | 代理端(Bungee 用 PacketEvents、Velocity 用原生在线模式)完成 hasJoined 验证,经 Socket 转发 premium UUID,后端校验后免密登录。 |
| C | offline-mode,无代理 | 后端用 PacketEvents 做 RSA 握手 + hasJoined 加密验证。 |
### 安全说明
- **fail-closed**:`EnablePremium` 关闭、无 PacketEvents(离线无代理)、hasJoined 返回非 200 时,一律回退密码认证,绝不降级为不安全模式。
- **防重放**:验证用 4 字节随机 verify token 校验;已验证会话 TTL 60s、待验证握手 TTL 30s、待验证注册 TTL 5min。
- **冒名防护**:管理员开启正版时,同名但 UUID 不匹配的在线玩家会被踢出。
- 离线 UUID(v3)不可信,必须走加密验证(路径 B 或 C)。
---
## 安全机制
1. **登录前行为封锁(Bukkit 侧)**:监听 `PlayerMove`、`PlayerChat`、`PlayerInteract`、`InventoryOpen/Click`、`PlayerDropItem`、`EntityPickupItem`、`PlayerTeleport`、`EntityDamageByEntity` 等事件,未登录玩家一律取消,仅放行登录白名单指令。
2. **指令白名单(双保险)**:
- 服务端 `settings.yml` 的 `CommandWhiteList`(正则)。
- 代理端内置白名单 + `bungeecord.yml`/`velocity.yml` 的 `CommandWhitelist`。
- 未登录玩家**只能**执行白名单指令,包括 Bungee/Velocity 的代理指令(如 `/ban`)也被拦截,无法绕过进入子服。
3. **隐藏背包**:检测到 ProtocolLib 后,登录前拦截 `SET_SLOT` / `WINDOW_ITEMS` 发包,玩家看不到物品栏内容;重置密码/改密后还会主动发送空背包包刷新。
4. **大小写防护**:`AsyncPlayerPreLoginEvent` 校验登录名大小写与注册名完全一致,不一致直接拒绝。
5. **防重复登录**:进入代理前同时校验代理端登录态与子服登录态(`CONNECT`),已登录则拒绝新连接。
6. **密码存储安全**:密码经 `Crypt.encrypt(name, password)` 使用 SHA‑512(含玩家名与固定盐)哈希后入库,明文密码不落盘。
7. **通讯鉴权**:代理 → 服务端的 `KEEP_LOGGED_IN` 使用 `MD5(name + 时间戳 + AuthKey)` 签名,防止伪造维持登录态。
---
## 数据库
- **默认 SQLite**:无需任何配置,数据保存在服务端插件目录的数据库文件中(账号表 `accounts`)。
- **可选 MySQL**:在 `sql.yml` 中将 `MySQL.Enable` 改为 `true` 并填写连接信息即可切换,适合多子服共享同一账号库。
账号表 `accounts` 结构:
| 字段 | 说明 |
| --- | --- |
| `name` | 玩家名(主键标识,大小写敏感存储)。 |
| `password` | SHA‑512 加盐密码哈希。 |
| `email` | 绑定的邮箱(可为空)。 |
| `ips` | 历史登录 IP 列表(分号分隔,最多保留 5 个)。 |
| `lastAction` | 最近一次操作时间戳。 |
| `premiumUUID` | 正版账号的 Mojang UUID(可空,非空即正版)。 |
> 插件在内存中维护一份账号缓存(`Cache`),启动与每次改动后刷新,保证查询性能。
---
## 开发者 API
`top.zhrhello.logyee.bukkit.LogyeeAPI` 提供静态方法供其他插件调用:
| 方法 | 返回值 / 含义 |
| --- | --- |
| `isLogin(String name)` | 玩家当前是否已登录。 |
| `isRegister(String name)` | 玩家是否已注册。 |
| `verifyPassword(String name, String password)` | 校验明文密码是否正确(true=正确)。 |
| `markLoggedIn(String name)` | **恢复登录态**(用于跨线换服后重建登录态,不触发登录事件、不记录 IP、不传送)。返回 `0`=成功、`1`=未注册、`2`=已登录(幂等)。 |
事件(位于 `top.zhrhello.logyee.bukkit.event`):
- `LogyeePlayerLoginEvent` — 玩家登录成功/失败时触发,携带玩家、邮箱与结果。
- `LogyeePlayerRegisterEvent` — 玩家注册成功时触发。
---
## 构建项目
环境要求:**JDK 17**、**Maven 3**。
```bash
# 克隆或进入 Logyee 项目目录
cd Logyee
# 编译并打包(自动执行 shade, relocated SnakeYAML 到 top.zhrhello.logyee.libs.snakeyaml)
mvn clean package
```
构建产物位于 `target/Logyee-1.2.1.jar`,可直接放入对应服务端 / 代理端的 `plugins/` 目录。
依赖说明:
- 编译期依赖(provided):SpigotAPI 1.12.2、BungeeCord API、Velocity API、ProtocolLib、PacketEvents(三端)、Lombok。
- 打包进 JAR:SQLite JDBC、MySQL Connector、JavaMail、SnakeYAML(已 relocate)。
- 已排除:JUnit、各平台 API 与 JDBC 驱动(由运行环境提供),避免冲突。
> 正版免登录(离线无代理路径 C)运行时依赖 **PacketEvents** 插件,需单独安装;未安装时该路径自动禁用(fail-closed)。
---
## 许可证
本项目为基于 [CatSeedLogin](https://github.com/CatSeed/CatSeedLogin) 的衍生作品(上游项目)。
- **上游原许可证**:CatSeedLogin 原始采用 **MIT License**,其原始许可证文本保留在仓库的 **`LICENSE_OLD`** 文件中。
- **本项目现许可证**:Logyee 现以 **Apache License 2.0** 发布,完整许可证文本见仓库的 **`LICENSE`** 文件。
使用、修改或分发本作品时,请同时遵守 `LICENSE`(Apache 2.0)的要求,并保留 `LICENSE_OLD` 中对上游 CatSeedLogin(MIT License, Copyright (c) 2021 CatSeed)的原始版权与许可声明。
[/MD]