Skip to content

配置说明

LyDispatch 的配置分为全局配置和派遣任务配置:

  • config.yml:全局提示文本、时间格式、数据库、音效和总览界面。
  • dispatch/:每个 YAML 文件对应一个派遣任务,配置任务界面、匹配物品、派遣时间、奖励和条件。

修改配置后,可使用 /lypq reload 重载。修改 mysql.enable 前应先备份玩家数据,并重启服务器。

配置文件

文件 / 目录用途
config.yml配置全局变量文本、时间格式、数据库、结束音效、全局消息和派遣总览界面。
dispatch/配置派遣任务。插件会递归读取目录下的 .yml 文件。

load-default-configfalse 时,插件会跳过默认的 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.databasenameMySQL 数据库名称。
mysql.usernameMySQL 用户名。
mysql.passwordMySQL 密码。
mysql.portMySQL 端口。默认值为 3306
mysql.ipMySQL 地址。默认值为 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.12ENTITY_EXPERIENCE_ORB_PICKUP
1.7ORB_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:0160:9341: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} 的替换规则:

  • 在派遣进行中状态下,替换为格式化后的结束时间。
  • 在派遣完成状态下,替换为本次派遣配置中的时间文本,例如 11-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.1

dispatch.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>.reward
  • extra-item.<物品显示名>.reward
  • extra-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。

数量支持固定值或范围,例如 11-2。范围会随机选择包含边界的整数数量。对应物品不存在或物品库未加载时,动作无法正常发放物品。

配置注意事项

  • 所有颜色代码使用 &,插件读取后会转换为 Minecraft 颜色代码。
  • id 是任务识别依据,修改任务 ID 后,已有玩家数据中的旧任务状态不会自动改名。
  • 派遣时间配置应使用整数分钟或整数范围,例如 1101-5
  • chancetake-item-chance 使用 01 之间的小数表示几率。
  • 领取奖励前会检查 slot 配置对应的背包空位数量。
  • 派遣界面关闭时,如果玩家没有正在进行该任务,槽位中的派遣物品会尝试返还;背包已满时会掉落在玩家当前位置。