MythicShowItems ¥18
一个轻量的聊天物品展示插件,让玩家用 [wp] 展示手持物品,用 [bb] 生成可点击的背包快照。
插件分析
这是一个聊天组件插件,不是数据库插件
从源码看,MythicShowItems 的核心目标很单一:拦截带有 [wp] / [bb] 的聊天消息,把它们改造成带悬浮、点击和 GUI 查看能力的组件化消息。
它不做复杂经济系统,也不依赖 MySQL、Vault、PlaceholderAPI 之类的前置插件。整个插件围绕“玩家在聊天里晒装备和晒背包”展开:[wp] 负责展示主手物品,[bb] 负责生成一份临时背包快照,其他玩家点击后即可查看。
插件内部主要由五部分组成:聊天监听、背包快照缓存、只读背包 GUI、定时提醒任务、颜色文本解析。也就是说,它的卖点不是“功能大而全”,而是“展示体验直接、交互清晰、接入成本低”。
一句话总结:MythicShowItems 把普通聊天里的“发张装备图”变成了原生聊天交互,玩家不需要命令教学,直接打字就能展示。
源码层面的功能拆分
聊天关键字替换
监听聊天消息,只要检测到 [wp] 或 [bb],就取消原消息并重新广播一个可交互版本。
手持物品悬浮展示
读取玩家主手物品并挂载 Adventure 悬浮事件,其他玩家把鼠标移上去就能看物品详情。
背包快照查看
把玩家当前背包内容复制到内存快照里,点击聊天组件后执行 /msi view UUID 打开只读 GUI。
消息样式与提醒配置
支持传统 & 颜色码、十六进制颜色和 MiniMessage,提醒间隔和快照过期时间也能在配置里调整。
主要功能
[wp]展示主手物品:玩家在聊天中输入关键字后,消息会替换为可悬浮查看的物品组件。[bb]展示背包快照:点击聊天中的背包组件即可打开快照 GUI,适合晒战利品、装备搭配或交易确认。- 快照自动过期:背包快照只保存在内存中,默认 10 分钟后失效,避免无上限堆积。
- 只读 GUI 保护:背包快照界面会拦截点击和拖拽,防止玩家从展示 GUI 中拿走物品。
- 权限分离:
[wp]、[bb]和查看背包 GUI 分别有独立权限节点,方便分组授权。 - 消息完全可配置:聊天展示格式、悬浮提示、提醒文案、过期提示和 GUI 标题都能自定义。
- 定时全服提醒:当服务器有在线玩家时,插件会按配置间隔广播展示功能提示。
- 轻量无前置:源码依赖只有 Paper API,本身不要求数据库或第三方基础插件。
命令列表
主命令:/msi
| 命令 | 说明 | 权限 |
|---|---|---|
/msi view <uuid> | 打开指定背包快照的查看 GUI | mythicshow.view |
正常使用时,玩家通常不需要手动输入这个命令。点击聊天中的 [bb] 展示组件,插件会自动帮玩家执行对应的查看命令。
权限节点
| 权限 | 说明 | 默认 |
|---|---|---|
mythicshow.use.wp | 允许在聊天中使用 [wp] 展示主手物品 | True |
mythicshow.use.bb | 允许在聊天中使用 [bb] 展示背包快照 | True |
mythicshow.view | 允许查看别人分享出来的背包快照 GUI | True |
虽然默认都为 true,但如果你的服务器有分组聊天、游客组或特殊世界限制,仍建议在权限插件里显式控制这些节点。
使用教程
安装插件
把 MythicShowItems.jar 放进 plugins 文件夹,启动服务器后会自动生成 config.yml。
按需修改提示文案
你可以自定义展示格式、GUI 标题、提醒消息和无权限提示,适配自己服务器的聊天风格。
配置权限组
把 mythicshow.use.wp、mythicshow.use.bb、mythicshow.view 分配给对应玩家组。
让玩家直接在聊天中使用
玩家输入带有 [wp] 或 [bb] 的消息即可触发展示,不需要额外学习复杂命令。
聊天关键字说明
[wp] 物品展示
展示玩家当前主手物品。鼠标悬浮可查看完整物品详情,如果主手为空,会发送失败提示。
[bb] 背包展示
展示玩家当前背包快照。点击组件后可打开只读 GUI,适合晒掉落、配装和交易确认。
聊天示例
看看我刚打出来的武器 [wp]
今天副本毕业了,背包给你们看 [bb]
我主手是这个 [wp],整套掉落在这 [bb]
源码中的占位替换逻辑支持同一条消息里同时出现 [wp] 和 [bb],所以一行里混用也是可行的。
工作机制
| 阶段 | 源码行为 |
|---|---|
| 聊天监听 | 监听 AsyncChatEvent,发现消息含有 [wp] 或 [bb] 后取消原聊天事件。 |
| 主线程处理 | 把物品和背包读取切回主线程,避免异步线程直接访问 Bukkit 物品 API。 |
[wp] 生成 | 读取主手物品,展示名优先取物品自定义名,否则回退到材质名,并附加悬浮物品详情。 |
[bb] 生成 | 把当前背包内容克隆后缓存到内存 ConcurrentHashMap,生成一个点击执行 /msi view UUID 的组件。 |
| GUI 打开 | 点击后打开 36 格只读 GUI:前三行显示主背包,最后一行显示快捷栏。 |
| 过期清理 | 快照默认 10 分钟过期,并且后台每 5 分钟异步清理一次失效快照。 |
| 交互保护 | 快照 GUI 使用专用 InventoryHolder 标识,点击和拖拽事件都会被取消。 |
当前实现细节:背包 GUI 只展示 36 个常规背包槽位和快捷栏,不包含护甲栏与副手栏。如果你卖点里要写“完整背包”,建议描述成“背包与快捷栏展示”更准确。
聊天格式兼容性要实测
插件会取消原聊天事件并自行广播一条新的消息,所以如果你的服务器同时用了深度改写聊天格式的插件,最好联调测试一次,确认最终显示是否符合预期。
配置文件
插件配置位于 plugins/MythicShowItems/config.yml。首次启动会自动生成,主要分成 messages 和 settings 两部分。
核心配置示例
messages:
wp-format: "&8» &6✦ &e%item_name% &7(悬浮查看)"
bb-format: "&8» &a✦ &f%player_name%的背包 &7(点击查看)"
bb-gui-title: "&8%player_name% 的背包"
settings:
reminder-interval: 30
snapshot-expire-minutes: 10
配置项说明
| 配置项 | 说明 |
|---|---|
messages.wp-empty | 主手没有物品时发给玩家的失败提示,支持多行列表。 |
messages.wp-format | [wp] 在聊天中替换后的显示格式,支持 %item_name%。 |
messages.bb-format | [bb] 在聊天中替换后的显示格式,支持 %player_name%。 |
messages.bb-hover | 鼠标悬浮到背包展示组件时显示的提示内容。 |
messages.bb-gui-title | 背包查看 GUI 标题,支持玩家名占位。 |
messages.reminder | 定时全服提醒内容,在线玩家存在时才会广播。 |
messages.snapshot-expired | 快照已过期时发送给查看者的提示。 |
messages.no-permission | 权限不足时的提示内容。 |
settings.reminder-interval | 提醒广播间隔,单位分钟,默认 30。 |
settings.snapshot-expire-minutes | 背包快照过期时间,单位分钟,默认 10。 |
支持三种颜色写法
源码中的 ColorUtil 同时支持传统 &a 颜色码、十六进制颜色 &#RRGGBB,以及 MiniMessage 标签,因此你可以把聊天风格做得比默认配置更精细。
技术信息
| 项目 | 信息 |
|---|---|
| 插件名称 | MythicShowItems |
| 当前版本 | 1.0 |
| 目标核心 | Paper 1.20.1 |
| API 版本 | 1.20 |
| Java 版本 | 17+ |
| 依赖 | 仅 Paper API,无 Vault / MySQL / PlaceholderAPI 硬依赖 |
| 聊天实现 | Paper AsyncChatEvent + Adventure Component |
| 快照存储 | 内存缓存(ConcurrentHashMap) |
| GUI 类型 | 36 格只读背包查看界面 |
| 清理策略 | 快照过期检查 + 每 5 分钟异步清理一次 |
常见问题
settings.snapshot-expire-minutes 中调整。如果你的服务器很重视“晒装备”“掉落展示”“交易验货”这类社交互动,MythicShowItems 属于非常低成本、见效很快的一类小功能插件。