配置说明
LyShopReload 的全局配置位于 plugins/LyShopReload/config.yml,商店配置位于 plugins/LyShopReload/shop/。修改 config.yml 或 shop/ 下的商店文件后,可以使用 /lshop reload 重载配置。
商店文件中的
id用于指令和数据存储。商店正式开放后不要修改该值,否则可能导致已有数据无法对应。
配置文件
| 文件 / 目录 | 用途 |
|---|---|
config.yml | 调试、限购标记、展示文本、购买行为、消息、自动保存、数据库和自定义货币 |
shop/ | 每个商店的界面、商品、价格、条件、限购和购买后行为 |
全局配置
基础设置
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
debug | 布尔值 | false | 是否默认启用调试模式。也可以通过 /lshop debug 临时切换。 |
sync-command | 布尔值 | true | 是否同步执行购买成功后的指令。关闭后会通过任务执行。 |
comman-event | 布尔值 | false | 是否额外触发命令事件。开启后,控制台执行的购买后指令会额外触发 ServerCommandEvent。默认关闭,避免被监听器重复处理。 |
click-cooldown | 整数 | 200 | 商店界面点击冷却时间,单位为毫秒。 |
default-right-buy-count | 整数 | 1 | 商品未单独配置时,普通右键连续购买的最大次数。 |
default-shift-left-buy-count | 整数 | 1 | 商品未单独配置时,Shift 左键连续购买的最大次数。 |
default-shift-right-buy-count | 整数 | 1 | 商品未单独配置时,Shift 右键连续购买的最大次数。 |
loop-save-thread-time | 整数 | 6000 | 定时保存间隔,单位为秒。设置为 0 或负数时关闭定时保存任务。 |
time-format | 字符串 | yyyy年MM月dd日 HH:mm:ss | 商品开始购买时间和结束购买时间的展示格式。 |
currency-split-key | 字符串 | : | 商品 buy-currency 中各部分的分隔符。 |
hide-command-tips | 布尔值 | true | 是否隐藏货币管理指令执行后的提示消息。 |
hide-currency-message | 布尔值 | false | 是否隐藏控制台中的自定义货币变动消息。玩家消息不受此项影响。 |
示例:
yaml
debug: false
sync-command: true
comman-event: false
click-cooldown: 200
default-right-buy-count: 1
default-shift-left-buy-count: 1
default-shift-right-buy-count: 1
loop-save-thread-time: 6000
time-format: 'yyyy年MM月dd日 HH:mm:ss'
currency-split-key: ':'
hide-command-tips: true
hide-currency-message: false材料统计排除
prohibited-as-lore-for-materials 用于排除背包中带有指定描述文本的物品。商品使用物品名称、物品描述或原版物品 ID 作为材料时,包含这些关键词的物品不会被统计,也不会被扣除。
该配置只处理玩家背包中的物品,不处理战利品仓库中的物品。颜色代码需要使用 §。
yaml
prohibited-as-lore-for-materials:
- '不可作为材料'限购标记
限购标记需要先在 config.yml 中注册,再在商店商品的 server-limit-tag 或 player-limit-tag 中引用。修改注册内容后需要重载配置。
全服限购标记
server-tag 保存全服共享的购买次数。所有服务器实例都可能分别缓存全服标记,因此同一个带全服限购的商店不要同时对多个服务器开放,否则可能出现次数不一致。
yaml
server-tag:
全服每周限购标记1:
display: '&e全服每周购买上限: {now}/{max}'
refresh:
- '1#0:0:0'| 配置项 | 说明 |
|---|---|
server-tag.<标记 ID>.display | 商品追加 Lore 中的显示文本。{now} 会替换为当前已购买次数,{max} 会替换为商品配置的购买上限。 |
server-tag.<标记 ID>.refresh | 刷新时间列表。列表为空时不自动刷新。 |
个人限购标记
player-tag 保存每名玩家独立的购买次数。个人标记数据会根据当前存储方式保存到本地 YAML 或 MySQL。
yaml
player-tag:
个人每周限购标记1:
display: '&e个人每周购买上限: {now}/{max}'
refresh:
- '1#0:0:0'| 配置项 | 说明 |
|---|---|
player-tag.<标记 ID>.display | 商品追加 Lore 中的显示文本。{now} 会替换为玩家当前已购买次数,{max} 会替换为商品配置的购买上限。 |
player-tag.<标记 ID>.refresh | 刷新时间列表。列表为空时不自动刷新。 |
刷新时间格式
刷新时间格式为:
text
星期几#时:分:秒星期使用 1-7 表示周一至周日。例如:
yaml
refresh:
- '1#0:0:0'1#0:0:0 表示每周一 00:00:00 刷新。秒数可以省略,省略时按 0 秒处理。需要每天刷新时,应分别配置一周七天的刷新时间。设置为空列表表示不自动刷新:
yaml
refresh: []刷新任务按秒级时间判断,并会补偿服务器卡顿导致的检查间隔跳过。玩家离线期间经过刷新点时,重新加载玩家数据也会根据存档时间和下一次刷新点判断是否重置。
警告
带有全服限购标记的商店不要同时对多个服务器开放。不同服务器的缓存可能不同,容易导致全服购买次数不一致。
展示文本
lore-replace 用于生成商品 Lore 中的购买条件、购买货币和限购信息。商品需要在 extra-lore 中使用对应占位文本,例如 {购买货币} 或 {限购信息},才会插入这些内容。
配置项
| 配置项 | 用途 | 可用占位符 |
|---|---|---|
lore-replace.vault | Vault 经济余额展示。 | {need}、{discount} |
lore-replace.point | PlayerPoints 点券展示。 | {need}、{discount} |
lore-replace.item | 按物品名称或名称与 Lore 检测的材料展示。 | {item}、{need}、{has}、{discount} |
lore-replace.lore | 仅按物品 Lore 检测的材料展示。 | {item}、{need}、{has}、{discount} |
lore-replace.id-物品 ID-子 ID | 原版物品 ID 与子 ID 材料展示。 | {need}、{discount} |
lore-replace.cx-变量 ID | CraftX 数值变量材料展示。 | {need}、{discount} |
lore-replace.<自定义货币 ID> | 注册货币通过货币自身的 display 配置展示,不使用此处配置。 | — |
lore-replace.open-time | 每日开放时间展示。 | {time} |
lore-replace.can-be-purchased-time-start | 商品尚未到开始购买时间时的展示。 | {time} |
lore-replace.can-be-purchased-time-end | 商品即将结束购买时的展示。 | {time} |
示例:
yaml
lore-replace:
vault: '&7需要: 金币x{need} / %vault_eco_balance_fixed% &6{discount}'
point: '&7需要: 点券x{need} / %playerpoints_points% &6{discount}'
item: '&7需要: {item}x{need}&7(你有{has}) &6{discount}'
lore: '&7需要: 有{item}&7LORE的物品x{need} &6{discount}'
id-1-0: '&7需要: &e石头x{need} &6{discount}'
cx-变量id: '&7需要: &e变量idx{need} &6{discount}'
open-time: '&4该商品每日&e{time}&4时间段可购买.'
can-be-purchased-time-start: '&4该商品将于&e{time}&4后开放购买.'
can-be-purchased-time-end: '&4该商品将在&e{time}&4后无法购买.'消息
message 提供全局购买结果消息。商品配置了对应的 buy-success-message 或 buy-fail-message 后,会优先使用商品消息;未配置时使用全局消息。
| 配置项 | 占位符 | 说明 |
|---|---|---|
message.购买成功 | — | 单次购买成功时使用。 |
message.连续购买 | {amount} | 连续购买结束时使用,{amount} 为本次成功购买次数。 |
message.购买失败 | — | 购买条件、货币或其他限制不满足时使用。 |
message.上限 | — | 达到全服或个人限购上限时使用。 |
yaml
message:
购买成功: '购买成功'
连续购买: '购买停止,本次连续购买了{amount}次'
购买失败: '购买失败 条件不足'
上限: '已达购买上限'数据库
LyShopReload 支持本地 YAML 存储和 MySQL 存储。mysql.enable 为 false 时使用本地数据文件;设置为 true 时使用 MySQL。
MySQL 前置要求
启用 MySQL 存储前,必须安装 LyMySQLCore,并确认它已经成功连接数据库。LyMySQLCore 未加载或连接失败时,本插件不会正常启用 MySQL 相关功能,玩家数据、限购标记及相关记录不会生效。
MySQL 配置
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
mysql.enable | 布尔值 | false | 是否启用 MySQL 存储。 |
mysql.databasename | 字符串 | mc2 | MySQL 数据库名称。 |
mysql.username | 字符串 | mc2 | 数据库用户名。 |
mysql.password | 字符串 | mc1234 | 数据库密码。 |
mysql.port | 整数 | 3306 | MySQL 端口。 |
mysql.ip | 字符串 | 127.0.0.1 | MySQL 地址。 |
yaml
mysql:
enable: false
databasename: mc2
username: mc2
password: mc1234
port: 3306
ip: 127.0.0.1启用或关闭数据库存储后建议重启服务器。成功连接后,插件会检查并创建以下数据表:
<插件名称>_player_tag:个人限购标记和刷新时间数据。<插件名称>_server_tag:全服限购标记数据。<插件名称>_currency:注册货币数据。
未启用 MySQL 时,玩家货币和个人限购标记保存在插件目录下的 playerdata/,全服限购标记保存在 serverdata/limittag.yml。
自定义货币
register-currency 用于注册 LyShopReload 内部货币。货币 ID 不能使用 vault、point 或 item,否则会与内置货币类型冲突。
配置项
| 配置项 | 类型 | 说明 |
|---|---|---|
register-currency.<货币 ID>.display | 字符串 | 商品 Lore 中的货币展示文本。支持 {need}、{have} 和 {discount}。 |
register-currency.<货币 ID>.max | 整数 | 玩家该货币的最大持有量。未配置时使用最大整数值。 |
register-currency.<货币 ID>.message | 字符串 | 货币变动时发送给玩家的消息。可选,删除该节点即可关闭该消息。支持 {value} 和 {has}。 |
yaml
register-currency:
jb:
display: '&7需要: &b只因币x{need} / 你有{have} &6{discount}'
max: 10000
message: '&7你的只因币 {value} , 你现在总共有 {has} 个只因币.'注册后,可以在商品 buy-currency 中使用:
yaml
buy-currency:
- 'jb:5'注册货币还可以通过 /lshop give、/lshop take 和 /lshop set 管理。货币余额变量格式为 %lshop_currency-货币ID%。
商店文件
商店文件放在 shop/ 目录下,每个 YAML 文件对应一个商店。插件重载时会读取该目录中的商店文件;内置的 shop/示例商店.yml 会在重载时重新生成并覆盖,主要用于展示配置格式,不建议直接修改它作为正式商店。
商店基础配置
| 配置项 | 类型 | 说明 |
|---|---|---|
id | 字符串 | 商店 ID,用于打开商店、购买操作和数据对应。不能为空,正式使用后不要修改。 |
name | 字符串 | 商店界面标题。支持 & 颜色代码。不能为空。 |
permission | 字符串 | 打开商店所需权限。未配置时不限制权限。 |
size | 整数 | 商店行数,范围会被限制为 1-12,每行 9 个槽位。大于 6 行时会突破原版界面限制。 |
discount | 字符串列表 | 商店级折扣条件。符合多个条件时取折扣值更小的一个,并与商品级折扣共同计算。 |
open-shop-command | 字符串列表 | 打开商店时执行的指令。可选。 |
close-shop-command | 字符串列表 | 关闭商店时执行的指令。可选。 |
items | 节点 | 商品配置。商品必须配置 slot 才会载入。 |
示例:
yaml
id: '示例'
name: '&6示例商店'
permission: 'lyshop.open'
size: 6
discount:
- 'permission:{lshop.buy.7}<->0.12'
open-shop-command: []
close-shop-command: []
items: {}商店级折扣格式为:
text
条件<->折扣值支持权限条件和 PlaceholderAPI 条件,例如:
yaml
discount:
- 'permission:{lshop.buy.7}<->0.12'
- 'papi:{%player_level% > 3}<->0.5'折扣值 1 表示原价,0.5 表示五折,0.12 表示 12% 价格。商店级和商品级折扣都会参与计算,最终取符合条件的最小折扣值。
商品基础配置
商品节点名称只是配置中的商品 ID,商品显示名称由 show-item 或 show-item.name 决定。
| 配置项 | 类型 | 说明 |
|---|---|---|
items.<商品 ID>.slot | 整数 | 商品所在槽位,从 0 开始。第一行是 0-8,第二行是 9-17,依此类推。未配置时商品不会载入。 |
items.<商品 ID>.show-item | 字符串或节点 | 商品展示物品。字符串可以使用物品库 ID;节点形式可以配置原版物品 ID、名称和 Lore。 |
items.<商品 ID>.give-item | 字符串 | 购买成功后给予玩家的物品。留空或删除时不发放物品。 |
items.<商品 ID>.amount | 整数 | 展示物品和给予物品的数量。默认值为 1。 |
items.<商品 ID>.force-need-slot | 布尔值 | 是否要求玩家背包至少有一个空位才能购买。默认值为 true。 |
items.<商品 ID>.show-condition | 字符串列表 | 商品显示条件。任意条件不满足时,商品不会显示,也不能通过购买指令购买。 |
items.<商品 ID>.extra-lore | 字符串列表 | 追加到展示物品 Lore 的文本和动态占位符。 |
展示物品支持物品库格式,例如:
yaml
show-item: 'MythicMobs#测试'
give-item: 'MythicMobs#测试'也可以使用原版物品 ID 节点:
yaml
show-item:
id: '160:0'
name: '&a按钮'
lore:
- ''
- '&7这是一个简单的按钮'项目中示例使用了 MythicMobs#、NeigeItems# 和 SX-Item# 格式。具体物品是否可用取决于对应物品插件是否已安装并正常提供物品。
商品 Lore 占位符
extra-lore 中支持以下动态内容:
| 占位符 | 说明 |
|---|---|
{物品信息} | 插入展示物品自身的 Lore。 |
{购买条件} | 插入 buy-condition 中每条条件分隔符 <-> 前面的展示文本。 |
{购买货币} | 插入商品配置的货币和材料需求,并计算当前玩家可用的折扣。 |
{限购信息} | 插入全服限购、个人限购、每日开放时间、开始购买时间和结束购买时间。 |
示例:
yaml
extra-lore:
- ''
- '{物品信息}'
- '{购买条件}'
- '{购买货币}'
- '{限购信息}'
- '&e左键购买1次'
- '&a右键连续购买'商品时间限制
| 配置项 | 格式 | 说明 |
|---|---|---|
can-be-purchased-time-start | 年-月-日-时-分-秒 | 商品开始允许购买的绝对时间。删除后不限制开始时间。 |
can-be-purchased-time-end | 年-月-日-时-分-秒 | 商品结束允许购买的绝对时间。删除后不限制结束时间。 |
every-day-open-time | 时:分-时:分 | 每日允许购买的时间段,使用 24 小时制。删除后全天开放。 |
示例:
yaml
can-be-purchased-time-start: '2022-12-3-5-25-20'
can-be-purchased-time-end: '2032-12-3-6-25-20'
every-day-open-time: '00:00-23:59'can-be-purchased-time-start 和 can-be-purchased-time-end 使用 config.yml 中的 time-format 生成展示文本。every-day-open-time 格式错误时会自动按全天开放处理,并在控制台提示。
商品限购
| 配置项 | 类型 | 说明 |
|---|---|---|
items.<商品 ID>.server-limit-tag | 节点 | 引用全服限购标记。键为已注册标记 ID,值为该商品的最大购买次数。 |
items.<商品 ID>.player-limit-tag | 节点 | 引用个人限购标记。键为已注册标记 ID,值为每名玩家的最大购买次数。 |
示例:
yaml
server-limit-tag:
全服每周限购标记1: 1
player-limit-tag:
个人每周限购标记1: 1商品购买成功后,对应限购标记增加一次。达到配置数量后无法继续购买。标记值为 0 时表示当前周期内尚未购买。
商品购买条件
buy-condition 是购买前置条件列表,每行格式为:
text
显示文本<->检测条件<->失败消息第三段失败消息可省略。检测条件支持权限条件和 PlaceholderAPI 条件。
yaml
buy-condition:
- '&7需要: 等级大于3级才可购买<->papi:{%player_level% > 3}<->&c购买失败! 你需要等级大于3级才可购买!'
- '&7需要: 拥有lshop.buy权限<->permission:{lshop.buy}<->&c购买失败! 你需要拥有lshop.buy权限!'show-condition 使用相同的条件检测格式,但商品不会显示失败消息:
yaml
show-condition:
- 'permission:{lshop.show.1}'
- 'nopermission:{lshop.show.1}'
- 'papi:{%player_level% >= 0}'商品购买货币
buy-currency 是字符串列表,每行表示一种货币或材料。默认分隔符为 :,可通过 currency-split-key 修改。
| 类型 | 格式 | 说明 |
|---|---|---|
vault | vault:数量 | 使用 Vault 经济余额。 |
point | point:数量 | 使用 PlayerPoints 点券。 |
coupon | coupon:数量 | 使用优惠券余额。 |
id | id:物品 ID:子 ID:数量 | 使用原版物品 ID 和子 ID 材料。 |
item | item:名称:数量 | 使用指定名称的物品。 |
item | item:名称:Lore:数量 | 使用指定名称和 Lore 的物品。 |
item | item::Lore:数量 | 仅使用指定 Lore 的物品。 |
cx | cx:变量 ID:数量 | 使用 CraftX 数值变量。变量值必须是数字。 |
| 自定义货币 | <货币 ID>:数量 | 使用 register-currency 注册的内部货币。 |
tpoint | tpoint:数量 | 在 tEconomy 已启用时使用其点券。 |
tmoney | tmoney:数量 | 在 tEconomy 已启用时使用其货币。 |
tylb | tylb:数量 | 在 tEconomy 已启用时使用其元宝。 |
nye_货币类型 | nye_货币类型:数量 | 在 NyEconomy 已启用时使用指定类型的余额。 |
数量可以使用 PlaceholderAPI 变量和表达式,例如:
yaml
buy-currency:
- 'vault:1'
- 'point:<1+(%player_level%*5)>'
- 'id:1:0:1'
- 'item:&6测试:2'
- 'item:&6测试:&7这是lore:2'
- 'item::&7这是lore:2'
- 'item:contain@物品名:contain@lore:2'
- 'item:equals@物品名:equals@lore:2'
- 'jb:5'
- 'cx:变量id:数量'对于 item 材料:
- 默认按完整名称匹配。
- 名称或 Lore 以
contain@开头时按关键词包含匹配。 - 名称或 Lore 以
equals@开头时按完整内容匹配。 contain@和equals@只用于检测规则,商品 Lore 展示时会隐藏这些前缀。
折扣会应用到所有购买货币和材料,计算后向上取整。
商品消息
| 配置项 | 类型 | 说明 |
|---|---|---|
items.<商品 ID>.buy-success-message | 字符串列表 | 商品购买成功时发送的消息。配置后覆盖全局成功消息。 |
items.<商品 ID>.buy-fail-message | 字符串列表 | 商品购买失败时发送的消息。配置后覆盖全局失败消息。 |
yaml
buy-fail-message:
- '&c购买失败.'
buy-success-message:
- '&a购买成功.'商品购买后指令
buy-command 在购买成功并完成扣款、限购标记更新和物品发放后执行。每行一个指令,支持以下执行者前缀:
| 前缀 | 执行者 |
|---|---|
[console] | 控制台 |
[op] | 以玩家 OP 身份执行 |
| 无前缀 | 玩家执行 |
指令支持 PlaceholderAPI 变量,以及 eval:{表达式}、ceil:{表达式} 和 floor:{表达式} 计算文本。
yaml
buy-command:
- '[console]spawn %player_name%'
- '[op]spawn %player_name%'
- '[player]spawn %player_name%'weight-command 用于从每个权重组中随机选择一组指令执行。每行格式为:
text
权重#[console]指令示例:
yaml
weight-command:
权重组1:
- '30#[console]tell %player_name% 权重组1的指令1'
- '30#[op]tell %player_name% 权重组1的指令2'
- '30#[player]tell %player_name% 权重组1的指令3'每个权重组独立随机选择一条配置,权重越大,被选中的概率越高。
continuous-buy-command 用于单次购买或连续购买结束后执行的指令。支持 {count},该占位符会替换为本次成功购买次数。
yaml
continuous-buy-command:
- '[console]tell %player_name% 本次购买了{count}次'连续购买次数
商品可以覆盖全局连续购买次数:
| 配置项 | 说明 |
|---|---|
items.<商品 ID>.right-click-max-buy-count | 普通右键连续购买最大次数。 |
items.<商品 ID>.shift-left-click-max-buy-count | Shift 左键连续购买最大次数。 |
items.<商品 ID>.shift-right-click-max-buy-count | Shift 右键连续购买最大次数。 |
未配置时分别使用 config.yml 中的 default-right-buy-count、default-shift-left-buy-count 和 default-shift-right-buy-count。
完整商店配置结构
下面的示例展示常用配置键的组合方式:
yaml
id: '示例'
name: '&6示例商店'
permission: 'lyshop.open'
size: 6
discount:
- 'permission:{lshop.buy.7}<->0.12'
open-shop-command: []
close-shop-command: []
items:
商品1:
slot: 0
show-item: 'MythicMobs#测试'
give-item: 'MythicMobs#测试'
amount: 1
force-need-slot: true
show-condition:
- 'papi:{%player_level% >= 0}'
can-be-purchased-time-start: '2022-12-3-5-25-20'
can-be-purchased-time-end: '2032-12-3-6-25-20'
every-day-open-time: '00:00-23:59'
server-limit-tag:
全服每周限购标记1: 1
player-limit-tag:
个人每周限购标记1: 1
extra-lore:
- '{物品信息}'
- '{购买条件}'
- '{购买货币}'
- '{限购信息}'
buy-condition:
- '&7需要: 等级大于3级才可购买<->papi:{%player_level% > 3}<->&c购买失败!'
buy-currency:
- 'vault:1'
- 'jb:5'
buy-fail-message:
- '&c购买失败.'
buy-success-message:
- '&a购买成功.'
discount:
- 'permission:{lshop.buy.5}<->0.5'
buy-command:
- '[console]spawn %player_name%'
weight-command:
权重组1:
- '30#[console]tell %player_name% 指令1'
- '70#[player]tell %player_name% 指令2'
continuous-buy-command:
- '[console]tell %player_name% 本次购买了{count}次'
right-click-max-buy-count: 10
shift-left-click-max-buy-count: 1
shift-right-click-max-buy-count: 1重载注意事项
- 修改
config.yml、限购标记、展示文本、消息、自定义货币或商店文件后,使用/lshop reload重新读取。 - 修改
mysql.enable后建议重启服务器。 - 全服限购商店不要同时部署到多个服务器实例。
- 商店
id和商品槽位会参与指令操作;正式开放后不要随意修改商店 ID。 shop/示例商店.yml会在重载时强制生成并覆盖,用于展示配置格式,不应作为正式配置保存自定义内容。