Skip to content

奖池配置

奖池文件放在插件目录的 reward/ 文件夹中。每个 YAML 文件通过顶层 id 注册一个奖池,宝箱配置中的 normal-rewardrare-reward 通过该值引用奖池。

默认示例文件为 reward/示例奖池.yml。示例文件中的注释说明:每次重新加载时,默认示例配置可能被覆盖;创建自定义奖池时,应复制示例文件后再修改。config.yml 中的 load-default-config 用于控制是否加载默认示例奖池:

  • true:加载 示例奖池.yml
  • false:跳过 示例奖池.yml,但仍加载其他奖池文件。

基础结构

yaml
id: '示例奖池'

reward:
  '奖励1':
    show-item: 'MM4#测试'
    give-item: ''
    extra-lore:
      - '{物品信息}'
      - ''
      - '&7该奖品已抽中 &6{now_count}/{max_count} &7次'
    amount: 1
    weight: 100
    condition: []
    command:
      - '[console]bc 恭喜%player_name%抽中了测试奖品'
    server-message:
      - '&f[抽奖] &a恭喜%player_name%抽中了测试奖品'
    player-message:
      - '&a恭喜你抽中了测试奖品'
    max-count: 1
配置项类型默认值说明
id字符串当前奖池的唯一标识。宝箱通过该值引用奖池。
reward节点奖品列表。
奖品节点名字符串奖品标识,同时用于记录玩家在该奖池中抽中该奖品的次数。

奖品按照配置文件中的顺序载入和展示。插件会先计算当前可用奖品的最终权重,再根据权重随机选择一个奖品。

奖品字段

字段类型默认值说明
show-item字符串""奖励预览和抽奖结果展示使用的物品。格式为 插件标识#物品标识
give-item字符串""实际发放给玩家的物品。格式与 show-item 相同;留空或删除时不发放物品。
extra-lore字符串列表空列表覆盖展示物品的 lore,并按照配置内容重新生成展示 lore。删除或留空时不追加额外 lore。
amount整数1发放物品时使用的数量。展示物品的数量最大显示为 64
weight整数1奖品的基础权重。数值越高,在其他条件相同的情况下被抽中的概率越高。
condition字符串列表空列表根据玩家状态和其他条件动态计算本次抽取的权重。
command字符串列表空列表抽中奖品后执行的指令。
server-message字符串列表空列表抽中奖品后发送给当前在线玩家的全服消息。
player-message字符串列表空列表抽中奖品后发送给中奖玩家的消息。
max-count整数-1玩家在当前奖池中最多抽中该奖品的次数。填写 -1 表示不限制。

物品标识

show-itemgive-item 使用以下格式:

text
插件标识#物品标识

示例:

yaml
show-item: 'MM4#测试'
give-item: 'MM5#奖励物品'

项目示例奖池中列出的插件标识包括:

  • MM4
  • MM5
  • NI
  • SI
  • SX2

show-itemgive-item 可以使用不同的物品。show-item 只负责展示和记录抽奖结果,give-item 负责实际发放物品。

show-item

插件使用 show-item 读取展示物品,并将其用于:

  • 奖励预览。
  • 抽奖结果展示。
  • 抽奖记录中的物品名称或物品标识。

如果展示物品无法读取,抽奖记录会记录配置中的 show-item 字符串;如果可以读取并且物品设置了显示名称,则记录该显示名称,否则记录物品类型名称。

give-item

插件使用 give-item 读取实际发放物品,并按照 amount 设置数量后放入玩家背包。留空或删除时,不发放物品,但仍会执行 command,并发送 server-messageplayer-message

展示 lore

extra-lore 用于重新设置展示物品的 lore。配置中的每一行都会按顺序写入展示物品 lore。

yaml
extra-lore:
  - '{物品信息}'
  - ''
  - '&7该奖品已抽中 &6{now_count}/{max_count} &7次'
占位符说明
{物品信息}插入展示物品原本的 lore。物品没有原有 lore 时插入空行。
{now_count}玩家当前已经抽中该奖品的次数。
{max_count}当前奖品的抽中上限。上限为 -1 时显示为 无限

注意:只有完整写成 {物品信息} 的行才会插入物品原有 lore。其他内容会作为普通 lore 写入,并进行颜色代码替换。

颜色代码使用 &,例如 &7&6

权重计算

每个奖品的初始权重来自 weight。插件会按照 condition 的配置顺序逐条判断条件;条件满足时,使用该条配置中的公式更新当前权重。

yaml
weight: 100
condition:
  - 'papi:{%player_level% >= 0}|{weight}+10|200'
  - 'nopermission:{lcj.示例奖池.奖励1}|{weight}*2'
  - 'permission:{lcj.示例奖池.奖励1}|0'

条件格式如下:

text
条件|权重公式|上限

上限部分可以省略:

yaml
condition:
  - 'papi:{%player_level% >= 0}|{weight}+10|200'
  - 'nopermission:{lcj.示例奖池.奖励1}|{weight}*2'
部分说明
条件只有条件满足时,才执行后面的权重公式。
权重公式用于计算新的当前权重。计算结果会成为下一条条件使用的权重。
上限可选,限制本条条件计算后的最大权重。
公式占位符说明
{weight}当前正在计算的权重。第一条条件计算时,初始值为 weight
{count}当前宝箱在本次抽奖前的累计抽奖次数。

条件中的公式会进行数学计算,并支持在公式中使用 PlaceholderAPI 变量。计算结果按整数参与后续权重计算。

当最终权重小于或等于 0 时,该奖品不会加入本次抽取。所有最终权重大于 0 的奖品会参与累计权重计算,再按权重随机选择一个奖品。

条件示例

根据 PlaceholderAPI 变量增加权重,并将本条条件计算后的权重限制为 200

yaml
condition:
  - 'papi:{%player_level% >= 0}|{weight}+10|200'

没有指定权限时,将权重乘以 2

yaml
condition:
  - 'nopermission:{lcj.示例奖池.奖励1}|{weight}*2'

拥有指定权限时,将权重设置为 0,使该奖品本次不可抽取:

yaml
condition:
  - 'permission:{lcj.示例奖池.奖励1}|0'

根据当前宝箱的累计抽奖次数增加权重:

yaml
condition:
  - 'papi:{%player_level% >= 0}|{weight}+{count}*0.01'

奖品抽取上限

yaml
max-count: 1

max-count 按玩家、奖池和奖品分别记录:

  • 玩家抽中次数达到 max-count 后,该奖品不会继续进入抽取计算。
  • 达到上限的奖品不会继续显示在奖励预览中。
  • -1 表示不限制抽中次数。
  • 未填写时默认值为 -1

示例:

yaml
reward:
  限量奖励:
    show-item: 'MM4#限量奖励'
    give-item: 'MM4#限量奖励'
    amount: 1
    weight: 100
    max-count: 1

奖品抽中后,插件会增加该奖池中该奖品的抽中次数。该次数同时用于判断 max-count 和显示 {now_count}

抽中奖励后执行指令

yaml
command:
  - '[console]bc 恭喜%player_name%抽中了测试奖品'
  - '[op]say 玩家获得了额外奖励'

command 是字符串列表,每条配置执行一条指令。项目示例中使用的指令前缀如下:

前缀执行方式
[console]以控制台身份执行。
[op]以玩家临时拥有管理员权限的方式执行。

未配置指令时,可以删除 command,或设置为空列表:

yaml
command: []

全服消息

yaml
server-message:
  - '&f[抽奖] &a恭喜%player_name%抽中了测试奖品'

server-message 中的每条消息都会发送给当前在线的玩家。消息支持颜色代码,并会处理 PlaceholderAPI 变量。

未配置或设置为空列表时,不发送该奖品的全服消息:

yaml
server-message: []

玩家消息

yaml
player-message:
  - '&a恭喜你抽中了测试奖品'

当奖品配置了非空的 player-message 时,插件只发送该奖品自己的玩家消息。

如果奖品没有配置 player-message,或该列表为空,插件会改用全局配置中的 global-player-message

yaml
global-player-message:
  - '&a恭喜你中奖了!'

玩家消息支持颜色代码,并会处理 PlaceholderAPI 变量。

奖池为空时的处理

抽奖时,插件会先排除以下奖品:

  • 玩家已经达到该奖品 max-count 上限的奖品。
  • 最终权重小于或等于 0 的奖品。

如果所有奖品都被排除,或最终权重总和小于等于 0,本次抽奖失败,并显示配置中的 message.reward-group-empty

yaml
message:
  reward-group-empty: '&c奖池已空, 无法继续抽取!'

该情况下不会执行奖品指令、发放物品或发送奖品消息。

奖品抽取记录

插件会按玩家和宝箱记录以下数据:

  • 宝箱累计抽奖次数。
  • 触发稀有奖池的次数。
  • 每个奖池中每个奖品的抽中次数。
  • 宝箱抽奖记录(仅在宝箱的 lottery-log-amount 大于 0 时启用)。
  • 已领取的累计抽奖奖励。

奖品抽中次数用于:

  • 判断 max-count 是否达到上限。
  • {now_count} 中显示当前奖品的抽中次数。
  • 控制奖品是否继续出现在预览和抽取结果中。

默认情况下,玩家数据保存到插件数据目录下的 YAML 文件中。启用 mysql.enable 后,玩家数据改为保存到 MySQL。

启用 MySQL 存储时,必须安装 LyMySQLCore,并且数据库连接成功后,MySQL 相关功能才会生效。数据库连接失败时,不能视为 MySQL 存储已经正常启用。

相关配置位于 config.yml

yaml
mysql:
  enable: false
  databasename: mc2
  username: mc2
  password: mc1234
  port: 3306
  ip: 127.0.0.1

修改数据库开关后需要重启服务器。