跳到主要内容

PAPI 占位符

Assiah 内置了 %assiah_...% 命名空间,你可以把邮箱未读数、玩家偏好、最近邮件标题等信息直接显示到记分板、TAB、全息、菜单和聊天格式里。

只要服务器安装了 PlaceholderAPI,Assiah 的这套占位符就能直接使用,不需要再单独下载 Assiah 的 eCloud 扩展。

使用前准备

  1. 安装 Assiah
  2. 安装 PlaceholderAPI
  3. 重启服务器,或执行 /assiah reload
  4. 输入 /assiah placeholder 查看插件内置帮助
  5. /papi parse me %assiah_stats_unread% 测试当前玩家视角下的解析结果
提示

Assiah 的占位符前缀固定为 assiah,完整格式统一写成 %assiah_<identifier>%

这套占位符能做什么

  • 在侧边栏显示玩家还有多少封未读邮件
  • 在 TAB 或全息里提醒玩家是否有新邮件
  • 在菜单按钮上显示“已开启 / 已关闭”这类偏好状态
  • 在其他插件菜单里读取最近一封邮件的标题、发件人、时间和附件数量

语法总览

分类语法适合显示什么
统计类%assiah_stats_<field>%未读数、各文件夹邮件数量、黑名单数量
偏好类%assiah_preference_<field>%玩家当前收件偏好、限制参数、最近发送时间
最近邮件类%assiah_mail_<folder>_<index>_<field>%最近几封邮件或草稿的标题、发件人、状态、附件数

统计类占位符

下面这些字段接在 %assiah_stats_ 后面使用:

字段说明示例
unread收件箱未读邮件数量%assiah_stats_unread%
has_unread是否存在未读邮件,返回 true / false%assiah_stats_has_unread%
inbox_total收件箱邮件总数%assiah_stats_inbox_total%
sent_total已发送邮件总数%assiah_stats_sent_total%
draft_total草稿箱总数%assiah_stats_draft_total%
archive_total归档邮件总数%assiah_stats_archive_total%
trash_total回收站邮件总数%assiah_stats_trash_total%
failed_claim_total领取失败且可重试的邮件数量%assiah_stats_failed_claim_total%
blocked_total黑名单人数%assiah_stats_blocked_total%

常见用法

%assiah_stats_unread%
%assiah_stats_has_unread%
%assiah_stats_inbox_total%

偏好类占位符

下面这些字段接在 %assiah_preference_ 后面使用:

字段说明
allow_player_mail是否接收玩家邮件,返回 true / false
allow_player_mail_display是否接收玩家邮件的展示文本
allow_system_mail是否接收系统邮件,返回 true / false
allow_system_mail_display是否接收系统邮件的展示文本
require_whitelist是否开启白名单模式,返回 true / false
require_whitelist_display白名单模式的展示文本
enable_blacklist是否启用黑名单,返回 true / false
enable_blacklist_display黑名单开关的展示文本
daily_send_limit当前玩家每日发送上限
min_send_interval_ms两次发送之间的最小间隔(毫秒)
sent_count_today今日已发送邮件数量
whitelist_total白名单人数
last_send_at最近一次发送时间,返回格式化文本
last_send_at_raw最近一次发送时间,返回原始时间戳
信息

所有 _display 字段都会读取 Assiah 的 GUI 文本配置,所以你在 mailbox.yml -> ui.boolean 里改成“开启 / 关闭”或“允许 / 拒绝”后,这些占位符也会跟着变化。

常见用法

%assiah_preference_allow_player_mail_display%
%assiah_preference_sent_count_today%
%assiah_preference_last_send_at%

最近邮件类占位符

最近邮件类占位符的完整语法是:

%assiah_mail_<folder>_<index>_<field>%

folder 可选值

说明
inbox收件箱
sent已发送
draft草稿箱
archive归档
trash回收站

index 规则

  • 1 开始计数,不是从 0
  • 1 表示最近一条,2 表示第二条,以此类推
  • 最大可读条数受 config.yml -> placeholder.recent-mail-limit 控制,默认是 3

field 可选值

字段说明
id邮件或草稿 ID
title标题
summary正文摘要
sender发件人显示名
receiver收件人显示名
folder文件夹内部标识
folder_display文件夹显示名称
status当前状态文本(当前实现与 claim_status 等价)
status_display当前状态显示文本(当前实现与 claim_status_display 等价)
claim_status附件领取状态
claim_status_display附件领取状态显示文本
read_status已读状态;草稿通常返回空值
time格式化后的时间文本
created_at创建时间戳
updated_at更新时间戳;草稿最常用
attachment_count附件总数
claimable_attachment_count可领取附件数量

常见用法

%assiah_mail_inbox_1_title%
%assiah_mail_inbox_1_sender%
%assiah_mail_sent_1_time%
%assiah_mail_draft_1_summary%
%assiah_mail_archive_2_status_display%

排序方式

  • inboxsentarchivetrash:按创建时间倒序
  • draft:按最后编辑时间倒序

也就是说,%assiah_mail_draft_1_title% 读到的是最近编辑过的那封草稿。

config.yml 中的占位符配置

Assiah 会在 config.yml 里释放一个 placeholder 配置段:

placeholder:
recent-mail-limit: 3
refresh-ttl-seconds: 15
empty-text: ""
字段作用
recent-mail-limit每个文件夹最多缓存多少条“最近邮件”供 PAPI 读取
refresh-ttl-seconds占位符快照缓存有效期;过期后会在后台异步刷新
empty-text没有数据、索引越界、字段写错或没有玩家上下文时返回的文本
提示

如果你想让“没有邮件”时显示 暂无邮件,可以把 empty-text 改成这个文本。这样索引越界或玩家没有数据时,就不会显示成空字符串。

刷新机制

Assiah 的 PAPI 占位符不是每次都直接查数据库,而是先读内存快照,再在后台异步刷新。这样做的好处是:

  • 记分板、TAB、菜单频繁刷新时不会卡主线程
  • 玩家上线后会自动预热一次数据
  • 收到邮件、读信、删信、归档、领取附件、保存草稿后,插件也会自动刷新对应玩家的快照
  • /assiah reload 会清空旧缓存,并重新为在线玩家预热

你需要注意的地方

  • 第一次读取某个玩家的数据时,如果缓存还没建好,可能会先返回默认值或 empty-text
  • refresh-ttl-seconds 越大,性能越稳,但显示变化同步得也会更慢一些
  • 这套占位符只负责展示,不会执行发送、领取、删除之类的操作

常见问题

1. 为什么我看到的是空文本?

通常检查这几项:

  • 服务器有没有安装 PlaceholderAPI
  • 当前解析环境有没有玩家上下文(控制台或无玩家场景会返回 empty-text
  • index 是否超过 recent-mail-limit
  • 玩家当前文件夹里是否真的有对应邮件
  • fieldfolder 是否拼写错误

2. 为什么刚发完邮件,记分板没有立刻变化?

Assiah 会自动刷新快照,但它本身是异步缓存机制。大多数场景会很快同步;如果你想更快看到变化,可以适当调小 refresh-ttl-seconds

3. time 返回的时间格式在哪里改?

%assiah_mail_<folder>_<index>_time% 读取的是 Assiah 自己格式化后的时间文本,格式来自 mailbox.yml -> ui.time-format

搭配建议

  • 想在菜单里展示邮箱概况:优先用统计类占位符
  • 想给偏好设置按钮加状态字样:优先用 _display 结尾的偏好类占位符
  • 想在菜单里做“最近邮件预览”:用最近邮件类占位符,并把 recent-mail-limit 调到够用的数量

相关页面