奖池配置
奖池文件放在插件目录的 reward/ 文件夹中。每个 YAML 文件通过顶层 id 注册一个奖池,宝箱配置中的 normal-reward 和 rare-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-item 和 give-item 使用以下格式:
text
插件标识#物品标识示例:
yaml
show-item: 'MM4#测试'
give-item: 'MM5#奖励物品'项目示例奖池中列出的插件标识包括:
MM4MM5NISISX2
show-item 和 give-item 可以使用不同的物品。show-item 只负责展示和记录抽奖结果,give-item 负责实际发放物品。
show-item
插件使用 show-item 读取展示物品,并将其用于:
- 奖励预览。
- 抽奖结果展示。
- 抽奖记录中的物品名称或物品标识。
如果展示物品无法读取,抽奖记录会记录配置中的 show-item 字符串;如果可以读取并且物品设置了显示名称,则记录该显示名称,否则记录物品类型名称。
give-item
插件使用 give-item 读取实际发放物品,并按照 amount 设置数量后放入玩家背包。留空或删除时,不发放物品,但仍会执行 command,并发送 server-message 和 player-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: 1max-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修改数据库开关后需要重启服务器。