商店重置版 LyShopReload
MySQL 前置要求
启用 MySQL 存储时,必须安装 LyMySQLCore,并确认它已成功连接数据库。否则玩家货币、个人限购标记、全服限购标记等 MySQL 数据无法正常读取、保存或同步;数据库连接失败时插件会自动卸载。
LyShopReload 是一个基于 GUI 的 Minecraft 多条件商店插件。管理员可以通过 YAML 配置商店页面、商品展示、购买条件、购买货币、限购规则、折扣、开放时间和购买后动作。
玩家在商店中点击商品购买,插件会依次检查展示条件、购买时间、限购标记、前置条件、背包空间和货币余额。购买成功后可获得配置物品,并执行控制台、OP 或玩家指令。
插件信息
| 项目 | 内容 |
|---|---|
| 插件名 | LyShopReload |
| 插件版本 | 1.2.0 |
| 作者 | Liyuan |
| Bukkit API | 1.13 |
| 项目编译 API | Paper 1.16.5 |
| 软依赖 | PlaceholderAPI、Vault、NeigeItems、SX-Item、MythicMobs、LyMySQLCore、SX-Attribute |
插件项目使用 Java 8 兼容配置。项目证据明确包含 Bukkit API 1.13 声明和 Paper 1.16.5 编译依赖;其它 Minecraft 版本是否兼容,需要以实际服务器测试结果为准。
玩法
- GUI 商店:每个商店独立配置标题、行数、权限和商品槽位。
- 多种购买货币:支持 Vault 金币、PlayerPoints 点券、物品、注册货币、CraftX 数字变量,以及项目中实现的其它经济接口类型。
- 多条件购买:支持权限条件、PlaceholderAPI 条件、显示条件和购买失败提示。
- 多级折扣:商店和商品都可以配置折扣条件,满足多个条件时使用折扣力度更高的条件,并叠加商店与商品折扣计算。
- 限购系统:支持个人限购标记和全服限购标记,可配置刷新时间和显示文本。
- 时间限制:商品可以设置指定日期开放、指定日期结束,以及每天的开放时间段。
- 连续购买:左键、右键、Shift 左键和 Shift 右键可以分别配置购买次数。
- 购买结果:购买后可以给予物品、执行指令、发送成功或失败消息,并按权重随机执行指令组。
- 数据保存:支持 YAML 本地存储,也支持 MySQL 存储。
- PlaceholderAPI:提供货币、限购次数、背包空位、商品可购买状态和价格查询变量。
- 自动保存与刷新:支持定时保存数据,并按配置的星期、时分秒刷新限购标记。
指令
主命令:/lshop
管理类指令需要执行者为 OP。指令中的玩家参数必须是在线玩家;部分指令支持使用 {online} 指代所有在线玩家。
| 指令 | 执行要求 | 说明 |
|---|---|---|
/lshop reload | OP | 重载主配置、货币、限购标记和商店文件。 |
/lshop debug | OP | 开启或关闭调试模式,调试信息输出到控制台。 |
/lshop open <商店id> | 玩家 | 打开指定商店。商店权限仍按商店配置检查。 |
/lshop open <商店id> <玩家> | OP | 尝试让指定在线玩家打开商店。 |
/lshop close | 玩家 | 关闭当前界面。 |
/lshop limit clear <玩家> | OP | 将指定在线玩家所有带刷新时间的个人限购标记设置为 0。 |
/lshop limit set <玩家或$> <标记id> <次数> | OP | 设置个人或全服限购标记的已购买次数;玩家参数使用 $ 时操作全服标记。 |
/lshop limit give <玩家或$> <标记id> <次数> | OP | 增加个人或全服限购标记的已购买次数。 |
/lshop limit take <玩家或$> <标记id> <次数> | OP | 扣除个人或全服限购标记的已购买次数。 |
/lshop buy <玩家或{online}> <商店id> <槽位id> | OP | 控制指定玩家尝试购买指定槽位商品一次。使用 {online} 时操作所有在线玩家。 |
/lshop buy <玩家或{online}> <商店id> <槽位id> <次数> | OP | 控制指定玩家尝试购买指定槽位商品多次。使用 {online} 时操作所有在线玩家。 |
/lshop player-buy <商店id> <槽位id> <次数> | 玩家 | 由玩家自行尝试购买指定商店指定槽位商品。 |
/lshop give <玩家或{online}> <货币id> <数量> | OP | 增加已注册货币;数量支持插件计算表达式。 |
/lshop take <玩家或{online}> <货币id> <数量> | OP | 扣除已注册货币;数量支持插件计算表达式。 |
/lshop set <玩家或{online}> <货币id> <数量> | OP | 设置已注册货币;数量支持插件计算表达式。 |
/lshop limit 指令中的次数表示已经购买的次数,将标记设置为 0 即可达到刷新后的初始状态。个人限购标记和全服限购标记必须先在 config.yml 中注册。
配置与文档
| 页面 | 内容 |
|---|---|
| 配置说明 | config.yml 的调试、限购标记、货币、消息、保存、刷新和 MySQL 配置。 |
| 商店配置 | shop/*.yml 的商店、商品、展示物品、购买条件、货币、折扣、时间和购买动作。 |
| 插件变量 | PlaceholderAPI 变量,包括限购次数、注册货币、背包空位、可购买状态和价格查询。 |
| 常见问题 | 配置加载、MySQL、限购刷新、货币和 GUI 相关问题。 |
| 更新日志 | 文档更新记录。 |
重要机制
商店与商品
商店文件位于插件目录的 shop/ 文件夹中,每个 YAML 文件代表一个商店。商店必须配置唯一的 id 和 name;商店开放后不要修改 id,否则已保存的数据可能无法对应原商店。
商店页面的行数由 size 控制,插件会将数值限制在 1 到 12。普通 Minecraft 界面通常使用不超过 6 行的配置;超过 6 行时会突破原版界面限制。
商品通过 items 配置,并使用 slot 指定槽位。商品可以使用物品库 ID,也可以使用 show-item.id、show-item.name 和 show-item.lore 直接构造展示物品。
购买检查顺序
购买商品时,插件会检查以下内容:
- 商品是否满足显示条件。
- 是否需要背包空位,以及玩家是否有空位。
- 商品是否处于指定日期开放和结束时间内。
- 商品是否处于每日开放时间段内。
- 个人限购标记和全服限购标记是否达到上限。
- 商品配置的购买前置条件是否满足。
- 商店和商品折扣条件是否满足。
- 所有购买货币是否足够。
全部条件满足后,插件会扣除货币、增加限购次数、发放商品并执行购买指令。
数据存储
关闭 MySQL 时,玩家货币和个人限购数据保存到插件目录下的本地 YAML 文件,全服限购数据保存到服务器限购数据文件。
启用 MySQL 时,插件通过 LyMySQLCore 连接数据库并保存相关数据。必须先安装 LyMySQLCore,再确认数据库连接成功;仅在配置中打开 mysql.enable 而没有可用数据库连接时,相关数据功能不会生效,插件还会因连接失败自动卸载。
限购刷新
全服限购标记和个人限购标记都需要先在 config.yml 中注册。刷新时间使用“星期几#时:分:秒”的格式,例如:
yaml
refresh:
- '1#0:0:0'其中 1 到 7 分别表示星期一到星期日。刷新列表为空时,该标记不会自动刷新。插件支持秒级刷新,并会根据上次检查时间补偿服务器卡顿导致的刷新点遗漏。
全服限购标记的缓存按服务器分别维护。使用全服限购的商店不要同时在多个服务器开放,否则不同服务器之间的缓存数量可能不一致。
指令执行
购买后指令支持以下前缀:
| 前缀 | 执行身份 |
|---|---|
[console] | 控制台执行。 |
[op] | 以玩家 OP 身份执行。 |
| 无前缀 | 由玩家执行。 |
指令会先处理 PlaceholderAPI 变量,并支持 eval:{}、ceil:{} 和 floor:{} 计算表达式。连续购买指令可以使用 {count} 获取本次连续购买成功次数。
注意事项
server-tag和player-tag中注册的标记名称必须与商店商品中的限购标记名称一致。- 全服限购标记不能与个人限购标记重复使用相同的标记名称。
- 自定义货币 ID 不要使用
vault、point或item,否则会与内置购买货币类型冲突。 - 配置自定义货币后,货币显示文本支持
{need}、{have}、{discount};货币消息支持{value}和{has}。 - 物品材料检测默认读取玩家背包,也可以联动项目中已实现的仓库类插件;带有
prohibited-as-lore-for-materials配置关键词的物品不会作为材料统计。 sync-command控制购买后指令是否同步执行;comman-event控制是否额外触发命令事件,默认不额外触发。- 重载配置前应确认 YAML 缩进、商店
id、商品槽位和已注册货币名称正确。