RPT 发表于 5 天前

RptBackPack —— 一条指令开随身背包,关界面立刻落库,掉线崩服也不丢东西 [1.21 ~ 26.2]

关于这个插件​RptBackPack 解决的是「玩家需要一个随时能开、又不会弄丢东西的随身背包」。
大部分背包类插件的保存时机是退出游戏或关服,一旦服务端崩了,玩家刚放进背包的装备就没了。RptBackPack 把保存时机提前到关闭界面的一瞬间,并在关服时再兜一层底。
同时它是从设计之初就按 Folia 区域线程写的:读库写库走异步线程,开界面与读写玩家状态回到玩家自己的区域线程,跨线程传递的只有物品快照克隆。
功能说明​1. 一条指令,随时打开​

指令权限说明
/rptbp 或 /rptbp openrptbp.use(默认所有玩家)打开自己的随身背包
/rptbp <玩家>rptbp.admin.others(默认 OP)查看与编辑他人背包,目标可离线
/rptbp reloadrptbp.admin(默认 OP)重载 config.yml,不必重启服务端
/rptbp help无显示指令帮助

主指令 /rptbp,兼容别名:/backpack、/bp、/bb;旧命令 /bpreload 不带参数时等价于 reload。

2. 关闭界面立刻落库(核心)​
[*]玩家一关界面就写库,不需要等他退出游戏。
[*]玩家退出游戏时按 auto-save-quit 再存一次(默认开)。
[*]关服时对所有还在缓存里的背包做一次同步保存。

3. 容量可配,改小不丢数据​
[*]backpack-row 可设 1~6 行(9~54 格),改完 /rptbp reload 即可对新打开的界面生效。
[*]把行数改小不会删东西:超出当前容量的物品仍然留在数据库里,把行数调回去就能重新看到,并会在控制台提示有多少格超出。

4. 管理员查看离线玩家背包​
[*]/rptbp <玩家> 可以直接打开离线玩家的背包,处理装备找回、违规物品清理这类事不用等人上线。
[*]目标在线时也能查看;此时插件会把管理员改完的内容同步回该玩家手里的那份界面,避免两边看到的不是同一份数据。
[*]若目标此刻也正开着背包,插件会给管理员一条提醒:对方的关闭动作会覆盖这次改动。

5. 界面标题可自定义​
[*]title(本人视角)与 title-other(管理员视角,{player} 会替换成该玩家名字)都支持 MiniMessage 富文本。
[*]配置写错(空值或语法非法)只会退回默认标题并在控制台提示,不会影响使用。

6. 完全适配 Folia​
[*]已声明 folia-supported: true。
[*]读库/写库在异步线程;创建与读取界面、开界面、发消息都在玩家自己所在的区域线程。
[*]跨线程传递的只有 Map<Integer, ItemStack> 克隆快照,绝不把 Inventory 本身带出线程。
[*]写库带单调递增序号,异步池乱序完成时旧快照会被丢弃,不会出现「旧数据盖掉新改动」。

7. 数据与依赖​
[*]内嵌 SQLite(WAL 模式),单文件 plugins/RptBackPack/backpack.db,不需要 MySQL。
[*]物品按 ItemStack#serializeAsBytes() 存 BLOB,与 RPTCheckIn / RPTMarket 同一套存法。
[*]无任何外部依赖:不需要经济插件、不需要 PlaceholderAPI。

支持版本与环境​
项目说明
Minecraft 版本1.21 ~ 26.2(api-version: 1.21,字节码目标 Java 21)
服务端核心Folia、Paper(已声明 folia-supported: true)
Java 运行环境Java 21 及以上
不支持1.20.x 及以下(api-version 为 1.21,低版本核心会拒绝加载)
外部依赖无

本轮实测环境:Folia 26.2-7(实现 API 26.2.build.7-beta)+ Java 25,插件加载、启用、reload 与优雅关服均无异常。

目标用户​
[*]生存服 / 原版服服主 —— 给玩家一个随身背包,不用再回主城找箱子。
[*]正在使用 Folia 核心的服主 —— 大量背包插件在 Folia 上会因跨线程操作实体或界面而报错,本插件按区域线程调度编写。
[*]需要远程处理玩家物品的管理员 —— 离线玩家背包也能直接打开,找回装备、清理违规物品不用等他上线。
[*]被「崩服丢装备」坑过的服主 —— 关闭界面立刻落库,把丢失窗口压到最小。

是否付费​完全免费。 不需要授权、不需要联网校验,下载即用。
获取作者帮助​
途径内容
交流群QQ 群 1124248111
作者 QQ2221899680
游戏内输入 /rptbp help 查看指令与说明

使用教程​安装​
[*]将 RptBackPack-1.0.0.jar 放入服务端 plugins/ 目录。
[*]重启服务端,首次启动会生成 plugins/RptBackPack/config.yml 与数据库文件 backpack.db。
[*]需要调整配置时执行 /rptbp reload,无需重启服务端。

权限节点​
权限默认值说明
rptbp.use所有玩家打开自己的随身背包
rptbp.admin仅 OP/rptbp reload 重载配置
rptbp.admin.others仅 OP/rptbp <玩家> 查看与编辑他人背包

主要配置项(config.yml)​
配置项默认值说明
backpack-row3背包行数 1~6(每行 9 格)。改小不删数据
title<gold><bold>RPT私人背包</bold></gold>本人视角界面标题,支持 MiniMessage
title-other…<white>{player}管理员视角标题,{player} = 目标玩家名
auto-save-quittrue退出游戏时是否再保存一次(关界面时始终会存)
database-filebackpack.db数据库文件名(相对插件数据目录)
reload-msg / no-perm / no-perm-others / player-not-found / other-online-warn / load-failed—各类提示文案,均可改

常见问题​
[*]问:/rptbp <玩家> 提示「找不到该玩家」? 说明这个名字在背包数据库里没有记录(该玩家从未打开过随身背包)。在线玩家不受此限制。
[*]问:/rptbp <玩家> 提示「该玩家在线,若他此刻也开着背包,他关闭时会覆盖你的改动」? 这是在提醒并发编辑:对方手里的界面是同一份数据的另一个视图。让他先关掉背包,或者你改完让他重新打开一次即可。
[*]问:我把 backpack-row 从 6 改成 3,超出的东西去哪了? 还留在数据库里,没有删。调回 6 并 /rptbp reload 就能看到;控制台会提示「有 N 格物品超出当前容量」。
[*]问:需要装 MySQL 或经济插件吗? 都不需要,开箱即用。
[*]问:支持 Folia 吗? 支持,folia-supported: true,按区域线程调度编写。

声明​
[*]本插件为原创作品,保留所有权利,默认不允许转载与整合。如需转载或整合进服务端整合包,请先通过上方交流群或作者 QQ 联系获取授权。
[*]本插件未使用任何混淆手段,欢迎安全审查。
[*]本插件不含任何后门、病毒或远程控制代码,不收集任何玩家数据。


页: [1]
查看完整版本: RptBackPack —— 一条指令开随身背包,关界面立刻落库,掉线崩服也不丢东西 [1.21 ~ 26.2]