Skip to content

配置说明

LyShopReload 的全局配置位于 plugins/LyShopReload/config.yml,商店配置位于 plugins/LyShopReload/shop/。修改 config.ymlshop/ 下的商店文件后,可以使用 /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-tagplayer-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.vaultVault 经济余额展示。{need}{discount}
lore-replace.pointPlayerPoints 点券展示。{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-变量 IDCraftX 数值变量材料展示。{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-messagebuy-fail-message 后,会优先使用商品消息;未配置时使用全局消息。

配置项占位符说明
message.购买成功单次购买成功时使用。
message.连续购买{amount}连续购买结束时使用,{amount} 为本次成功购买次数。
message.购买失败购买条件、货币或其他限制不满足时使用。
message.上限达到全服或个人限购上限时使用。
yaml
message:
  购买成功: '购买成功'
  连续购买: '购买停止,本次连续购买了{amount}次'
  购买失败: '购买失败 条件不足'
  上限: '已达购买上限'

数据库

LyShopReload 支持本地 YAML 存储和 MySQL 存储。mysql.enablefalse 时使用本地数据文件;设置为 true 时使用 MySQL。

MySQL 前置要求

启用 MySQL 存储前,必须安装 LyMySQLCore,并确认它已经成功连接数据库。LyMySQLCore 未加载或连接失败时,本插件不会正常启用 MySQL 相关功能,玩家数据、限购标记及相关记录不会生效。

MySQL 配置

配置项类型默认值说明
mysql.enable布尔值false是否启用 MySQL 存储。
mysql.databasename字符串mc2MySQL 数据库名称。
mysql.username字符串mc2数据库用户名。
mysql.password字符串mc1234数据库密码。
mysql.port整数3306MySQL 端口。
mysql.ip字符串127.0.0.1MySQL 地址。
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 不能使用 vaultpointitem,否则会与内置货币类型冲突。

配置项

配置项类型说明
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-itemshow-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-startcan-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 修改。

类型格式说明
vaultvault:数量使用 Vault 经济余额。
pointpoint:数量使用 PlayerPoints 点券。
couponcoupon:数量使用优惠券余额。
idid:物品 ID:子 ID:数量使用原版物品 ID 和子 ID 材料。
itemitem:名称:数量使用指定名称的物品。
itemitem:名称:Lore:数量使用指定名称和 Lore 的物品。
itemitem::Lore:数量仅使用指定 Lore 的物品。
cxcx:变量 ID:数量使用 CraftX 数值变量。变量值必须是数字。
自定义货币<货币 ID>:数量使用 register-currency 注册的内部货币。
tpointtpoint:数量tEconomy 已启用时使用其点券。
tmoneytmoney:数量tEconomy 已启用时使用其货币。
tylbtylb:数量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-countShift 左键连续购买最大次数。
items.<商品 ID>.shift-right-click-max-buy-countShift 右键连续购买最大次数。

未配置时分别使用 config.yml 中的 default-right-buy-countdefault-shift-left-buy-countdefault-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 会在重载时强制生成并覆盖,用于展示配置格式,不应作为正式配置保存自定义内容。