- 版权类型
- 原创
- 插件中文名称
- 鲸鱼模型衣橱
- 插件英文名称
- JYModelWardrobe
- 原帖地址
- #
- 支持的核心(服务端)
- Spigot
- Paper
- 语言支持
- 中文(简体)
- 适配版本(Java)
- 1.12
[MD]
# 🐋 鲸鱼模型衣橱 | JYModelWardrobe
> **售前一句话**:基于 DragonCore 模型系统的 Minecraft 1.12.2 变身插件——物品触发、权限控制、经济收费、冷却管理、属性加成、魅力值、限时模型、每日试用、模型羁绊、MythicMobs 按键技能、GUI 界面,一套配置打通从"玩家收集模型"到"长期运营变现"的全链路生态。
---
## 1. 产品定位
| 项目 | 内容 |
|---|---|
| 插件名称 | **JYModelWardrobe / 鲸鱼模型衣橱** |
| 适配版本 | **Minecraft 1.12.2** |
| 标准价格 | **118RMB** |
| 核心价值 | 将模型变身从"放个指令"升级为"收集 + 限时 + 羁绊 + 收费 + 属性 + 按键技能"的可运营经济系统 |
| 交付亮点 | DragonCore 贴图 UI 衣橱 + 展示衣橱 + 搜藏排行榜 + 自动配置部署 |
---
## 2. 适用场景
- **RPG / 生存 / 模组服务器**:让玩家通过收集不同模型获得外观、属性和羁绊加成。
- **付费变现**:通过魅力值排行榜、限时模型、每日试用驱动玩家付费,形成"试用→喜欢→购买→收集羁绊"的转化链。
- **经济回收**:变身费用、冷却重置、模型到期续费等功能为服务器经济系统提供稳定消耗出口。
- **战斗增强**:结合 AttributePlus 属性加成和 MythicMobs 按键技能,让变身不仅是外观,更是实力的提升。
- **玩家社交**:衣橱展示功能让玩家互相展示收集成果,提升社交互动和长期留存。
- **大型跨服网络**:支持 MySQL 存储 + BungeeCord,多服数据共享。
---
## 3. 功能全景
| 功能模块 | 可以怎么讲 | 给服主带来的价值 |
|---|---|---|
| 🎭 模型变身 | 基于 DragonCore 模型系统,支持任意模型+动画 | 直接接入现有模型资源,零学习成本 |
| 🖥️ DragonCore GUI 衣橱 | 4 套龙核贴图 GUI(主衣橱/展示衣橱/排行榜/展示文本框) | 玩家操作直观,降低教学成本 |
| ✨ 模型预览 | 预览模型效果,支持粒子特效和音效,冻结玩家,已拥有模型禁止预览 | 让玩家先看后买,提升购买转化 |
| 💰 经济收费 | 支持 Vault 金币 / PlayerPoints 点券双货币 | 为经济系统提供稳定消耗点 |
| ⏱️ 冷却管理 | 全局冷却 / 单模型冷却 / 冷却共享组三级体系 + 冷却结束提醒 | 精细控制变身频率,防止滥用 |
| 🩸 血量修改 | 变身后 SET/ADD/MULTIPLY 三种模式修改血量上限 | 配合属性系统打造不同战斗流派 |
| ⚔️ 属性加成 | 变身后通过 AttributePlus 增加/减少属性 | 把变身从"外观"升级为"战力" |
| 💎 魅力值系统 | 每个模型可配置魅力值,总和形成玩家魅力排名 | 驱动玩家收集全部模型,延长生命周期 |
| ⏳ 限时模型 | 支持限时给予,到期自动收回+上线检查 | 可运营限时活动、节日限定、付费租赁 |
| 🎁 每日试用 | 每日免费试用指定模型,自动分配/到期收回,可配置试用是否计入魅力值 | 零成本体验驱动付费转化 |
| 🔗 模型羁绊 | 收集特定模型组合触发羁绊等级,升级/降级自动处理+属性同步 | 把"散装模型"变成"成套收集",提升收集欲 |
| 🔑 按键技能 | DragonCore 按键绑定 + MythicMobs 技能释放(按键按下/松开独立配置) | 变身状态也能释放技能,战斗体验拉满 |
| 🎯 物品触发 | 右键匹配物品自动变身,支持 EXACT/FUZZY 匹配,耐久消耗+物品消耗 | 用物品作为变身媒介,适配 RPG 道具生态 |
| 🛡️ 世界黑名单 | 指定世界禁止变身,跨世界自动解除 | 主城、副本、竞技场分区治理 |
| 🚦 速率限制 | 防刷机制,限制每分钟最大变身次数+临时黑名单 | 防止玩家快速切换模型导致卡顿 |
| 📊 数据统计 | 全服变身统计、热门模型排行(Top 5)、玩家变身次数 | 运营数据可视化,辅助决策 |
| 👔 衣橱展示 | 玩家互相展示已拥有的模型收集(聊天点击打开 DragonCore GUI 衣橱) | 社交炫耀驱动收集,制造"别人有我也有" |
| 🔐 权限联动 | give 时自动追加权限节点,take 时自动移除,支持 Vault Permission | 无需手动配置权限,减少运维成本 |
| 📝 全消息自定义 | 60+ 条消息全部可自定义,支持颜色代码和 PAPI 变量 | 完美适配服务器风格 |
| 🌍 Multiverse 联动 | 自动识别多世界,Tab 补全+世界验证 | 跨服/BungeeCord 场景完美兼容 |
| 🔄 DragonCore GUI 热同步 | GuiConfig/ 文件修改后自动同步到 DragonCore/Gui/ 并重载(5 秒检测间隔) | 修改配置无需重启服务器 |
| 🚨 启动安全检测 | 自动检测重复模型 ID 并告警 | 防止配置错误导致的运行时问题 |
| 🔍 GUI 搜索筛选 | 支持模型关键词搜索 + 品质筛选 + 已拥有/全部模型切换 | 大量模型时快速定位目标 |
| 💾 筛选缓存 | 版本号驱动的 GUI 筛选缓存,模型变更时自动失效 | 减少重复计算,提升 GUI 响应速度 |
| 📋 自动变量参考 | 首次启动自动生成 placeholders.yml 变量参考文件 | 方便服主查阅所有 PAPI 变量 |
---
## 4. 前置插件
> - **DragonCore**(必选,模型系统核心)
> - **PlaceholderAPI**(必选,变量支持)
> - **Vault**(必选,金币经济+权限管理)
> - **PlayerPoints**(必选,点券经济)
> - **Multiverse-Core**(必选,多世界联动)
> - **AttributePlus**(可选,属性加成)
> - **MythicMobs**(可选,按键技能释放)
> **注意**:Vault、PlayerPoints、Multiverse-Core 在 plugin.yml 声明为硬依赖(`depend`),但代码层会检测插件是否存在,缺失时仅跳过对应功能,不会导致插件崩溃。
---
## 5. 配置文件
<details>
<summary>点击展开/收起全局配置文件(config.yml)</summary>
```yaml
# ================================================================
# 鲸鱼模型衣橱 (JYModelWardrobe) 全局配置文件
# ================================================================
# 主指令: /jywardrobe (别名: /wardrobe, /tf)
# 权限前缀: jywardrobe.*
# ================================================================
# 插件默认会在首次启动时自动生成此文件
# 修改后使用 /jywardrobe reload 重载配置
# ================================================================
# ================================================================
# 数据存储配置
# ================================================================
Storage:
# 存储类型: "yaml" / "mysql" / "sqlite"
type: yaml
mysql:
host: "localhost"
port: 3306
database: "minecraft"
username: "root"
password: "password"
maxconnections: 10
properties:
- "useSSL=false"
- "useUnicode=true"
- "characterEncoding=utf8"
sqlite:
file: "data.db"
# ================================================================
# 基础设置
# ================================================================
GlobalCooldown: 10
PreviewDuration: 3
PreviewFreeze: false
# ================================================================
# 品质系统
# ================================================================
Quality:
colors:
"普通": "&f"
"稀有": "&b"
"史诗": "&d"
"传说": "&6"
"神话": "&c"
default: "普通"
# ================================================================
# 魅力值系统
# ================================================================
Charm:
rankingRefreshInterval: 5 # 排行榜刷新间隔(分钟)
maxRank: 100 # 排行榜显示人数
emptyRankText: "暂无"
rankingTitle: "&6&l魅力排行榜"
# ================================================================
# 限时模型到期检查
# ================================================================
ExpiryCheck:
enabled: true
interval: 60 # 检查间隔(秒)
message: "&c你的模型 &e%model% &c已过期,已被移除!"
# ================================================================
# 展示系统
# ================================================================
Showcase:
requestTimeout: 30 # 展示请求超时(秒)
# ================================================================
# 每日免费试用
# ================================================================
DailyTrial:
enabled: true
dailyCount: 3 # 每日可供试用的模型数量
models:
- "变身卷轴"
- "小黄人"
- "变身水晶"
expireMessage: "&e今日免费试用模型 &c%model% &e已到期!"
guiTag: "&a[今日免费]"
charmFromTrial: false # 试用模型是否计入魅力值
# ================================================================
# 世界黑名单
# ================================================================
BlacklistWorlds:
- "world_nether"
# ================================================================
# 防滥用设置
# ================================================================
MaxTransformsPerMinute: 0 # 0=关闭
RateLimitBlacklistDuration: 60 # 超限临时黑名单时长(秒)
RateLimitExempt: "jywardrobe.ratelimit.exempt"
# ================================================================
# 冷却共享设置
# ================================================================
CooldownSharing: false
CooldownWarning: true # 冷却即将结束提醒
CooldownWarningSeconds: 5 # 提前N秒提醒
# ================================================================
# 变身渐变设置
# ================================================================
FadeTransition: false
FadeTransitionTicks: 20
# ================================================================
# 变身展示设置
# ================================================================
ShowDuration: 5 # 展示持续时间(秒)
ShowRadius: 30 # 展示广播半径(格)
# ================================================================
# 音效设置
# ================================================================
DefaultTransformSound: "ENTITY_PLAYER_LEVELUP:1.0:1.0"
DefaultUntransformSound: "ENTITY_FIREWORK_ROCKET_BLAST:1.0:0.8"
# ================================================================
# 血量安全设置
# ================================================================
MinHealthLimit: 1.0
MaxHealthLimit: 2048.0
# ================================================================
# DragonCore GUI 集成
# ================================================================
DragonCoreGuiEnabled: true
# ================================================================
# 按键绑定配置
# ================================================================
KeyBind:
enabled: true
mythicSkillEnabled: true
keys:
R:
permission: "jywardrobe.key.r"
cooldown: 5
cooldownMessage: "&c按键冷却中,还需等待 %time% 秒!"
conditions:
- "%player_level%,>=10,等级不足10级无法使用快捷变身!"
commands:
- "[player]jywardrobe random"
releaseCommands: []
override: true
mythicSkill: "龙息"
mythicSkillPower: 1.0
G:
permission: "jywardrobe.key.g"
cooldown: 3
cooldownMessage: "&c按键冷却中,还需等待 %time% 秒!"
conditions: []
commands:
- "[player]jywardrobe off"
releaseCommands: []
override: true
```
</details>
<details>
<summary>点击展开/收起模型配置文件(transforms/*.yml)</summary>
```yaml
# ===== 模型配置示例 =====
Transforms:
小黄人:
model: "小黄人" # DragonCore 模型名称(必填)
name: "&e小黄人" # 展示名称(可选,支持颜色代码 &)
permission: "jywardrobe.小黄人" # 变身所需权限节点(可选)
cooldown: 30 # 单模型冷却(秒):-1=全局 / 0=无冷却 / 正数=独立冷却
animation: "" # 变身时播放的动画名(可选)
message: "&a你已变身为 &e小黄人&a!" # 变身成功提示消息(可选)
duration: 0 # 变身持续时间(秒):0=永久 / 正数=限时
cost: 0 # 变身费用:0=免费 / 正数=所需金额
economy: "vault" # 经济系统类型:vault / playerpoints
refund: 0 # 取消变身返还比例(0.0 ~ 1.0)
transformEffect: "" # 变身/动画/取消变身粒子特效
animationEffect: ""
untransformEffect: ""
cooldownGroup: "" # 冷却共享组名(需 config.yml 开启 CooldownSharing)
transformSound: "" # 变身/取消变身音效
untransformSound: ""
healthModifier: 0 # 血量修改值
healthMode: "SET" # 血量修改模式:SET / ADD / MULTIPLY
attributes: [] # AttributePlus 属性加成(需安装 AttributePlus)
desc: [] # 模型描述(可选,支持颜色代码 &)
triggerItem: # 触发变身的物品配置(可选)
match: "EXACT" # 匹配模式:EXACT / FUZZY
name: ""
lore: []
durability: 0 # 每次使用消耗的耐久度
consume: false # 是否消耗物品
allowCommand: true # 是否允许指令变身
quality: "普通" # 品质:普通/稀有/史诗/传说/神话
charm: 30 # 魅力值(默认0)
bondGroup: "萌系联盟" # 羁绊组(可选,留空=不属于任何羁绊组)
```
</details>
<details>
<summary>点击展开/收起模型羁绊配置(bonds.yml)</summary>
```yaml
# ================================================================
# 模型羁绊配置 (bonds.yml)
# ================================================================
# 什么是羁绊?
# 当玩家同时拥有某个羁绊组下的多个模型时,自动激活羁绊效果。
# 收集更多模型 → 升级羁绊等级 → 获得更强属性+奖励。
# 收集不足时 → 自动降级羁绊等级。
# ================================================================
Bonds:
五元素:
displayName: "&6五元素之力"
description: "集齐五行元素模型,触发远古力量"
levels:
1:
need: 2
displayName: "&e五元素·初觉"
commands:
- "[console]give %player% diamond 5"
- "[console]msg %player% &6你触发了五元素·初觉羁绊!"
attributes:
- "物理伤害: +20"
- "生命上限: +100"
2:
need: 3
displayName: "&c五元素·觉醒"
commands:
- "[console]give %player% diamond 10"
- "[console]msg %player% &c你触发了五元素·觉醒羁绊!"
attributes:
- "物理伤害: +50"
- "生命上限: +200"
- "暴击率: +5(%)"
3:
need: 5
displayName: "&d&l五元素·圆满"
commands:
- "[console]give %player% nether_star 1"
- "[console]msg %player% &d&l你触发了五元素·圆满羁绊!远古力量降临!"
attributes:
- "物理伤害: +100"
- "生命上限: +500"
- "暴击率: +10(%)"
- "防御力: +50"
萌系联盟:
displayName: "&d萌系联盟"
description: "收集萌系模型,萌即是正义"
levels:
1:
need: 2
displayName: "&d萌系·初萌"
commands:
- "[console]give %player% cookie 16"
attributes:
- "移动速度: +0.05"
2:
need: 4
displayName: "&d萌系·超萌"
commands:
- "[console]give %player% golden_apple 3"
attributes:
- "移动速度: +0.1"
- "生命上限: +50"
```
</details>
---
## 6. 插件指令
| 指令 | 说明 | 权限 |
|---|---|---|
| `/jywardrobe` | 打开帮助菜单 | 无 |
| `/jywardrobe open` | 打开衣橱主界面 GUI | 无 |
| `/jywardrobe use <模型ID>` | 变身为指定模型 | 模型对应权限 |
| `/jywardrobe off` | 解除变身 | 无 |
| `/jywardrobe random` | 随机变身为一个可用的模型 | 无 |
| `/jywardrobe preview <模型ID>` | 预览模型效果(可配置冻结玩家,已拥有模型禁止预览) | jywardrobe.preview |
| `/jywardrobe show` | 在周边广播当前变身模型 | jywardrobe.show |
| `/jywardrobe showcase <玩家>` | 发起衣橱展示请求(聊天点击接受打开 DragonCore GUI) | jywardrobe.showcase |
| `/jywardrobe showcase accept <请求ID>` | 接受衣橱展示请求 | 无 |
| `/jywardrobe charm` | 查看自己的魅力值 | jywardrobe.charm |
| `/jywardrobe charmtop` | 打开魅力排行榜 GUI | 无 |
| `/jywardrobe search <关键词>` | 搜索模型(模型ID和展示名双匹配) | 无 |
| `/jywardrobe list` | 查看所有可用模型列表 | 无 |
| `/jywardrobe reload` | 重载所有配置文件(含羁绊、按键、GUI 筛选缓存) | jywardrobe.admin |
| `/jywardrobe give <玩家> <模型> [时间]` | 给予玩家模型,可选限时(自动加权限) | jywardrobe.admin |
| `/jywardrobe take <玩家> <模型>` | 移除玩家模型(自动移除权限,支持离线玩家) | jywardrobe.admin |
| `/jywardrobe resetmodel <玩家>` | 清空玩家全部模型数据(支持离线玩家) | jywardrobe.admin |
| `/jywardrobe <玩家> <模型/off>` | 强制变身为指定模型/强制取消(支持 -d 参数指定持续时间) | jywardrobe.admin |
| `/jywardrobe all <模型>` | 全服强制变身(含提示+统计人数,跳过黑名单世界和已变身玩家) | jywardrobe.admin |
| `/jywardrobe reset <玩家> [模型]` | 重置冷却(指定模型或全部) | jywardrobe.admin |
| `/jywardrobe blacklist add/remove/list <世界>` | 管理世界黑名单(add 支持 Multiverse 世界 Tab 补全) | jywardrobe.admin |
| `/jywardrobe stats` | 查看全服变身统计(总次数+Top 5 模型+在线变身人数) | jywardrobe.admin |
| `/jywardrobe status <玩家>` | 查看玩家当前变身状态详情 | jywardrobe.admin |
| `/jywardrobe charm <玩家>` | 查看其他玩家魅力值(支持离线玩家) | jywardrobe.admin |
**给予限时模型的时间格式**:
| 格式 | 含义 | 示例 |
|---|---|---|
| `Xd` | X 天 | `30d` = 30天 |
| `Xh` | X 小时 | `24h` = 24小时 |
| `Xm` | X 分钟 | `60m` = 60分钟 |
| `Xs` | X 秒 | `3600s` = 3600秒 |
| `Xy` | X 年 | `1y` = 1年 |
| `Xmo` | X 月 | `3mo` = 3个月 |
| 组合 | 多个组合 | `1y3mo15d` = 1年3月15天 |
---
## 7. 权限节点
| 权限节点 | 说明 | 默认值 |
|---|---|---|
| jywardrobe.admin | 管理员权限(所有管理指令) | op |
| jywardrobe.* | 允许使用所有变身模型 | op |
| jywardrobe.preview | 允许使用模型预览功能 | 玩家 |
| jywardrobe.show | 允许使用变身展示功能 | 玩家 |
| jywardrobe.showcase | 允许使用衣橱展示功能 | 玩家 |
| jywardrobe.charm | 允许查看魅力值和排行榜 | 玩家 |
| jywardrobe.ratelimit.exempt | 频率限制豁免 | op |
| jywardrobe.key.* | 允许使用所有按键绑定 | op |
| jywardrobe.key.\<按键\> | 允许使用指定按键绑定(如 R、G) | op |
> **注意**:模型的个体权限(如 `jywardrobe.小黄人`)在模型配置 `transforms/*.yml` 的 `permission` 字段中定义,`/jywardrobe give` 时通过 Vault Permission 自动赋予。
---
## 8. PlaceholderAPI 变量
插件标识符:`jywardrobe`
**基础变身变量**:
| 变量 | 说明 |
|---|---|
| `%jywardrobe_model%` | 当前变身的模型 ID |
| `%jywardrobe_cooldown%` | 全局冷却剩余秒数 |
| `%jywardrobe_cooldown_<模型>%` | 指定模型的冷却剩余秒数 |
| `%jywardrobe_cooldown_group%` | 当前变身模型所属的冷却共享组名 |
| `%jywardrobe_duration%` | 当前变身剩余持续时间(秒) |
**血量变量**:
| 变量 | 说明 |
|---|---|
| `%jywardrobe_health_max%` | 当前血量上限(变身修改后,整数) |
| `%jywardrobe_health_original%` | 原始血量上限(整数) |
| `%jywardrobe_health_change%` | 血量变动值(整数,正数=增加) |
| `%jywardrobe_health_modified%` | 血量是否被修改过(true/false) |
**属性变量**:
| 变量 | 说明 |
|---|---|
| `%jywardrobe_attribute%` | 当前模型属性源的名称 `JYModelWardrobe_<模型ID>` |
| `%jywardrobe_has_attribute%` | 当前模型是否配有属性(true/false) |
| `%jywardrobe_Attribute_<模型>%` | 指定模型的属性列表(注意首字母大写 A,多行输出) |
**经济变量**:
| 变量 | 说明 |
|---|---|
| `%jywardrobe_cost_<模型>%` | 指定模型的变身费用 |
**收集统计**:
| 变量 | 说明 |
|---|---|
| `%jywardrobe_model_count%` | 玩家已拥有的模型总数 |
| `%jywardrobe_stats_total%` | 服务器总变身次数 |
| `%jywardrobe_stats_top%` | 最热门的变身模型 |
| `%jywardrobe_stats_player%` | 当前玩家的总变身次数 |
**魅力值变量**:
| 变量 | 说明 |
|---|---|
| `%jywardrobe_charm%` | 当前玩家总魅力值 |
| `%jywardrobe_charm_<模型>%` | 指定模型的魅力值 |
| `%jywardrobe_charm_rank_<N>%` | 魅榜第 N 名玩家名 |
| `%jywardrobe_charm_rank_<N>_value%` | 魅榜第 N 名的魅力值 |
**品质变量**:
| 变量 | 说明 |
|---|---|
| `%jywardrobe_quality_<模型>%` | 指定模型的品质(颜色+名称) |
| `%jywardrobe_quality_color_<模型>%` | 指定模型的品质颜色代码 |
| `%jywardrobe_quality_name_<模型>%` | 指定模型的品质名称(纯文本) |
| `%jywardrobe_quality_list_count%` | 品质种类总数 |
| `%jywardrobe_quality_list_all%` | 全部品质(颜色+名称),用 &7, 分隔 |
| `%jywardrobe_quality_list_color_<N>%` | 第 N 个品质的纯颜色代码 |
| `%jywardrobe_quality_list_name_<N>%` | 第 N 个品质的纯名称 |
| `%jywardrobe_quality_list_<N>%` | 第 N 个品质(颜色+名称) |
**限时模型变量**:
| 变量 | 说明 |
|---|---|
| `%jywardrobe_expire_<模型>%` | 指定模型的到期时间(可读格式:如"3天12小时") |
**试用相关变量**:
| 变量 | 说明 |
|---|---|
| `%jywardrobe_trial_today%` | 今日免费试用模型列表(逗号分隔) |
| `%jywardrobe_trial_count%` | 今日免费试用模型数量 |
| `%jywardrobe_trial_claimed%` | 当前玩家今日已领取的试用模型数 |
**羁绊相关变量**:
| 变量 | 说明 |
|---|---|
| `%jywardrobe_bond_active%` | 当前已激活的羁绊列表(逗号分隔) |
| `%jywardrobe_bond_level_<羁绊组>%` | 指定羁绊组的当前等级 |
| `%jywardrobe_bond_name_<羁绊组>%` | 指定羁绊组当前等级的名称 |
| `%jywardrobe_bond_count_<羁绊组>%` | 已拥有的该组模型数量 |
| `%jywardrobe_bond_total_<羁绊组>%` | 该组模型总数 |
| `%jywardrobe_bond_need_<组>_<等级>%` | 指定等级需要的模型数量 |
---
## 9. 数据存储
### 9.1 存储类型
支持三种存储类型,通过 `config.yml` 中的 `Storage.type` 切换:
| 类型 | 配置值 | 适用场景 |
|---|---|---|
| 本地 YAML | `yaml` | 小型服务器,单机运行 |
| MySQL | `mysql` | 大型服务器,多端 BungeeCord |
| SQLite | `sqlite` | 中型服务器,无需外部数据库 |
### 9.2 玩家数据格式
每个玩家数据包含:
- 已拥有的模型列表(含每个模型的到期时间戳 `expireAt` 和给予时间戳 `grantedAt`)
- 冷却数据持久化(服务器重启/玩家重连后保留)
- 试用领取记录(`dailytrial.yml`,独立文件存储,7 天历史自动清理)
---
## 10. 功能详解
### 10.1 三级冷却体系
冷却系统按优先级从高到低检查:
```
判断顺序: 冷却豁免权限 → 单模型冷却(>0) → 全局冷却 → 冷却共享组
```
| 模型 cooldown 值 | 行为 |
|---|---|
| `-1` | 使用 `GlobalCooldown`(全局冷却) |
| `0` | 无冷却 |
| `正数` | 独立冷却 |
| — | 若设置了 `cooldownGroup` 且开启了 `CooldownSharing`,同组所有模型共享一个冷却 |
此外还支持:
- **冷却倒计时提醒**(CooldownWarning):冷却结束前 N 秒(可配置 `CooldownWarningSeconds`)自动发送提醒消息
- **冷却持久化**:冷却状态保存到硬盘文件,服务器重启/玩家重连后保留
- **冷却清理**:每 60 秒定时清理过期冷却数据,防止内存泄漏
- **管理员重置**:`/jywardrobe reset <玩家> [模型]` 可重置单个或全部冷却
### 10.2 魅力值系统
每个模型可在 `transforms/*.yml` 中通过 `charm` 字段指定魅力值。玩家拥有的所有模型的魅力值之和即为总魅力值。
| 特性 | 说明 |
|---|---|
| 累计规则 | 已拥有的所有模型魅力值之和 |
| 试用排除 | `charmFromTrial: false` 时试用模型不计入魅力值 |
| 排行榜 | 定时异步刷新(可配置间隔和显示人数) |
| 缓存机制 | 模型到期时自动清除缓存,避免脏数据 |
| PAPI 支持 | 完整支持计分板/称号系统调用 |
| GUI 排行 | DragonCore GUI 排行榜(分页显示,每页 10 条) |
### 10.3 模型羁绊系统(双向升级/降级)
当玩家同时拥有某个羁绊组下的多个模型时,自动激活对应等级的羁绊效果:
| 行为 | 触发时机 |
|---|---|
| **升级** | 给予/获得新模型时,检查是否达到更高等级的 `need` 数量 |
| **降级** | 移除模型时,检查是否不足当前等级的 `need` 数量,自动降至匹配等级 |
| 属性应用 | 使用 AttributePlus API,源名格式:`JYModelWardrobe_Bond_组名_等级` |
| 指令执行 | 支持 `[console]` / `[op]` / `[player]` 前缀 |
| 消息通知 | 升级/降级时自动发送配置消息 |
> 升级和降级都自动处理,无需服主手动干预。收集不足→自动降级→属性同步移除。
### 10.4 限时模型系统
通过 `/jywardrobe give <玩家> <模型> <时间>` 给予限时模型:
- 到期自动移除并通知玩家
- 支持多种时间格式组合(如 `30d`、`7d12h`、`1y3mo15d`、`2h30m`、`3600s`)
- 定时检查任务(可配置间隔,默认 60 秒)
- **玩家上线即时检查**——不让玩家"卡着已过期的模型"
- 数据持久化,重启后也正常处理
### 10.5 每日免费试用
| 特性 | 说明 |
|---|---|
| 刷新时间 | 每天凌晨 0:00 自动刷新模型池 |
| 分配机制 | **玩家登录时自动分配**试用模型,无需手动领取 |
| 到期时间 | 当天 23:55 开始检查到期,23:59:59 前全部收回 |
| 领取记录 | 持久化到 `dailytrial.yml` 文件,防止反复领取 |
| 历史清理 | 7 天前的试用记录自动清除 |
| 标签标识 | GUI 中显示 `&a[今日免费]` 标识 |
| 魅力值控制 | 可配置试用模型是否计入魅力值 `charmFromTrial` |
### 10.6 血量修改系统
变身后自动修改玩家血量上限,取消变身时恢复原值:
| 模式 | 说明 | 示例 |
|---|---|---|
| `SET` | 将血量上限设为指定值 | `healthModifier: 50` → 血量上限=50 |
| `ADD` | 在原始血量基础上增减 | `healthModifier: -10` → 血量上限=原始-10 |
| `MULTIPLY` | 按倍率修改 | `healthModifier: 2.0` → 血量上限=原始×2 |
安全保护:`MinHealthLimit: 1.0` / `MaxHealthLimit: 2048.0` 防止极端值。
### 10.7 按键技能系统
基于 DragonCore 按键系统,支持:
| 特性 | 说明 |
|---|---|
| 按键绑定 | 支持 R、G、F 等任意可绑定按键 |
| 按下/松开 | 分别配置按下和松开时执行的指令 |
| 冷却 | 独立于变身冷却,每个按键独立 |
| 条件检查 | PAPI 表达式条件(`%player_level%,>=10,提示文字`) |
| MM 技能释放 | **MythicMobs 技能**,兼容 4.1.x(原生 API)和 4.5.x+(反射兼容) |
| 指令执行器 | `[console]` 控制台 / `[op]` OP 权限 / `[player]` 玩家执行 |
| 按键覆写 | 支持拦截原版按键功能(如覆写 R 键默认行为) |
| 技能威力 | 可配置 `mythicSkillPower` 倍率 |
### 10.8 物品触发变身体系
```
右键点击匹配物品 → 检查权限/冷却/收费/条件 → 变身(可选消耗物品)
```
| 匹配模式 | 说明 |
|---|---|
| `EXACT` | 完全匹配物品显示名(含颜色代码) |
| `FUZZY` | 模糊匹配物品名(仅匹配字符,忽略颜色) |
额外控制:
- `durability`:每次使用消耗的耐久度
- `consume`:是否消耗整个物品
- `allowCommand`:设置为 `false` 时只能通过右键物品触发,禁止 `/jywardrobe use` 指令
### 10.9 玩家生命周期管理
插件自动处理各种玩家事件,无需服主操心:
| 事件 | 插件处理 |
|---|---|
| **玩家加入** | 从存储加载冷却、检查到期模型、自动分配每日试用、**清理 GUI 缓存**(防止脏数据) |
| **玩家退出** | 清理预览状态、清理按键冷却、保存冷却数据到文件、取消所有警告任务、**清理 DragonCore GUI 所有缓存状态** |
| **玩家死亡** | 自动清除预览状态 |
| **玩家传送** | 自动清除预览状态 |
| **切换世界** | 检测是否进入黑名单世界,是则自动取消变身 |
| **玩家复活** | 清理预览相关状态 |
### 10.10 数据统计系统
| 统计项 | 数据来源 |
|---|---|
| 全服总变身次数 | 每次变身 `+1` |
| 模型使用排行(Top 5) | 按模型统计变身次数 |
| 一服最热变身模型 | 统计最高使用量的模型 |
| 玩家个人变身次数 | 按 UUID 统计 |
| 当前在线变身人数 | 实时统计 |
| 自动保存 | 每 60 秒异步写入磁盘,防止意外丢失 |
### 10.11 速率限制与防滥用
```
每分钟变身次数 > MaxTransformsPerMinute
→ 进入临时黑名单(时长可配置)
→ 黑名单期间禁止任何变身
→ RateLimitExempt 权限豁免
```
### 10.12 DragonCore GUI 集成细节
插件默认自动部署 4 个 DragonCore 贴图 GUI:
| GUI | 文件 | 说明 |
|---|---|---|
| 主衣橱 | `main.yml` | 主界面 |
| 展示衣橱 | `showcase.yml` | 魅力排行榜界面 |
| 查看衣橱 | `ShowWardrobe.yml` | 接受展示请求后,只读查看对方衣橱 |
| 展示文本框 | `ShowTextBox.yml` | 衣橱展示请求界面 |
**高级特性**:
- **热同步**:修改 `GuiConfig/` 下的文件后,插件每 **5 秒**(100 ticks)异步检测时间戳变化,自动同步到 `DragonCore/Gui/JYWardrobe/` 并调用 `Config.sendYamlToClient()`
- **筛选缓存**:基于版本号(`globalFilterVersion`)的筛选缓存机制,每次翻页无需重新遍历全量模型;模型变更时版本递增,缓存自动失效
- **日志限速**:龙核 GUI 调试日志 5 秒冷却,防止 Log4j 刷屏
- **数据预计算**:每页 30+ 变量(品质色、魅力值、描述、属性、拥有状态、变身状态等)一次性打包发送
- **已拥有模型禁止预览**:避免玩家利用预览功能免费看模特效
- **展示衣橱**:通过 `showcaseOwnerMap` 维护查看者↔展示者映射,关闭 GUI 时自动清除
---
## 11. 质量保障与兼容性
| 项目 | 说明 |
|---|---|
| 🛡️ 启动安全检测 | 自动检测配置文件中是否存在 **重复模型 ID**,并打印警告日志 |
| 🔐 权限联动 | 使用 `Vault Permission`,`give` 时自动追加权限,`take` 时自动移除 |
| 🔄 DragonCore GUI 热同步 | `GuiConfig/` 文件修改后 **5 秒内**自动同步到 DragonCore 目录并重载 |
| 📋 变量参考文件 | 首次启动自动生成 `placeholders.yml` 变量参考文件(纯注释,方便查阅) |
| 📝 消息全自定义 | `messages.yml` 提供 **60+ 条可自定义消息**,每条支持颜色代码 & 和 PAPI 变量 |
| 💾 筛选缓存版本管理 | 版本号驱动的 GUI 筛选缓存,模型数据变更时自动失效,减少翻页计算 |
| 🚀 首次启动自动生成 | 自动生成示例模型配置 + `messages.yml` + `placeholders.yml` 变量参考文件 |
| 🔍 智能 Tab 补全 | 所有指令支持 Tab 补全(玩家名、模型名、世界名,黑名单 add 支持 Multiverse 世界列表) |
| 🔄 关闭时属性清理 | 服务器关闭时自动清除所有已应用的 AttributePlus 属性,避免"幽灵属性"残留 |
| 🔒 限时模型精确管理 | 到期自动收回 + 玩家上线即时检查,防止卡着过期模型 |
---
## 12. 常见问题
**Q:能不能只允许通过物品触发变身,禁止使用指令?**
A:可以。在模型配置中将 `triggerItem.allowCommand` 设为 `false`,此时玩家只能通过右键物品触发变身。
**Q:试用模型会不会影响魅力值排名?**
A:由 `config.yml` 中的 `charmFromTrial` 控制。设为 `false` 时试用模型不计入魅力值,确保排行榜公平。
**Q:一个模型可以用多个物品触发变身吗?**
A:目前每个模型只支持一个 `triggerItem` 配置。如果需要多个触发物品,可以在 `transforms/` 下为同一个 DragonCore 模型创建多个配置副本,设置不同的触发条件和价格。
**Q:插件卸载或更新时属性还在吗?**
A:服务器关闭时会自动清除所有已应用的 AttributePlus 属性,避免"幽灵属性"残留。羁绊属性(`JYModelWardrobe_Bond_*`)也会一并清理。
**Q:为什么我在 DragonCore GUI 中看不到某些模型?**
A:检查是否在"全部模型"模式(切换按钮可在已拥有/全部之间切换),以及品质筛选是否挡住了目标模型。使用"清除筛选"按钮可恢复默认显示。
**Q:修改了 GuiConfig/ 下的 GUI 文件后需要重启服务器吗?**
A:不需要。插件每 5 秒自动检测 `GuiConfig/` 下的文件变化,发现变更后自动同步到 `DragonCore/Gui/JYWardrobe/` 并触发 DragonCore 配置重载。
---
## 13. 功能展示
[ATTACH type="full" size="1280x633"]140555[/ATTACH]
[ATTACH type="full" size="1280x700"]140556[/ATTACH]
[ATTACH type="full" size="466x167"]140557[/ATTACH]
[ATTACH type="full" size="1280x653"]140558[/ATTACH]
[ATTACH type="full" size="1280x566"]140559[/ATTACH][ATTACH type="full" size="1280x660"]140560[/ATTACH]
[ATTACH type="full" size="856x395"]140561[/ATTACH]
[ATTACH type="full" size="304x28"]140562[/ATTACH]
[ATTACH type="full" size="505x52"]140563[/ATTACH]
[ATTACH type="full" size="1280x687"]140564[/ATTACH]
[ATTACH type="full" size="897x655"]140565[/ATTACH]
[ATTACH type="full" size="999x1153"]140566[/ATTACH]
[/MD]