0.27.6 货币名称配置与热重载
宠物币、金币、点券名称配置,成功重载后重开双商城生效,失败保留旧名和原有结算规则。
更新日期:2026-08-31;对应成品:LiPet-0.27.6-SNAPSHOT.jar。
本版让宠物商城和宠物道具商城统一使用可配置的货币名称,并修复修改名称后执行 /lipet reload 仍显示旧名称的问题。PlayerPoints 默认显示“点券”,Vault 默认显示“金币”,内置货币默认显示“宠物币”。
配置货币名称
编辑服务器的 plugins/LiPet/config.yml。如果已有 currency 节点,只合并下方缺失子节点,保留自己的初始余额,不要再添加第二个同名根节点。
# 三种货币的显示设置;名称不会改变商店支付 ID 或真实扣款方式。
currency:
# LiPet 内置货币,对应 shop.yml 的 INTERNAL。
internal:
# 非空单行文本,支持 MiniMessage;成功重载后同步商城、余额指令和奖励提示。
display-name: "宠物币"
# 首次创建内置货币账户的余额,范围大于等于 0;仅启动时读取。
# 已有账户不会被重设,修改显示名称并重载也不会改变初始余额设置。
initial-balance: 1000.0
# Vault 经济货币,对应 shop.yml 的 VAULT;需要 Vault 和已挂钩的经济插件。
vault:
# 非空单行文本,支持 MiniMessage;默认“金币”,成功重载后用于两个商城。
display-name: "金币"
# PlayerPoints 点数,对应 shop.yml 的 PLAYERPOINTS;需要启用 PlayerPoints。
playerpoints:
# 非空单行文本,支持 MiniMessage;默认“点券”,可改成“积分”等自定义名称。
display-name: "点券"
支付选择仍写在 shop.yml 的商品配置中:
# 合并到已有商品节点;这里只展示支付字段,不是可独立使用的完整商品。
# 提供器 ID 只能填写已支持的 INTERNAL、VAULT、PLAYERPOINTS,不要改为“点券”。
currency: "PLAYERPOINTS"
# 商品价格必须大于等于 0;使用 PlayerPoints 时必须为整数金额。
# 100.0 和 100.00 都表示整数 100,100.5 不适用于 PlayerPoints。
price: 100.0
例如 price: 100.0 的 PlayerPoints 商品默认显示 100.00 点券。把 currency.playerpoints.display-name 改成“积分”后显示 100.00 积分;本次仅改变货币文字,100.00 的数字格式、商品价格、玩家余额与实际扣款逻辑保持不变。
两个商城的默认 Lore 使用 <currency> 变量。管理员自定义 Lore 如果直接写了 PlayerPoints、Vault 或其他固定名称,需要把相应文字改成 <currency>,才能跟随名称配置变化。没有安装或启用对应经济插件时,改名不会使该货币变得可用;仍需通过 /lipet status 检查挂钩状态。
升级与生效步骤
- 停服并备份
plugins/LiPet/和数据库。 - 替换为
LiPet-0.27.6-SNAPSHOT.jar,确保目录中只保留一个 LiPet 插件 Jar。 - 启动服务器,执行
/lipet status确認当前版本与经济插件状态。首次换 Jar 必须重启一次,旧版/lipet reload不会加载新代码。 - 修改
config.yml的三个currency.*.display-name中需要调整的名称。 - 执行
/lipet reload,等待明确的成功提示。 - 关闭已经打开的商城,再分别执行
/lipet shop、/lipet itemshop检查名称。已打开的菜单不会自动重绘。
完成首次升级后,只修改货币名称无需再次重启服务器;成功重载并重新打开菜单即可。
重载与旧配置保护
名称由独立快照集中管理,已有货币提供器和注册表通过动态读取取得最新名称,无需重建余额账户、奖励服务或商店服务。
- 候选配置先完整校验;数据库结果为无需切换(
NO_CHANGE)或切换成功(SWITCHED)后,才统一发布新的名称快照。 - 配置无效、重载异常或数据库切换失败时保留已经生效的名称,不会提前显示尚未成功加载的新名称。
- 并发重载请求被拒绝时不会发布该请求中的候选名称;正在执行的那一次仍按自己的成功或失败结果处理。
- 旧配置仅补缺失节点与中文注释,不覆盖已有自定义名称、注释、商品价格或
shop.yml的支付 ID。 server.id、服务器群组与currency.internal.initial-balance继续按启动时读取;本次名称热重载不扩大这些配置的生效范围。- 内置货币名称成功更新后,使用该名称的余额指令与奖励提示也同步更新;数据库中的余额和结算精度不变。
验证结果
- 默认构建与 Paper 26.2 API Profile 各 216 项测试通过,失败、错误、跳过均为 0。
- 同一最终 Jar 在隔离的 Paper 26.1.2 与 Paper 26.2 Build 111 + PlayerPoints 3.3.5 环境完成服务端 GUI 探针,两个服务端均输出默认名称、重载和支付检查通过,并安全关闭。
- 探针通过实际
PetGuiService创建两个商城的物品栏,检查商品 ItemStack Lore 默认包含100.00 点券。执行真实/lipet reload、数据库保持不变后,同一 GUI 服务及货币注册表生成的 Lore 改为“星光点券”,内置货币名称同步改为“伙伴币”。 - 重载前后
server.id、server.group和启动时的初始余额配置保持不变;自定义配置注释保留。 - 实际 PlayerPoints 网关先建立 100 点测试余额,再通过生产货币 Provider 扣除 40 点,余额核对为 60;探针结束后已清理测试余额。
- 成品 SHA-256:
8E8EB3093CFADE993F57FBEFE0D3C69BAE1D76AE47FEF0B303FE482807F035EF。
以上 GUI 验证检查的是服务端生成的真实物品栏与 Lore,不是玩家进服后的真人客户端视觉测试。本轮实际支付探针覆盖 PlayerPoints;不能把该结果表述为 Vault 经济插件或所有客户端界面的实测。