- 版权类型
- 原创
- 插件中文名称
- 会员时长叠加助手(MyVIP)
- 插件英文名称
- MyVIP
- 原帖地址
- #
- 支持的核心(服务端)
- Paper
- Folia
- Purpur
- 语言支持
- 中文(简体)
- 前置组件
- LuckPerms - https://luckperms.net/download
- 适配版本(Java)
- 26.x
- 1.21
- 1.20
[MD]
## 正文
### 插件简介
MyVIP 是一个**会员时长管理助手**。它不创建自己的权限组,而是直接对接服务器已有的 **LuckPerms**:你只需告诉它"给谁、哪个组、加多久",它负责**自动计算到期时间**(续费 = 剩余时长 + 新购时长)并把结果写入 LuckPerms 临时组(等价于 `lp user <玩家> parent addtemp <组> <总时长>`),到期由 LuckPerms 自动移除权限。
### 插件功能描述
- **续费自动叠加**:玩家剩 10 天 mvp,再买 1 个月 → 自动变成 1 个月 10 天,不用等到期重买,也不会因为续费丢失剩余时间
- **只算临时组**:以 LuckPerms 现有临时组剩余为叠加基准;玩家本来就永久拥有该组时会智能提示"已是永久组,本次续费 X",不产生无意义的临时节点
- **加、减、删、查全覆盖**:`give` 授予/续费、`reduce` 扣减时长(减到 0 自动移除会员组)、`remove` 移除、`time` 查询剩余时长
- **控制台 / 游戏内均可执行**:所有命令服务器控制台直接可用,适合后台批量操作
- **全指令 Tab 补全**:自动按输入前缀过滤候选(输入 `v` 只显示 `v` 开头的候选),玩家名 / 组名 / 时长均有补全
- **数据以 LuckPerms 为权威**:通过 LuckPerms API 直接读写,与 `lp` 命令操作结果完全一致,可查询到你手动用 lp 命令添加的所有临时组
- **到期自动失效**:临时组到期由 LuckPerms 自动移除,本插件定时清理本地记录并提醒在线玩家
- **提示美观简洁**:✔/✘ 状态符号、一行式公式反馈(`10分钟 + 5分钟 = 15分钟`)
- **配置全面可配置**:所有提示消息、Tab 补全候选、同步开关均可在 config.yml 修改;旧配置升级自动补齐缺失项,无需手动删档
- **原生兼容 Folia**:`folia-supported: true`,所有调度走全局调度器,不卡 TPS
### 目标用户及用途
- 使用 LuckPerms 权限组的 Minecraft 服务器服主 / 管理员
- 有会员 / VIP 售卖、续费业务的商业服务器
- 运行 Folia / DeerFolia 等分区线程核心的服务器(普通 Paper / Purpur 同样支持)
### 支持的版本与服务端核心
- 服务端核心:Paper / Purpur / Folia / DeerFolia(已在 Folia 26.2 环境验证)
- Minecraft 版本:1.20+(API 层面兼容)
- 前置插件:LuckPerms(必须)
### 是否付费
本插件**完全免费**。
### 命令列表
| 命令 | 说明 |
| --- | --- |
| `/myvip give <玩家> <组> <时长>` | 授予 / 续费(剩余时间自动叠加) |
| `/myvip reduce <玩家> <组> <时长>` | 扣减时长(减到 0 自动移除会员组) |
| `/myvip remove <玩家> <组>` | 移除会员组 |
| `/myvip time [玩家] [组]` | 查看剩余时长(可查指定组) |
| `/myvip reload` | 重载配置 |
别名:`/vip`、`/member`、`/svip`
时长格式:`1d`(1天)、`30d`(30天)、`1M`(1个月=30天)、`1h`(1小时)、`30m`(30分钟)、`1w`(1周)、`1y`(1年),支持组合如 `1M10d`
### 权限列表
| 权限 | 默认 | 说明 |
| --- | --- | --- |
| `myvip.admin` | OP | 使用 give / reduce / remove / reload |
| `myvip.time` | 所有人 | 查看自己的会员时长 |
| `myvip.time.others` | 无 | 查看其他玩家的会员时长 |
### 配置文件
`plugins/myvip/config.yml`:
- **settings 段**:`sync-luckperms`(是否同步 LuckPerms)、`check-interval-minutes`(到期检查间隔)、`expire-message`(到期提醒消息,支持 {group})、`log-luckperms-commands`(日志开关)、`notify-player`(操作时是否通知在线玩家本人)
- **messages 段**:全部提示消息模板,支持 `&` 颜色代码与占位符 `{player} {group} {duration} {add} {old} {new} {sub} {value}`
- **groups.suggestions / durations.suggestions**:Tab 补全候选列表
更新插件后旧配置文件会自动补齐缺失项(自动合并默认配置),无需手动删除重生成。
### 使用教程
1. 安装 LuckPerms 并确认正常启动
2. 将 `myvip.jar` 放入 `plugins` 目录,重启服务器
3. (可选)编辑 `plugins/myvip/config.yml` 后执行 `/myvip reload` 生效
4. 常用示例:
- 给 Steve 开通 1 个月 mvp:`/myvip give Steve mvp 1M`
- Steve 剩余 10 天时续费 1 个月:再次执行 `/myvip give Steve mvp 1M` → 自动叠加为 1 个月 10 天
- 扣减 5 天:`/myvip reduce Steve mvp 5d`
- 移除会员组:`/myvip remove Steve mvp`
- 查询剩余:`/myvip time Steve`
5. 以上全部命令均可在服务器控制台直接执行
### 工作原理(为什么不会出错)
- **读取**:从 LuckPerms API 读取玩家该组临时节点及到期时间;同组多个临时节点取到期最晚者(兼容历史 `addtemp` 残留)
- **计算**:续费 = LuckPerms 现有剩余 + 新购时长
- **写入**:通过 LuckPerms API 先清除该组旧临时节点、再写入总时长(避免 `addtemp` 双节点导致权限组只显示旧时长的问题)
- 本地 `players.yml` 仅作离线兜底缓存,不是权威数据源
### 截图
[/MD]

qq:746315616
### 更新日志
- **v1.4.1**:配置自动补齐——旧 config.yml 升级自动合并缺失的新配置项,`/myvip reload` 同样生效
- **v1.4.0**:续费判定只算临时组(永久组不参与叠加);本来永久拥有该组的玩家自动提示续费时长;全部提示消息与补全候选可配置
- **v1.3.0**:新增永久组检测——玩家本来就永久拥有该组时提示"本次续费 X(特权长期有效)"
- **v1.2.0**:新增 `reduce` 扣减命令(减到 0 自动移除会员组);提示消息全面美化
- **v1.1.1**:修复 `addtemp` 双节点导致叠加失效的问题,改用 LuckPerms API 直接读写
- **v1.1.0**:接入 LuckPerms API,组名按 LuckPerms 已加载组读取
- **v1.0.1**:全指令 Tab 补全(按前缀过滤)
- **v1.0.0**:基础版本(give / remove / time / reload + config.yml)
[/MD]

qq:746315616
### 更新日志
- **v1.4.1**:配置自动补齐——旧 config.yml 升级自动合并缺失的新配置项,`/myvip reload` 同样生效
- **v1.4.0**:续费判定只算临时组(永久组不参与叠加);本来永久拥有该组的玩家自动提示续费时长;全部提示消息与补全候选可配置
- **v1.3.0**:新增永久组检测——玩家本来就永久拥有该组时提示"本次续费 X(特权长期有效)"
- **v1.2.0**:新增 `reduce` 扣减命令(减到 0 自动移除会员组);提示消息全面美化
- **v1.1.1**:修复 `addtemp` 双节点导致叠加失效的问题,改用 LuckPerms API 直接读写
- **v1.1.0**:接入 LuckPerms API,组名按 LuckPerms 已加载组读取
- **v1.0.1**:全指令 Tab 补全(按前缀过滤)
- **v1.0.0**:基础版本(give / remove / time / reload + config.yml)
[/MD]