- 版权类型
- 原创
- 插件中文名称
- 等级插件
- 插件英文名称
- SealLevel
- 原帖地址
- #
- 支持的核心(服务端)
- Spigot
- Paper
- Purpur
- 语言支持
- 中文(简体)
- 前置组件
- 无
- 适配版本(Java)
- 1.21
- 1.20
[MD]
# SealLevel — 玩家综合等级系统
> 面向 RPG 服务器的可配置、高性能综合等级插件
> 兼容 Paper/Spigot 1.20.4 ~ 1.21.11 | Java 21 | 零依赖开箱即用
---
## ✨ 功能特性
### 🎯 核心等级系统
- **自定义经验公式** — 支持分段公式(1-20 级快速成长、21-50 级放缓、51+ 趋于平缓),内嵌 `min`/`max`/`sqrt`/`log` 等数学函数,精确控制升级曲线
- **等级上限 + 溢出存储** — 满级后经验不浪费,自动存入溢出池,开放上限后自动结算
- **分段等级覆盖** — 支持为特定等级设置固定经验值,跳过公式
### 📡 经验来源(7 种内置来源)
| 来源 | 说明 |
|------|------|
| MythicMobs 击杀 | 根据怪物 ID 独立配置经验,支持怪物等级读取 |
| 原版生物击杀 | 按实体类型配置经验 |
| PVP 击杀 | 基础经验 + 被杀玩家等级加成 |
| 方块挖掘 | 按方块类型配置经验(矿石等高价值方块) |
| 钓鱼 | 钓鱼成功获得经验 |
| 农作物收割 | 收割成熟作物获得经验 |
| 物品合成 | 合成指定物品获得经验 |
所有来源可独立开关,配置里一键启用/禁用。
### 🔄 三层倍率系统
- **全局倍率** — 通过指令热修(`/slvl multiplier global 2.0`),活动期间一键开启
- **世界倍率** — 地狱/末地等不同世界独立倍率
- **权限组倍率** — 配合 LuckPerms,VIP/MVP 等不同组享受不同倍率
- **定时倍率** — 支持一次性时间段和周期性时间段(如"每周末双倍经验"),到时间自动生效/失效
- **组合模式** — 相乘(MULTIPLY)/ 取最高(MAX)/ 相加(ADD)三选一
### 🛡️ 防刷机制
- **等级衰减** — 高等级玩家打低级怪物经验按公式递减,防止新手区刷怪
- **反 AFK** — 挂机检测,自动暂停经验获取并提示,恢复活动后自动恢复
- **死亡惩罚** — 可配比/固定值经验扣除 + 不掉级保护
### 🎁 等级奖励
- 到达指定等级后以控制台身份执行指令,支持 `%player%` 和 `%level%` 占位符
- 灵活配合 LuckPerms 给权限、给物品、全服广播等任意操作
### 🔁 转生系统
- 满级后转生,等级重置 + 永久经验加成
- 可配消耗(金币/物品)+ 阶梯奖励 + 门槛递增公式
- 完整 `PlayerPrestigeEvent` 事件,其他插件可监听
### 💎 经验倍率道具
- 玩家右键消耗品激活限时经验加成
- 支持叠加模式(取最高/相乘/相加)+ 生效数量上限
- 配合 MythicMobs 掉落加成券
### 📊 数据存储
- 默认 SQLite,零配置开箱即用
- 可选 MySQL,支持跨服数据同步
- HikariCP 连接池 + 异步 I/O,不卡主线程
- 加入加载 + 定时保存 + 退出/升级实时保存
### 🖥️ GUI 信息面板
- `/slvl` 打开 3×9 信息面板
- 玩家头颅、染色玻璃经验进度条、累计经验/转生次数展示
### 🔌 第三方联动
- **PlaceholderAPI** — 提供 `%seallevel_level%`、`%seallevel_rank%` 等 9 个变量,计分板/NPC/全息字均可调用
- **LuckPerms** — 权限组倍率自动识别
- **MythicMobs** — 怪物经验、怪物等级读取
- 所有第三方联动均作为可选软依赖,缺失时不影响核心功能
---
## 🚀 快速开始
1. 将 `SealLevel-1.0-SNAPSHOT.jar` 放入服务器 `plugins/` 目录
2. 重启服务器或使用热加载工具
3. 插件自动生成配置文件到 `plugins/SealLevel/`,已附带中文注释和示例
4. 根据需要修改配置,使用 `/slvl reload` 热重载
5. 输入 `/slvl` 查看 GUI 面板
---
## 📋 指令列表
| 指令 | 权限 | 说明 |
|------|------|------|
| `/slvl` | 无 | 打开 GUI 信息面板 |
| `/slvl info [玩家]` | 无 | 查看等级信息 |
| `/slvl top [页码]` | 无 | 查看排行榜 |
| `/slvl add <玩家> <经验>` | `seallevel.admin` | 给玩家加经验 |
| `/slvl addlevel <玩家> <等级>` | `seallevel.admin` | 给玩家加等级 |
| `/slvl set <玩家> <等级>` | `seallevel.admin` | 设置玩家等级 |
| `/slvl remove <玩家> <经验>` | `seallevel.admin` | 扣除玩家经验 |
| `/slvl multiplier global <值>` | `seallevel.admin` | 临时设置全局倍率 |
| `/slvl multiplier status` | `seallevel.admin` | 查看所有倍率状态 |
| `/slvl toggle <来源>` | `seallevel.admin` | 开关经验来源 |
| `/slvl prestige` | 无 | 执行转生 |
| `/slvl boost status` | 无 | 查看当前经验加成 |
| `/slvl reload` | `seallevel.admin` | 重载配置文件 |
别名:`/seallevel`、`/level`、`/seallv`
---
## 🔐 权限节点
| 权限 | 说明 | 默认 |
|------|------|------|
| `seallevel.admin` | 管理员指令 | OP |
| `seallevel.use` | 基础使用 | 所有人 |
---
## 📁 配置文件
| 文件 | 说明 |
|------|------|
| `config.yml` | 主配置(数据库、等级公式、倍率、衰减、死亡惩罚、通知、反AFK) |
| `sources.yml` | 经验来源定义(7 种来源 + MythicMobs 怪物经验) |
| `rewards.yml` | 等级奖励指令 |
| `boosts.yml` | 经验倍率道具定义 |
| `prestige.yml` | 转生系统配置 |
**所有配置文件都带完整中文注释和示例数据,小白服主也能轻松上手。**
---
## 📐 兼容性
| 项目 | 版本 |
|------|------|
| Java | 21 |
| Paper/Spigot | 1.20.4 ~ 1.21.11 |
| 必需依赖 | 无(零依赖) |
| 可选依赖 | PlaceholderAPI、LuckPerms、MythicMobs |
---
## 🔧 技术架构
- Java 21 + Paper API 1.20.4 编译
- 分层服务架构:config → data → level → source → ui
- HikariCP 连接池 + `CompletableFuture` 异步 I/O
- 所有模块构造函数注入,面向接口编程
- 公式引擎使用递归下降解析器,启动时预编译
- Paper `libraries` 机制自动加载运行时依赖
---
## 📦 PlaceholderAPI 变量
| 变量 | 说明 |
|------|------|
| `%seallevel_level%` | 玩家等级 |
| `%seallevel_exp%` | 当前等级经验 |
| `%seallevel_exp_needed%` | 升级所需经验 |
| `%seallevel_exp_percent%` | 升级进度百分比 |
| `%seallevel_total_exp%` | 累计总经验 |
| `%seallevel_prestige%` | 转生次数 |
| `%seallevel_rank%` | 玩家排名 |
| `%seallevel_top_name_<N>%` | 第 N 名玩家名 |
| `%seallevel_top_level_<N>%` | 第 N 名等级 |
---
## 💬 常见问题
**Q: 如何配合 MythicMobs 给不同怪物配置不同经验?**
A: 编辑 `sources.yml`,在 `mythicmobs_kill.custom` 下添加 `怪物内部ID: 经验值` 即可。插件会自动读取 MythicMobs 怪物的等级属性进行衰减计算。
**Q: 周末双倍经验活动怎么配置?**
A: 在 `config.yml` 的 `multipliers.schedules` 中添加:
```yaml
- time: "SAT ~ SUN 00:00 ~ 23:59"
targets: [global]
value: 2.0
```
**Q: 升级后想给玩家发东西怎么办?**
A: 编辑 `rewards.yml`,比如 10 级奖励一把钻石剑:`10: ["give %player% diamond_sword 1"]`
**Q: 等级经验太多了该怎样控制?**
A: 设置 `max_exp_per_level` 为合理上限值(如 10000),配合分段公式 + `min()` 函数兜底。
**Q: 物品穿戴等级限制怎么弄?**
A: SealLevel 不做物品限制,但提供了 `%seallevel_level%` 变量。你的属性插件或物品限制插件调用这个变量判断是否满足穿戴条件即可,符合单一职责原则。
---
**SealLevel — 让等级系统变得简单** 🔥
[/MD]