配置说明
LyDispatch 的配置分为全局配置和派遣任务配置:
config.yml:全局提示文本、时间格式、数据库、音效和总览界面。dispatch/:每个 YAML 文件对应一个派遣任务,配置任务界面、匹配物品、派遣时间、奖励和条件。
修改配置后,可使用 /lypq reload 重载。修改 mysql.enable 前应先备份玩家数据,并重启服务器。
配置文件
| 文件 / 目录 | 用途 |
|---|---|
config.yml | 配置全局变量文本、时间格式、数据库、结束音效、全局消息和派遣总览界面。 |
dispatch/ | 配置派遣任务。插件会递归读取目录下的 .yml 文件。 |
当 load-default-config 为 false 时,插件会跳过默认的 dispatch/示例.yml 文件;其它 YAML 文件仍会读取。
全局变量文本
yaml
global-starting-text: '您有派遣任务进行中 请耐心等待'
global-nothing-text: '您暂未开启派遣任务 快去开启吧'
global-finish-text: '您有派遣任务已完成 快去领取奖励吧'这三项用于 %lypq_global%:
| 配置键 | 返回条件 |
|---|---|
global-starting-text | 玩家存在正在进行中的派遣任务,且没有已完成待领取任务。 |
global-nothing-text | 玩家没有派遣任务。 |
global-finish-text | 玩家存在已完成、可以领取奖励的派遣任务。 |
时间格式
yaml
time-format: 'MM/dd HH:mm:ss'该配置使用 Java SimpleDateFormat 格式。以下内容会使用此格式:
%lypq_surplustime_派遣id%%lypq_endtime_派遣id%- 派遣任务界面中的
{time},用于显示派遣中的结束时间。
数据库
MySQL 前置要求
启用 MySQL 存储时,必须安装 LyMySQLCore,并确认 LyMySQLCore 已成功连接数据库。插件会在玩家登录时读取数据,在退出或保存时写入数据;前置未加载或数据库连接失败时,相关 MySQL 数据读取、保存和同步不会生效。
yaml
mysql:
enable: false
databasename: mc2
username: mc2
password: mc1234
port: 3306
ip: 127.0.0.1| 配置键 | 说明 |
|---|---|
mysql.enable | 是否启用 MySQL 存储。false 使用本地 YAML 文件,true 使用 MySQL。修改后需要重启服务器。 |
mysql.databasename | MySQL 数据库名称。 |
mysql.username | MySQL 用户名。 |
mysql.password | MySQL 密码。 |
mysql.port | MySQL 端口。默认值为 3306。 |
mysql.ip | MySQL 地址。默认值为 127.0.0.1。 |
关闭 MySQL 时,玩家数据保存在:
text
plugins/LyDispatch/data/<玩家UUID>.yml本地 YAML 数据保存时会生成备份文件,主文件损坏时插件会尝试从备份文件恢复。
启用 MySQL 时,插件会创建以插件名称为表名的数据表,并保存玩家名称和序列化后的派遣数据。
警告
切换本地 YAML 和 MySQL 保存方式前,请先备份玩家数据。切换保存方式后建议重启服务器。
结束音效
yaml
dispatch-end-sound: 'ENTITY_EXPERIENCE_ORB_PICKUP'派遣完成后,如果玩家在线,插件会发送完成提示并播放此音效。音效名称必须是当前服务器版本支持的 Bukkit 音效名称。
原配置示例中的版本兼容写法如下:
| 游戏版本 | 音效名称 |
|---|---|
| 1.12 | ENTITY_EXPERIENCE_ORB_PICKUP |
| 1.7 | ORB_PICKUP |
配置为空字符串时不会播放音效。
默认配置
yaml
load-default-config: true| 值 | 说明 |
|---|---|
true | 读取 dispatch/示例.yml。 |
false | 跳过默认的 dispatch/示例.yml,不影响其它派遣 YAML 文件。 |
全局消息
yaml
message:
put-item-fail: '&7只可以放入一个物品'
extra-item-fail: '&7此额外物品无法使用在该派遣中.'| 配置键 | 触发场景 |
|---|---|
message.put-item-fail | 玩家尝试放入数量大于 1 的物品时。 |
message.extra-item-fail | 放入的额外物品不符合当前派遣任务配置时。 |
派遣总览界面
yaml
gui:
title: '&6派遣分类选择'
dispatching-item-id: 'APPLE:0'
after-returning-item-id: 'APPLE:0'
fill-item: '160:9'
fill-name: '&7封锁'
last-item: '341:0'
last-name: '&6上一页'
next-item: '341:0'
next-name: '&6下一页'
back-item: '341:0'
back-name: '&6返回主页'| 配置键 | 说明 |
|---|---|
gui.title | 派遣总览界面标题。 |
gui.dispatching-item-id | 派遣进行中时显示的物品。 |
gui.after-returning-item-id | 派遣完成、可以领取奖励时显示的物品。 |
gui.fill-item | 界面填充物品。 |
gui.fill-name | 填充物品名称。 |
gui.last-item | 上一页按钮物品。 |
gui.last-name | 上一页按钮名称。 |
gui.next-item | 下一页按钮物品。 |
gui.next-name | 下一页按钮名称。 |
gui.back-item | 返回总览界面的按钮物品。 |
gui.back-name | 返回总览界面的按钮名称。 |
物品 ID 支持示例中的 材质:数据值 写法,例如 APPLE:0、160:9 和 341:0。插件同时兼容旧版数字 ID 与运行版本材质名称。
总览界面每页显示最多 45 个派遣任务,底部使用上一页、填充物品和下一页按钮。
派遣任务配置
派遣任务文件放在 dispatch/ 目录下。每个文件对应一个任务,id 必须全局唯一。
基础信息
yaml
id: '宠物出行'
title: '&6宠物出行'
main-gui-id: 'BOOK:0'
main-gui-name: '&6宠物出行'
main-gui-lore:
- '&a[点击查看]'| 配置键 | 说明 |
|---|---|
id | 派遣任务 ID。用于区分任务,也用于变量中的 派遣id。应保持全局唯一。 |
title | 当前派遣任务界面的标题。未配置时使用 id。 |
main-gui-id | 派遣总览界面中代表此任务的物品。默认值为 BOOK:0。 |
main-gui-name | 总览界面物品名称。 |
main-gui-lore | 总览界面物品说明。支持 PlaceholderAPI 解析。 |
任务界面使用 dispatching-item-* 和 after-returning-item-* 显示玩家当前任务状态。
状态按钮
yaml
dispatching-item-name: '&7该宠物已经出行'
dispatching-item-lore:
- '&7归来时间: {time}'
after-returning-item-name: '&7该宠物已经归来'
after-returning-item-lore:
- '&a点击领取 &6出行{time}分钟 &a奖励'| 配置键 | 说明 |
|---|---|
dispatching-item-name | 派遣进行中时显示的按钮名称。 |
dispatching-item-lore | 派遣进行中时显示的按钮说明。 |
after-returning-item-name | 派遣完成后显示的领奖按钮名称。 |
after-returning-item-lore | 派遣完成后显示的领奖按钮说明。 |
{time} 的替换规则:
- 在派遣进行中状态下,替换为格式化后的结束时间。
- 在派遣完成状态下,替换为本次派遣配置中的时间文本,例如
1或1-5。
派遣消息
yaml
message:
can-reward: '&7你的 {item} &7已经可以收回啦!'
empty-slot: '&7剩余背包槽位不足.'
dispatching: '&7派遣进行中, 请等待回归!'
dispatch-end: '&7派遣结束, 领取奖励成功!'
dispatch-success: '&7开始派遣!'
take-item: '&7本次运气不好, 被扣除了物品!'
put-item: '&7请放入正确的物品!'
condition-fail: '&7条件不足, 无法出行.'| 配置键 | 说明 |
|---|---|
message.can-reward | 派遣完成且玩家在线时发送的提示。{item} 会替换为派遣物品名称。 |
message.empty-slot | 领取奖励时背包空位不足。 |
message.dispatching | 玩家点击进行中的派遣任务。 |
message.dispatch-end | 成功领取奖励后发送的消息。 |
message.dispatch-success | 成功开始派遣后发送的消息。 |
message.take-item | 结算时根据几率扣除派遣物品后发送的消息。 |
message.put-item | 放入的派遣物品不匹配时发送的消息。 |
message.condition-fail | 派遣条件不满足时发送的消息。 |
消息中的 & 颜色代码会转换为 Minecraft 颜色代码。
派遣物品匹配
yaml
dispatch:
match-item:
- 'name:{&6小白}'
- 'lore:{&6这是lore}'
- 'contain_name:{&6小白}'
- 'contain_lore:{&6这是lore}'match-item 中的多个条件是“任意一个满足即可”。如果不配置 match-item,只有在派遣物品槽为空时才会匹配成功。
| 写法 | 说明 |
|---|---|
name:{文本} | 完全匹配物品显示名,忽略大小写。 |
lore:{文本} | 完全匹配物品 lore 中的任意一行,忽略大小写。 |
contain_name:{文本} | 物品显示名包含指定文本。 |
contain_lore:{文本} | 物品 lore 中任意一行包含指定文本。 |
匹配内容中的 & 会按颜色代码处理。
开始与结束指令
yaml
dispatch:
start-command:
- '[console]tell %player_name% 开始派遣'
end-command:
- '[console]tell %player_name% 派遣结束'start-command 在开始派遣时执行,支持以下写法:
| 前缀 | 执行身份 |
|---|---|
[console] | 控制台执行。 |
[op] | 临时以 OP 身份由玩家执行。 |
| 无前缀 | 由玩家执行。 |
指令会经过 PlaceholderAPI 解析。
当前实现读取结束指令时使用的是 dispatch.start-command 配置路径,因此 dispatch.end-command 目前不会被实际读取。若需要配置结束阶段指令,应注意此实现行为。
额外物品
额外物品配置在 extra-item 下,键名就是物品的显示名。匹配时只进行显示名完全匹配,区分颜色代码和文本内容。
yaml
extra-item:
'&6缩短1分钟出行':
action:
- 'time:{-1}'
- 'reward_chance:{奖励组1#0.1}'
reward: []
take-extra-item: true| 配置键 | 说明 |
|---|---|
extra-item.<物品显示名>.action | 额外物品动作列表。 |
extra-item.<物品显示名>.reward | 派遣完成时执行的额外奖励动作列表。 |
extra-item.<物品显示名>.take-extra-item | 结算时是否扣除额外物品,默认值为 true。 |
额外物品动作
| 动作 | 说明 |
|---|---|
time:{-1} | 本次派遣减少 1 分钟。正数增加派遣时间,负数减少派遣时间。 |
reward_chance:{奖励组ID#0.1} | 为指定奖励组增加触发几率,数值按加法计算。 |
time:{...} 的时间单位是分钟。额外物品动作会在开始派遣时调整派遣时间;领取奖励时,额外物品的动作也会加入结算动作列表。
权限加成
yaml
permission-addition:
'组1':
condition:
- 'papi:{%player_level% > 999999}'
- 'permission:{vip.1}'
- 'nopermission:{vip.1}'
time: '{time}*0.9'
message: '&a由于您是VIP1, 本次出行时间减少10%!'| 配置键 | 说明 |
|---|---|
permission-addition.<组名>.condition | 权限加成组的条件列表,全部满足后才算命中。 |
permission-addition.<组名>.time | 时间计算公式。{time} 会替换为原始派遣时间,单位为毫秒。 |
permission-addition.<组名>.message | 命中该组后发送的提示消息。 |
权限加成组按 YAML 中的顺序从上到下判断,只使用第一个满足条件的组。未命中任何组时,使用原始派遣时间。
派遣时间与奖励
yaml
dispatch:
time-and-reward:
1:
item-name: '&a点击出行1分钟'
item-lore:
- '&7奖励: &6xxx'
condition:
- 'papi:{%player_level% >= 0}'
reward-group:
奖励组1:
chance: 0.95
reward:
- 'message:恭喜你出行成功!'
slot: 1
take-item: false
take-item-chance: 0.1dispatch.time-and-reward 下的键名是派遣时间配置。支持固定分钟和随机分钟范围:
yaml
dispatch:
time-and-reward:
1:
item-name: '&a点击出行1分钟'
10:
item-name: '&a点击出行10分钟'
1-5:
item-name: '&a点击出行1-5(随机)分钟'| 配置键 | 说明 |
|---|---|
dispatch.time-and-reward.<时间>.item-name | 时间按钮名称。 |
dispatch.time-and-reward.<时间>.item-lore | 时间按钮说明。 |
dispatch.time-and-reward.<时间>.condition | 开始该时间派遣所需满足的条件。 |
dispatch.time-and-reward.<时间>.reward-group | 奖励组列表。 |
dispatch.time-and-reward.<时间>.slot | 领取奖励时至少需要的背包空位数量,默认值为 0。 |
dispatch.time-and-reward.<时间>.take-item | 是否允许在结算时扣除派遣物品。 |
dispatch.time-and-reward.<时间>.take-item-chance | 扣除派遣物品的几率,默认值为 1。 |
固定时间直接使用配置中的分钟数。范围时间使用 最小值-最大值 写法,并在开始派遣时随机选择一个包含边界的整数分钟数。
奖励组
yaml
reward-group:
奖励组1:
chance: 0.95
reward:
- 'message:恭喜你出行成功!'| 配置键 | 说明 |
|---|---|
reward-group.<奖励组ID>.chance | 奖励组基础触发几率。插件使用 Math.random() < chance + 额外几率 判断。 |
reward-group.<奖励组ID>.reward | 该奖励组触发后执行的动作列表。 |
每个奖励组独立进行几率判断,多个奖励组可以同时触发。额外物品可以通过 reward_chance:{奖励组ID#数值} 增加指定奖励组的几率。
条件格式
条件列表中的每一项都必须满足。支持的条件格式如下:
| 写法 | 说明 |
|---|---|
papi:{表达式} | 先解析 PlaceholderAPI,再计算比较或逻辑表达式。 |
permission:{权限节点} | 玩家必须拥有指定权限。 |
nopermission:{权限节点} | 玩家不能拥有指定权限。 |
示例:
yaml
condition:
- 'papi:{%player_level% >= 10}'
- 'permission:{vip.1}'
- 'nopermission:{vip.2}'papi:{...} 表达式支持数值比较、字符串相等比较、算术运算以及 && 和 || 逻辑运算。例如:
yaml
condition:
- 'papi:{%player_level% >= 10 && %player_level% < 100}'奖励动作
奖励动作可以写在以下位置:
dispatch.time-and-reward.<时间>.reward-group.<奖励组ID>.rewardextra-item.<物品显示名>.rewardextra-item.<物品显示名>.action
物品充能
| 动作 | 说明 |
|---|---|
charge:10 | 为派遣物品增加 10 点 LyCharging 充能经验。需要存在对应的充能方案,否则该动作无效。 |
Lore 操作
| 动作 | 说明 |
|---|---|
lore_match_mode:contain | 将后续 lore 查找改为包含匹配。其它值使用完整匹配。 |
lore_remove:原lore | 删除匹配到的 lore。 |
lore_replace:原lore:新lore | 替换匹配到的 lore。 |
lore_add_next:定位lore:新增lore | 在定位 lore 的下一行添加 lore。 |
lore_add_last:定位lore:新增lore | 在定位 lore 所在行之前添加 lore。 |
lore_match_mode 会影响后续 lore 动作的匹配方式。
名称操作
| 动作 | 说明 |
|---|---|
name_set:新名称 | 设置物品名称。 |
name_replace:原文本:新文本 | 替换物品名称中的文本。 |
name_add_start:文本 | 在物品名称开头添加文本。 |
name_add_end:文本 | 在物品名称末尾添加文本。 |
指令操作
| 动作 | 说明 |
|---|---|
command_console:指令 | 控制台执行指令。 |
command_op:指令 | 临时以 OP 身份由玩家执行指令。 |
command:指令 | 由玩家执行指令。 |
指令动作会经过 PlaceholderAPI 解析。
消息操作
| 动作 | 说明 |
|---|---|
message_server:文本 | 向服务器在线玩家发送消息。 |
message:文本 | 向当前玩家发送消息。 |
物品发放
yaml
reward:
- 'giveitem:mm:道具id:1-2'
- 'giveitem:ni:物品id:1-2'
- 'giveitem:si:物品id:1-2'| 写法 | 物品来源 |
|---|---|
giveitem:mm:物品ID:数量 | MythicMobs。 |
giveitem:ni:物品ID:数量 | NeigeItems。 |
giveitem:si:物品ID:数量 | SX-Item。 |
数量支持固定值或范围,例如 1、1-2。范围会随机选择包含边界的整数数量。对应物品不存在或物品库未加载时,动作无法正常发放物品。
配置注意事项
- 所有颜色代码使用
&,插件读取后会转换为 Minecraft 颜色代码。 id是任务识别依据,修改任务 ID 后,已有玩家数据中的旧任务状态不会自动改名。- 派遣时间配置应使用整数分钟或整数范围,例如
1、10、1-5。 chance和take-item-chance使用0到1之间的小数表示几率。- 领取奖励前会检查
slot配置对应的背包空位数量。 - 派遣界面关闭时,如果玩家没有正在进行该任务,槽位中的派遣物品会尝试返还;背包已满时会掉落在玩家当前位置。