Skip to content

CooPay 配置文件 ​

更新: 2026/8/14 字数: 0 字 时长: 0 分钟

config.yml:

点我查看
yaml
# 开发者选项
# 用于调试插件
debug: false
# 发起订单的时候是否允许移动
can_move: false
# 平台显示的货币名称
currency_name: "点券"
# 秘钥
key: "1145141919810"
# 在玩家创建订单的时候
# 玩家允许执行的指令(头匹配)
command_whitelist:
  - cp
  - coopay
  - coo
  - pay
# 创建订单冷却时间(秒)
# 设置为 0 或负数表示不启用冷却时间
# 用于防止玩家频繁请求创建订单
trade_cooldown: 0
# 未支付订单自动过期时间(分钟),默认 10
trade_timeout_minutes: 10
# 玩家充值数据
sql:
  # 是否使用mysql保存玩家充值数据
  # 设置为false则默认使用sqlite
  open: false
  address: "localhost:3306"
  ssl: false
  database: "minecraft"
  username: "root"
  password: "root"
  # 表前缀 创建表时会是 coopay_表名
  prefix: "coopay"
  # 如果你使用的是mysql 8
  # 则需要修改这个内容为 com.mysql.cj.jdbc.Driver
  driver: "com.mysql.jdbc.Driver"
  # Hikari 连接池配置(仅 MySQL 生效)
  pool:
    # 最大连接数
    max: 10
    # 最小空闲连接数
    minIdle: 2
    # 连接超时时间(毫秒)
    connectionTimeoutMs: 15000
    # 连接最大存活时长(毫秒)
    maxLifetimeMs: 600000

message.yml:

点我查看
yaml
message_prefix: "&7[&aCooPay&7]"
trade:
  unknown_usage: "&c指令格式错误 正确使用方式/cp trade 支付方式 金额"
  illegal_number: "&c输入了非法的数字!"
  integer_only_required: "&c仅支持整数金额,请输入整数!"
  cooldown: "&c创建订单过于频繁,请等待 {time} 秒后再试!"
 
  failed: "&c订单由于未知原因创建失败!请联系服务器管理员!原因:{cause}"
  failed_code: "&c订单支付二维码由于未知原因生成失败! 请联系服务器管理员! 原因:{cause}"
  wait: "&a正在创建一个新的订单 &f订单号:&e{trade}"
  create_token: "&a正在创建订单Token"
  create_token_failed: "&c创建订单Token失败! 原因:{cause}"
  pay_type: "&a支持的支付方式有: 微信 | 支付宝 | &e对应的支付方式输入应为 &bwx|zfb"
  illegal_type: "&c不存在的支付方式"
  complete: "&a订单完成! 支付了 &e{money} &a元"
  cancel: "&a订单已经取消!"
  cancel_null: "&c您没有创建任何订单或者创建的订单已经取消!"
  illegal_trade_command: "&c不允许在拥有订单时执行该命令 &e输入/cp cancel 或按 &cQ &e取消订单!"
  success: "&a创建订单成功!"
  success_code:
    - "&a订单支付二维码生成成功! "
    - "订单号:&e{trade}"
    - "&a金额:&e{money} &a支付方式:&b{type}"
    - "&a若需取消请输入 &c/cp cancel &a或按 &cQ &a键取消"
recovery:
  unknown_usage: "&c指令格式错误 正确使用方式/cp recovery 玩家名字"
  success: "&a成功为玩家{player}补偿充值"
  unknown_player: "&c玩家不在线或不存在"
totalpay:
  unknown_usage: "&c指令格式错误 正确使用方式/cp totalpay <add|remove|set> 玩家名字 金额"
  unknown_operation: "&c未知操作,可用操作:add、remove、set"
  unknown_player: "&c玩家不存在或从未进入过服务器"
  illegal_amount: "&c金额必须是有效数字;增加和减少须大于0,设置须大于或等于0"
  insufficient: "&c玩家{player}当前累充金额为{current},无法减少到负数"
  failed: "&c读取玩家累充数据失败,请查看后台日志"
  success: "&a已为玩家{player}{operation}累充金额{amount},修改前:{old},修改后:{new}"
totalpay_reward:
  unknown_usage: "&c指令格式错误 正确使用方式 /cp claim [奖励ID|all]"
  busy: "&c正在处理领取请求,请稍候"
  auto_grant: "&a累充奖励为自动发放,无需手动领取"
  nothing: "&c当前没有可领取的累充奖励"
  unknown: "&c不存在该累充奖励: {reward_id}"
  locked: "&c尚未达到累充档位 {reward_id}(需要 {threshold} 元,当前 {total_pay} 元)"
  already: "&c你已经领取过累充奖励 {reward_id}"
  success: "&a成功领取累充奖励: {rewards}"
  available: "&a你有 {count} 个累充奖励可领取,输入 &e/cp claim &a领取"
  failed: "&c领取累充奖励失败,请查看后台日志"
trade_tittle:
  trade_create_success:
    tittle: "&bCoo&ePay"
    sub_tittle: "&a您当前需要支付 &e{money} &a元"
  trade_complete:
    tittle: "&bCoo&ePay"
    sub_tittle: "&a支付完成!&b感谢您对服务器的支持!"
info_list:
  empty: "&c您还没有创建过任何订单"
  page_format_server:
    - "&7========&b服务器订单查询-&a当前{page}/&b{max_page}&7========"
    - "&7 订单总数: &e{total}"
    - ""
    - "&7  &a{index_1}"
    - "&7  &a{index_2}"
    - "&7  &a{index_3}"
    - "&7  &a{index_4}"
    - "&7  &a{index_5}"
    - "&7  &a{index_6}"
    - "&7  &a{index_7}"
    - "&7  &a{index_8}"
    - "&7  &a{index_9}"
    - "&7  &a{index_10}"
    - ""
    - "&7========&a输入/cp infolist {next}查询下一页&7========"
  page_format_player:
    - "&7========&b创建订单查询-&a当前{page}/&b{max_page}&7========"
    - "&7 订单总数: &e{total}"
    - ""
    - "&7  &a{index_1}"
    - "&7  &a{index_2}"
    - "&7  &a{index_3}"
    - "&7  &a{index_4}"
    - "&7  &a{index_5}"
    - "&7  &a{index_6}"
    - "&7  &a{index_7}"
    - "&7  &a{index_8}"
    - "&7  &a{index_9}"
    - "&7  &a{index_10}"
    - ""
    - "&7========&a输入/cp infolist {next}查询下一页&7========"
buy:
  command:
    unknown_usage: "&c指令格式错误 正确使用方式/cp buy 礼包ID 支付方式"
    create_success: "&a成功发起礼包购买请求!"
    unknown_kits: "&c不存在该礼包"
info:
  command:
    unknown_usage: "&a指令格式错误 正确使用方式/cp info 订单号"
    not_completed: "&c上一个订单查询请求并未处理完成 请等待上一个订单查询请求结束!"
    error: "&c在查询的过程中发生了异常!"
    success: "&a发送查询请求成功! 请等待返回结果!"
  unknown_trade: "&c查询的订单不存在"
  format:
    - "&7========&b订单查询&7========"
    - "&7 |&a当前订单号: %trade_id%"
    - "&7 |&a平台订单号: %trade_no%"
    - "&7 |&a商品名字: %trade_name%"
    - "&7 |&a金额: &e%money%"
    - "&7 |&a支付方式: &b%type%"
    - "&7 |&a支付状态: %status%"
    - "&7 |&a完成时间: %complete_date%"
help:
  - "&b--------{prefix}&b--------"
  - "&e/cp trade &a支付方式 支付金额 向服务器充值一定的金额"
  - "&e/cp buy &a礼包id 支付方式 购买一个服务器充值礼包"
  - "&e/cp info 订单号 &a查询这个订单号的订单状态"
  - "&e/cp infolist 页码 &a查询所有创建过的订单号"
  - "&e/cp cancel &a取消当前订单"
  - "&e按 &cQ &a键也可快速取消当前订单"
  - "&e/cp reload &a重载插件"
  - "&e/cp performance &a查看插件性能统计信息"
  - "&e/cp recovery player &a一键恢复这个玩家所有充值 方便切换周目时一键补偿 此操作会清空玩家总充值数据"
  - "&e/cp totalpay <add|remove|set> player amount &a手动修改玩家累充金额"
  - "&e/cp claim [奖励ID|all] &a领取已达成的累充奖励(claim 模式下使用)"
  - "&b"
  - "&e 当前服务器支持的支付方式有 微信支付 支付宝支付"
  - "&e 对应的支付方式输入应为 &b WX ZFB"
  - "&e 创建订单时 支付方式需要填上对应的内容 例如微信支付 则在支付方式中输入wx"
  - "&b-------------------------"

分页消息的当前限制

默认配置中的 info_list.empty 和 {total} 目前尚未被订单列表命令读取或替换,请勿依赖这两个字段展示空列表或订单总数。

rewards.yml:

点我查看
yaml
kits:
  default:
    # 是否为默认
    # 设置为默认则 在 /cp trade xxx xxx 时就会执行这一段
    default: true
    # 倍率
    # 只在default 可以正常生效
    scaled: 10.0
    # 是否仅允许整数金额(不允许小数点)
    # 设置为 true 时,创建订单时金额必须是整数,否则会拒绝创建
    integer_only: true
    commands:
      # 指令执行
      # 提供变量
      # {player_name} 玩家名字
      # {money} 充值的金额
      # {money_int} 充值的金额取整数
      # {money_scaled} 充值的金额乘上倍率
      # {money_scaled_int} 充值的金额乘上倍率然后取整
      # 提供papi 支持
      # 支持如下写法 %xxx_index_{money_int}%
      # 假设充值1元
      # 会自动被替换成 %xxx_index_1% 然后被 papi替换成对应值
      #
      # 新格式(推荐):
      #   - "[console]xxx"  代表控制台命令
      #   - "[op]xxx"       代表玩家+临时OP执行的命令
      #   - "[player]xxx"   代表玩家执行的命令
      #
      # 示例(新格式)
      - "[console]points give {player_name} {money_scaled_int}"
      - "[op]say 默认礼包 赞助金额 {money} 取整 {money_int} 倍率 {money_scaled} {money_scaled_int}"
  # 购买礼包指令如下
  # /cp buy 礼包id 支付方式
  # 如果设置default 则不支持price设定
  #
  # PlaceholderAPI 礼包变量(将 <kit_id> 替换为礼包ID,支持ID包含下划线):
  # %CooPay_refresh_time_<kit_id>%          兼容变量,玩家剩余冷却文本;无冷却时为空
  # %CooPay_kit_cooldown_text_<kit_id>%     玩家剩余冷却文本,格式为 XdXhXm
  # %CooPay_kit_cooldown_seconds_<kit_id>%  玩家剩余冷却秒数;无冷却时为 0
  # %CooPay_kit_price_<kit_id>%             礼包价格
  # %CooPay_kit_player_bought_<kit_id>%     玩家已购买次数
  # %CooPay_kit_global_bought_<kit_id>%     全服已购买次数
  # %CooPay_kit_player_limit_<kit_id>%      个人购买上限;不限时为 -1
  # %CooPay_kit_global_limit_<kit_id>%      全服购买上限;不限时为 -1
  # %CooPay_kit_player_remaining_<kit_id>%  玩家剩余可购次数;不限时为 -1
  # %CooPay_kit_global_remaining_<kit_id>%  全服剩余可购次数;不限时为 -1
  # %CooPay_kit_has_permission_<kit_id>%    是否同时拥有 coopay.buy 和礼包专属权限
  # 布尔变量固定返回 true 或 false,离线目标玩家返回 false
  # 限购次数不会随 refresh_time 到期而重置
  # 变量中的礼包ID忽略大小写;配置ID必须唯一,不能同时配置 VIP 和 vip
  # 玩家相关变量需要玩家上下文
  # 购买数据首次异步加载时变量可能短暂为空,后续解析会返回实际值
  example_1:
    # 定价 (单位: 元)
    price: 10.0
    # 个人累计限购次数 -1 为不限制
    limit: 1
    # 全服限购次数 -1 或 null 为不限制
    global_limit: 10
    # 购买该礼包所需权限 不填写则不限制
    permission: "coopay.kits.example_1"
    # 玩家个人冷却时间,格式为 XdXhXm 例如: 1d5h10m,0d0h0m 或 0 表示不启用
    refresh_time: "1d0h0m"
    commands:
      # 变量提供除了不支持倍率相关 其他不变
      # 新格式(推荐):
      #   - "[console]xxx"  代表控制台命令
      #   - "[op]xxx"       代表玩家+临时OP执行的命令
      #   - "[player]xxx"   代表玩家执行的命令
      #
      # 示例(新格式):
      - "[console]give {player_name} diamond 64"
      - "[console]say B站关注 空栈是你的谎言 顺便赞助了{money}"
      - "[op]say B站关注 空栈是你的谎言,插件定制DD"

# 玩家累充达到指定金额后执行奖励命令
# 每个档位 ID 对每名玩家永久只执行一次,不要随意修改已上线档位的 ID
# 可用变量:{player}、{player_name}、{reward_id}、{threshold}、{total_pay}
# 支持 PlaceholderAPI;未写前缀时按控制台命令执行
total_pay_rewards:
  # auto:达到档位后自动发放(默认)
  # claim:达到档位后由玩家使用 /cp claim 领取
  grant_mode: auto
  reward_100:
    # 示例默认关闭,改为 true 后生效
    enabled: false
    amount: 100.0
    commands:
      - "[console]give {player_name} diamond 1"
      - "[console]say {player_name} 已达到 {threshold} 元累充"

礼包配置说明 ​

字段说明
default是否为 /cp trade 使用的默认奖励;默认礼包不使用固定 price
scaled默认礼包的充值倍率,只对 default: true 生效
integer_only是否要求 /cp trade 的金额为整数
price非默认礼包的固定价格;旧字段 price_need 仍兼容
limit玩家个人累计购买上限,-1 为不限,0 为禁止购买
global_limit全服累计购买上限,-1 或不填写为不限,0 为禁止购买
permission礼包额外权限;不填写或留空则不增加额外限制
refresh_time玩家个人购买冷却,支持 XdXhXm 的任意组合;0 表示关闭
commands支付成功后执行的奖励命令列表

限购与冷却是两套规则

limit 和 global_limit 不会随 refresh_time 到期重置。例如 limit: 1 与 refresh_time: "1d" 同时存在时,该玩家总共只能购买一次,而不是每天一次。

推荐使用扁平命令格式,并保持前缀为小写的 [console]、[op] 或 [player]。旧版嵌套格式 commands.console、commands.op、commands.player 仍可继续使用,旧的 commands.admin 也会作为 OP 命令回退读取。不要混用扁平列表与嵌套结构;只要扁平列表非空,插件就会优先读取扁平列表。

礼包 ID 可以包含下划线,但不能配置仅大小写不同的重复 ID,例如 VIP 与 vip 不能同时存在。执行 /cp reload 时,如果尚未配置 scaled,旧字段 scale 会自动迁移为 scaled。

累计充值档位奖励 ​

total_pay_rewards 与 kits 是两套独立奖励。kits 处理每一笔自定义金额或礼包订单,total_pay_rewards 则根据玩家的历史累计充值金额发放里程碑奖励。

字段说明
grant_modeauto 为达到档位后自动发放;claim 为玩家使用 /cp claim 手动领取。省略或填写无效值时回退为 auto
<奖励ID>.enabled是否启用该档位,默认 true
<奖励ID>.amount达到该档位所需的累计充值金额,必须大于 0
<奖励ID>.commands发放该档位时执行的非空命令列表

奖励 ID 只能包含字母、数字、下划线和横线,最长 128 个字符,匹配时忽略大小写。不能配置仅大小写不同的重复 ID。插件会按 amount 从小到大检查档位,同金额时按 ID 排序。

奖励命令支持 [console]、[op] 和 [player] 前缀;没有前缀时按控制台命令执行,也可以省略命令开头的 /。可使用以下变量:

变量内容
{player}、{player_name}玩家名
{reward_id}当前档位 ID
{threshold}当前档位要求的累计充值金额
{total_pay}玩家当前累计充值金额

档位 ID 是持久化标识

每个档位对每名玩家永久只发放一次,领取记录保存在 SQLite 或 MySQL 中。降低玩家累计充值金额、重载配置或切换 grant_mode 都不会清除领取记录。已上线档位不要随意改名或复用,否则插件会把新 ID 视为新的奖励。

在 auto 模式下,插件会在支付成功、管理员使用 /cp totalpay 调高金额以及玩家进服时检查未发放档位。在 claim 模式下,这些时机会提醒在线玩家有可领取奖励,玩家可使用 /cp claim 领取。