菜单
星月邮箱有三个箱子界面,外观全部写在 plugins/StarMail/menus/ 里:
| 文件 | 界面 | 打开方式 |
|---|---|---|
mailbox.yml | 邮箱主界面 | /sm、/sm view <玩家> |
mail.yml | 单封邮件 | 在邮箱里左键点一封邮件 |
compose.yml | 写信(玩家写信与管理员写信共用) | /sm write、/sm admin、/sm template create |
改完执行 /sm reload 生效。想恢复某个文件的默认样子:把它改名或删除,再 /sm reload,会重新生成默认文件。
三个文件共通的写法
title: '<gradient:#7F7FD5:#86A8E7:#91EAE4>✉ 星月邮箱</gradient> <dark_gray>· <gray>{unread} 未读'
rows: 6
content-slots: ['10-16', '19-25', '28-34', '37-43']
sounds:
open: 'BLOCK_ENDER_CHEST_OPEN:0.35:1.6'
click: 'UI_BUTTON_CLICK:0.4:1.4'
fail: 'BLOCK_NOTE_BLOCK_BASS:0.6:0.8'
delete: 'ENTITY_ITEM_FRAME_REMOVE_ITEM:0.6:1.0'
decorations:
frame:
material: BLACK_STAINED_GLASS_PANE
slots: ['0-8', '45-53', 9, 17]
buttons:
claim-all:
slot: 49
material: CHEST_MINECART
name: '<gold>一键领取'
lore: ['<gray>领取全部 {unclaimed} 封邮件的附件']
| 键 | 作用 |
|---|---|
title | 界面标题,支持 & 颜色、&#RRGGBB 与 MiniMessage。可用变量:邮箱主界面 {unread} {unclaimed} {total} {owner} {player};单封邮件 {title} {sender};写信界面不使用变量 |
rows | 行数,1 ~ 6 |
content-slots | 放「列表内容」的格位:邮箱主界面放邮件,单封邮件放附件,写信界面是附件格。可以写数字或范围 '10-16'。和按钮重叠的格位会自动跳过;没写时使用除了最后一行以外的全部格位 |
items-per-page | (选填)每页最多显示几项,默认等于内容格位的数量 |
sounds | open 打开、click 点击按钮、fail 操作失败、delete 删除(邮箱与单封邮件)、send 管理员写信寄出(玩家寄信成功时固定播放经验球音效) |
decorations | 装饰(玻璃板等),可以写好几组,键名随便取。只显示,点了没反应 |
buttons | 按钮。键名就是功能(见各界面的功能键),不认识的键名是只执行 actions 的自定义按钮 |
格位编号从 0 开始,第一行是 0 ~ 8,第二行 9 ~ 17,依此类推。
音效写法
| 写法 | 意思 |
|---|---|
UI_BUTTON_CLICK | 原版音效名称,音量与音调都是 1 |
UI_BUTTON_CLICK:0.6 | 音量 0.6 |
UI_BUTTON_CLICK:0.6:1.2 | 音量 0.6、音调 1.2 |
minecraft:block.note_block.pling | 用音效 ID(资源包的自定义音效也可以,例如 myserver:ui.open:0.8:1) |
'' | 不播放 |
写错的音效名称会被忽略,不会让界面出错。
按钮与装饰的键
| 键 | 默认 | 作用 |
|---|---|---|
type | 键名 | 指定功能。键名就是功能键时不用写;想用别的键名、或同一个功能放两个按钮时写 type: next 这样。写 type: action 表示只执行 actions |
slot / slots | — | 格位,slot: 4、slots: [45, 53]、slots: ['0-8', 17] |
material | 按钮 STONE / 装饰 BLACK_STAINED_GLASS_PANE | 材质,写错时变成石头 |
amount | 1 | 数量(1 ~ 64) |
name | 空 | 名称,支持颜色与该界面的变量 |
lore | 无 | 说明,一行一个项目,支持颜色与变量 |
custom-model-data | 0 | 自定义模型数据,0 = 不用 |
item-model | 空 | 物品模型(1.21.4+),例如 myserver:gui/mail |
tooltip-style | 空 | 提示框样式(1.21.2+),例如 myserver:mail |
head | 空 | 头颅材质(material 要是 PLAYER_HEAD),见下方 |
glow | false | 附魔光效 |
sound | 界面的 click | 点击这个按钮的音效(覆盖 sounds.click) |
permission | 空 | 没有这个权限的玩家看不到这个按钮 |
enabled | true | false = 暂时停用这个按钮 / 装饰,不用删掉整段 |
states | — | 不同状态下的外观,见下方 |
actions | — | 点击时执行的动作,见下方 |
mode | both | 只有写信界面用:player 只在玩家写信显示 / admin 只在管理员写信显示 / both 都显示 |
按钮物品会隐藏原版的属性、附魔等说明,名称与说明默认不是斜体。
head 的写法:
| 写法 | 显示 |
|---|---|
'{player}' | 正在看这个界面的玩家自己的头 |
'{target}' | 邮箱主界面 = 邮箱主人;单封邮件 = 寄件人 |
Steve 或 UUID | 那个玩家的头(要是服务器认识的玩家) |
| 很长的一串 base64 | 头颅网站复制的 textures 值(可以加 base64: 前缀) |
states 状态外观: 只写要改的项目,其余沿用按钮本身的设定。
claim-all:
slot: 49
material: CHEST_MINECART
glow: true
name: '<gold>✦ 一键领取 ✦'
states:
none: # 没有可领取的附件时
material: MINECART
glow: false
name: '<dark_gray>一键领取'
lore: ['<dark_gray>没有待领取的附件']
每个功能键有哪些状态,见下面各界面的说明。
actions 动作(自定义按钮,type: action 或不认识的键名):
| 写法 | 效果 |
|---|---|
'command: spawn' | 玩家执行指令 |
'console: give {player} diamond' | 控制台执行指令 |
'message: <green>你好' | 给玩家发一条消息 |
'sound: ENTITY_PLAYER_LEVELUP' | 播放音效 |
'close' | 关闭界面 |
动作里可以用 {player} 代表玩家名。例子:在邮箱左下加一个回主城的按钮:
buttons:
back-to-spawn:
slot: 46
material: ENDER_PEARL
name: '<aqua>回到主城'
actions:
- 'close'
- 'command: spawn'
说明文字的排版规则
- 一行里有多行变量(例如
{content}、{attachments})时,这一行会按内容重复好几行;内容是空的就整行拿掉。 - 连续的空行只保留一行,开头与结尾的空行会自动去掉。所以可以放心地用
''分段,某段没内容时不会留下一堆空白。
邮箱主界面 mailbox.yml
功能键
| 键 | 作用 | 状态 |
|---|---|---|
previous / next | 上一页 / 下一页,只有前后还有页时才显示 | — |
filter | 筛选:左键下一个、右键上一个(全部 → 未读 → 待领取) | — |
claim-all | 一键领取 | none:没有可领取的附件 |
read-all | 全部标为已读 | none:没有未读邮件 |
delete-read | 删除已读、无待领附件的邮件(连按两次) | confirm:第一次点下后,等待确认时 |
write | 写信;没有 starmail.write、关闭玩家互寄或在 /sm view 里时不显示 | — |
close | 关闭界面 | — |
overview | 只显示(例如概览) | — |
claim-all、read-all 在管理员查看别人邮箱(/sm view)时不显示。默认文件里的 help 按钮是 type: action、没有动作,所以只是显示说明。
变量
| 变量 | 内容 |
|---|---|
{player} | 正在看的玩家 |
{owner} | 邮箱主人(/sm view 时是被查看的玩家) |
{unread} / {unclaimed} / {total} | 未读数 / 待领取数 / 邮件总数 |
{shown} | 目前筛选下的邮件数 |
{page} / {pages} | 目前页码 / 总页数 |
{filter} / {next_filter} | 目前筛选 / 下一个筛选的名称(文字在 messages.yml 的 filter) |
邮件的外观(mail-item)
每封邮件显示成什么样子:
mail-item:
icons:
attachment: CHEST # 附件待领取
unread: WRITABLE_BOOK # 未读(没有附件)
read: PAPER # 已读(没有附件)
claimed: MAP # 附件已领取
use-mail-icon: true
glow-unread: true
name: '{status} <white>{title}'
lore:
- '<dark_gray>{type}邮件 · #{id}'
- ''
- '<gray>寄件人 <white>{sender}'
- '<gray>时间 <white>{time} <dark_gray>({ago})'
- '{expire_line}'
- ''
- '{content}'
- ''
- '{attachments}'
- ''
- '{actions}'
| 键 | 默认 | 作用 |
|---|---|---|
icons.attachment / unread / read / claimed | 见上 | 四种状态的材质 |
use-mail-icon | true | 附件待领取时,改用寄件时指定的图标(模板的 icon、插件寄信时指定的图标) |
glow-unread | true | 未读的邮件带光效 |
name / lore | 见上 | 名称与说明 |
custom-model-data / item-model / tooltip-style | 无 | 同按钮 |
expire-line | <gray>过期 <yellow>{expire} | {expire_line} 的内容。只有设了期限、附件还没领的邮件才显示 |
content-lines | 3 | 正文预览几行 |
content-line | <gray>{line} | 正文每一行的格式 |
content-more | <dark_gray>…… 点开阅读全文 | 正文超过预览行数时多加的一行 |
attachment-lines | 5 | 附件预览最多几项 |
attachment-header / attachment-header-claimed | 见默认文件 | 附件区的标题 / 已领取时的标题 |
attachment-line | <dark_gray>▪ <white>{name} <gray>×{amount} | 物品的格式({name} 物品名称、{amount} 数量) |
money-line / points-line | 见默认文件 | 金币({money})/ 点券({points})的格式 |
note-line | <dark_gray>▪ <light_purple>{note} | 附件说明的格式 |
command-line | <dark_gray>▪ <light_purple>特殊奖励 ×{count} | 有指令奖励、但没有附件说明时显示 |
attachment-more | <dark_gray>…… 还有 {count} 项 | 附件超过预览数量时 |
actions.open / claim / delete / admin-delete / book | 见默认文件 | {actions} 里的操作提示,只列出这封信现在能做的操作;写成 '' 就不显示那一项 |
邮件的变量:
| 变量 | 内容 |
|---|---|
{title} / {sender} | 标题 / 寄件人(没有标题时显示 messages.yml 的 no-title) |
{time} / {ago} | 寄出时间(config.yml 的 menu.date-format)/ 多久以前 |
{expire} | 剩余时间,例如「6 天后」,永不过期显示「永不过期」 |
{status} | 状态符号(messages.yml 的 status) |
{type} | 邮件类型:系统 / 管理员 / 玩家 / 退回 / 全服(messages.yml 的 type) |
{id} | 邮件编号 |
{receiver} | 收件人名称 |
{items} / {money} / {points} | 物品组数 / 金币 / 点券 |
多行:{content}、{attachments}、{expire_line}、{actions} | 正文预览、附件预览、期限行、操作提示 |
空邮箱(empty)
empty:
slot: 22
material: FEATHER
name: '<gray>邮箱空空如也'
lore: ['<dark_gray>新的邮件会出现在这里']
目前筛选下没有任何邮件时显示,写法同按钮。删掉这一段就不显示。
单封邮件 mail.yml
content-slots 是附件格:物品原样显示,金币、点券、附件说明、指令奖励各显示成一个图标(见下方 attachment-items)。附件太多时用 previous / next 翻页。
功能键
| 键 | 作用 | 状态 |
|---|---|---|
header | 信封,只显示 | attachment / unread / read / claimed,依邮件状态 |
content | 正文;点击用书本阅读全文 | — |
read-book | 用书本阅读全文 | — |
claim | 领取附件;没有附件的信不显示 | claimed:已经领取 |
delete | 删除这封邮件(一律要连按两次确认) | confirm:等待第二次确认;locked:附件还没领、不能删 |
reply | 回信,只有玩家寄来的信、而且看的人有写信权限时显示 | — |
back | 返回邮箱(回到原本的页码与筛选) | — |
previous / next | 附件上一页 / 下一页 | — |
其他键
| 键 | 默认 | 作用 |
|---|---|---|
dim-claimed-attachments | true(删掉这个键 = false) | 附件已领取时,在附件物品说明最后加一行「✔ 已领取」(文字在 messages.yml 的 attachment-claimed-lore) |
content-line | <white>{line} | {content} 每一行的格式 |
expire-line | <gray>过期 <yellow>{expire} | {expire_line} 的内容 |
attachment-items.money | 金锭 | 金币的图标,变量 {money} |
attachment-items.points | 绿宝石 | 点券的图标,变量 {points} |
attachment-items.note | 下界之星 | 每一条附件说明一个图标,变量 {note} |
attachment-items.command | 下界之星 | 有指令奖励但没有附件说明时显示,变量 {count} |
attachment-items.broken | 屏障 | 附件数据读不出来时显示 |
attachment-items 里每一项都可以写 material、name、lore、custom-model-data、item-model、tooltip-style、glow 等按钮的键。
变量
邮箱主界面「邮件的变量」全部可以用,另外有:
| 变量 | 内容 |
|---|---|
{page} / {pages} | 附件页码 / 总页数 |
{player} | 正在看的玩家 |
多行:{content} | 全部正文 |
多行:{expire_line} | 期限行(有期限、附件未领取时才显示) |
写信界面 compose.yml
玩家写信与管理员写信共用这个文件,用按钮的 mode 区分:player 只在玩家写信显示、admin 只在管理员写信显示、both(默认)都显示。
| 键 | 作用 |
|---|---|
title | 玩家写信的标题 |
admin-title | 管理员写信的标题(编辑模板时后面会再加上 messages.yml 的 template-suffix) |
content-slots | 附件格。可用的格数 = config.yml 的 mail.max-items,超过的格位会锁住 |
locked-slot | 锁住的附件格的外观(超过上限,或服务器关闭了附带物品时) |
content-line | {content} 每一行的格式 |
功能键
| 键 | 作用 | 状态 |
|---|---|---|
receiver | 收件人:点击后在聊天栏输入 | group:管理员选了群发对象时 |
title | 标题:点击后输入 | — |
body | 正文:左键加一行(| 分多行)、右键删最后一行、Shift + 点击清空 | — |
money | 附带金币:左键输入、右键清除。玩家写信时只有在允许附带金币、有权限、有 Vault 时才显示 | — |
send | 寄出 | incomplete:还没填收件人;confirm:群发等待第二次确认 |
cancel | 取消写信,附件退回 | — |
preview | 只显示(信件预览) | — |
help | 只显示(说明) | — |
target-mode | 管理员:发送对象,左键下一个、右键上一个 | — |
sender | 管理员:寄件人,左键输入、右键恢复默认 | — |
points | 管理员:点券,左键输入、右键清除 | — |
commands | 管理员:领取指令,左键添加、右键删除最后一条 | — |
notes | 管理员:附件说明,左键添加、右键删除最后一条 | — |
expire | 管理员:期限,左键输入天数、右键恢复默认 | — |
save-template | 管理员:存为模板(还需要 starmail.admin.template) | — |
target-mode、sender、points、commands、notes、expire、save-template 即使不小心设成 mode: both,在玩家写信界面点了也没有作用。
变量
| 变量 | 内容 |
|---|---|
{player} | 写信的玩家 |
{receiver} | 收件人;群发 时是发送对象的名称;没填时显示 messages.yml 的 compose.unset |
{target} | 发送对象(指定玩家 / 全部在线玩家 / …,文字在 messages.yml 的 target) |
{title} / {sender} | 标题 / 寄件人 |
{money} / {points} | 附带的金币 / 点券 |
{expire} | 期限:默认 / 永不过期 / N 天 |
{postage} / {postage_points} | 邮费金币 / 邮费点券(管理员写信为 0) |
{total} | 合计扣除的金币(邮费 + 附带金币) |
{items} / {max_items} | 已放的附件组数 / 可放的格数 |
{lines} / {max_lines} | 正文行数 / 最多行数 |
{template} | 正在编辑的模板名称 |
{icon} | 邮件图标(没有设定时显示「默认」) |
多行:{content} / {commands} / {notes} | 正文 / 领取指令 / 附件说明 |
小技巧
- 换成资源包的 GUI:把装饰的玻璃板改成透明材质 +
item-model,按钮也加上item-model/custom-model-data,标题用资源包字体画背景。 - 移动按钮:改
slot就好;记得content-slots不要和按钮重叠(重叠的格位会被当成按钮,不放内容)。 - 只给 VIP 看的按钮:加
permission: group.vip。 - 不想要某个按钮:加
enabled: false,或整段删掉。