🏷️ AdventurePrefix

AdventurePrefix 提供权限组前缀、管理员覆盖前缀和付费限时自定义前缀。内置文本引擎支持传统颜色、十六进制、RGB 与多锚点渐变,并通过 PAPI 交给聊天/TAB 插件展示。

🎨

原生文本引擎

& 颜色、HEX、RGB、逐字素渐变和 MiniMessage 备用模式。

💳

限时资格

个人/团队、季度/年度四种方案,首次设置起算。

事后审核

提交即生效,管理员 GUI 通过或输入理由驳回。

🗄️

多种存储

YAML、SQLite、MySQL,原样保存 UTF-8 模板。

版本0.2.6
目标服务端Paper 1.21.8 API
运行 Java25
可选依赖PlaceholderAPI
显示策略PAPI 为主;可选接管头顶名牌,不接管聊天/Tab

📥 安装与存储

  1. 服务器安装 Java 25,将插件放入 plugins/
  2. 推荐安装 PlaceholderAPI,以便聊天和 TAB 展示。
  3. 首次启动生成 config、prefixes、messages 和 sounds。
  4. 单服使用 YAML/SQLite;群组服使用共享 MySQL。
storage:
  type: yaml
  sqlite:
    file: data.db
  mysql:
    host: localhost
    port: 3306
    database: adventureprefix
    username: root
    password: ""
    pool-size: 10
💡 存储内容

模板以纯文本原样保存,颜色解析发生在展示层;MySQL 使用 utf8mb4 和参数化语句。

🎨 文本引擎

格式示例
传统颜色&aHello &c&lWorld
十六进制&#FF8800文字#FF8800文字
RGB&{255,136,0}文字
双色渐变<gradient:#FF0000:#00FF00>ABCDE</gradient>
多锚点渐变<gradient:#F00:#FF0:#0F0>文字</gradient>

默认引擎为 native,渐变按 Unicode 字素簇逐字插值;可通过命令切换 minimessage 备用引擎。

👥 组前缀

prefixes:
  player:
    weight: 10
    permission: adventureprefix.group.player
    format: ""
  vip:
    weight: 10
    permission: adventureprefix.group.vip
    format: "&aVIP"
  mvp:
    weight: 20
    permission: adventureprefix.group.mvp
    format: "&6MVP"

玩家同时匹配多个定义时,权重最高者生效。管理员个人覆盖和有效的自定义前缀优先于组前缀。

⚠️ 相同权重

多个组使用相同权重时结果取决于定义顺序;建议为每个等级设置明确递增权重。

✍️ 自定义前缀

校验规则

  • 可见字符默认 1—12;颜色与格式标记不计长度。
  • 按 Unicode 字素簇计数,避免拆开 emoji 和组合字符。
  • 可启用宽度模式,让 CJK、全角和 emoji 按 2 计。
  • 过滤换行、零宽字符、首尾空格和可配置脏词。
  • 默认首次设置后不允许额外修改。
/aprefix custom <内容>
/aprefix preview <内容>
/aprefix custom clear

资格未使用时不计时;首次成功设置时才消耗资格并开始到期倒计时。

💳 付费方案

ID类型期限人数默认价格
1个人P3M(季度)1100
2个人P1Y(年度)1300
3团队P3M5400
4团队P1Y51000

重购规则

已消耗或到期资格重新购买用于更改时,默认应用 recustomize-discount: 0.5。通过 edits.allowed 或方案级 edits 控制可修改次数。

支付系统可调用 AdventurePrefixApi,监听 PrefixGrantEvent,或执行 aprefix grant <player> <plan> [renew]

🤝 团队方案

团队资格由拥有者维护成员列表,默认上限由方案 size 决定。

命令用途
/aprefix team add <玩家>添加成员
/aprefix team remove <玩家>移除成员
/aprefix team list查看团队
  • 成员共享该团队方案的资格范围。
  • 移除成员或资格到期后,相关自定义前缀回退到默认/组前缀。
  • 团队成员数包含方案定义的可用人数限制。

审核流程

  1. 玩家提交自定义前缀。
  2. 前缀立即生效并写入待审核记录。
  3. 在线管理员收到通知。
  4. 管理员使用 /aprefix admin log 打开箱子 GUI。
  5. 左键通过;右键进入驳回理由输入,回车确认。
  6. 多管理员处理状态通过存储同步,避免重复审批。
review:
  scan-interval-minutes: 10
  notify-admins-on-submit: true
💡 为什么提交即生效

系统采用事后审核以降低玩家等待成本;脏词和字符校验仍在提交前执行。

👤 头顶名牌

nameplate:
  enabled: false
  format: "&f[%adventureprefix_use%&f]&r"
  refresh-interval-ticks: 100

启用后插件接管玩家头顶 nametag,并定时刷新。格式支持本插件文本标记、PAPI 和 %adventureprefix_use%

/aprefix namepreview 可让玩家仅在自己客户端预览已有生效前缀 30 秒。

⚠️ 计分板冲突

其他 TAB/名牌插件也可能修改 Team 前后缀。正式启用前必须确认只有一个插件负责头顶名牌。

⌨️ 命令与权限

根命令 /aprefix,别名 /apre/ap

命令权限
help/custom/status/team/preview/namepreview/versionadventureprefix.use(所有人)
reload/list/engineadventureprefix.admin(OP)
grant <玩家> <方案> [renew]管理员
revoke <玩家>管理员
set/clear <玩家>管理员
admin log管理员审核 GUI

📊 PAPI 变量

变量结果
%adventureprefix_prefix%渲染后的有效前缀
%adventureprefix_prefix_mini%MiniMessage 形式
%adventureprefix_prefix_plain%纯文本
%adventureprefix_prefix_raw%原始模板
%adventureprefix_eligible%是否有资格
%adventureprefix_plan%当前方案
%adventureprefix_remaining_days%剩余天数

⚙️ 配置文件

文件用途
config.yml引擎、长度、定价、方案、存储、审核和名牌
prefixes.yml权限组前缀、权重和格式
messages.yml全部玩家文本,支持颜色与 PAPI
sounds.yml逐事件音效

长度与脏词

length:
  min: 1
  max: 12
  width-mode: false
  profanity-filter: false
  profanity-words: []
edits:
  allowed: 0
pricing:
  recustomize-discount: 0.5

🧰 故障排查

聊天或 TAB 不显示

插件默认不接管聊天/Tab;请在对应插件格式中加入 AdventurePrefix PAPI 变量。

渐变长度不正确

检查标签闭合、HEX 格式和 width-mode;颜色标记不参与可见字符计数。

自定义资格立即过期

确认方案期限使用 ISO-8601 Period,例如 P3MP1Y,并检查服务器时区。

MySQL 中文或 emoji 损坏

数据库和连接必须使用 utf8mb4;不要将表手工改为 latin1/utf8mb3。