Skip to content

商店重置版 LyShopReload

MySQL 前置要求

启用 MySQL 存储时,必须安装 LyMySQLCore,并确认它已成功连接数据库。否则玩家货币、个人限购标记、全服限购标记等 MySQL 数据无法正常读取、保存或同步;数据库连接失败时插件会自动卸载。

LyShopReload 是一个基于 GUI 的 Minecraft 多条件商店插件。管理员可以通过 YAML 配置商店页面、商品展示、购买条件、购买货币、限购规则、折扣、开放时间和购买后动作。

玩家在商店中点击商品购买,插件会依次检查展示条件、购买时间、限购标记、前置条件、背包空间和货币余额。购买成功后可获得配置物品,并执行控制台、OP 或玩家指令。

插件信息

项目内容
插件名LyShopReload
插件版本1.2.0
作者Liyuan
Bukkit API1.13
项目编译 APIPaper 1.16.5
软依赖PlaceholderAPIVaultNeigeItemsSX-ItemMythicMobsLyMySQLCoreSX-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 reloadOP重载主配置、货币、限购标记和商店文件。
/lshop debugOP开启或关闭调试模式,调试信息输出到控制台。
/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 文件代表一个商店。商店必须配置唯一的 idname;商店开放后不要修改 id,否则已保存的数据可能无法对应原商店。

商店页面的行数由 size 控制,插件会将数值限制在 112。普通 Minecraft 界面通常使用不超过 6 行的配置;超过 6 行时会突破原版界面限制。

商品通过 items 配置,并使用 slot 指定槽位。商品可以使用物品库 ID,也可以使用 show-item.idshow-item.nameshow-item.lore 直接构造展示物品。

购买检查顺序

购买商品时,插件会检查以下内容:

  1. 商品是否满足显示条件。
  2. 是否需要背包空位,以及玩家是否有空位。
  3. 商品是否处于指定日期开放和结束时间内。
  4. 商品是否处于每日开放时间段内。
  5. 个人限购标记和全服限购标记是否达到上限。
  6. 商品配置的购买前置条件是否满足。
  7. 商店和商品折扣条件是否满足。
  8. 所有购买货币是否足够。

全部条件满足后,插件会扣除货币、增加限购次数、发放商品并执行购买指令。

数据存储

关闭 MySQL 时,玩家货币和个人限购数据保存到插件目录下的本地 YAML 文件,全服限购数据保存到服务器限购数据文件。

启用 MySQL 时,插件通过 LyMySQLCore 连接数据库并保存相关数据。必须先安装 LyMySQLCore,再确认数据库连接成功;仅在配置中打开 mysql.enable 而没有可用数据库连接时,相关数据功能不会生效,插件还会因连接失败自动卸载。

限购刷新

全服限购标记和个人限购标记都需要先在 config.yml 中注册。刷新时间使用“星期几#时:分:秒”的格式,例如:

yaml
refresh:
  - '1#0:0:0'

其中 17 分别表示星期一到星期日。刷新列表为空时,该标记不会自动刷新。插件支持秒级刷新,并会根据上次检查时间补偿服务器卡顿导致的刷新点遗漏。

全服限购标记的缓存按服务器分别维护。使用全服限购的商店不要同时在多个服务器开放,否则不同服务器之间的缓存数量可能不一致。

指令执行

购买后指令支持以下前缀:

前缀执行身份
[console]控制台执行。
[op]以玩家 OP 身份执行。
无前缀由玩家执行。

指令会先处理 PlaceholderAPI 变量,并支持 eval:{}ceil:{}floor:{} 计算表达式。连续购买指令可以使用 {count} 获取本次连续购买成功次数。

注意事项

  • server-tagplayer-tag 中注册的标记名称必须与商店商品中的限购标记名称一致。
  • 全服限购标记不能与个人限购标记重复使用相同的标记名称。
  • 自定义货币 ID 不要使用 vaultpointitem,否则会与内置购买货币类型冲突。
  • 配置自定义货币后,货币显示文本支持 {need}{have}{discount};货币消息支持 {value}{has}
  • 物品材料检测默认读取玩家背包,也可以联动项目中已实现的仓库类插件;带有 prohibited-as-lore-for-materials 配置关键词的物品不会作为材料统计。
  • sync-command 控制购买后指令是否同步执行;comman-event 控制是否额外触发命令事件,默认不额外触发。
  • 重载配置前应确认 YAML 缩进、商店 id、商品槽位和已注册货币名称正确。