配置说明
LyDragonTrade 的主配置文件位于 plugins/LyDragonTrade/config.yml,用于控制交易界面标题、货币输入框、交易税率、物品限制、交易距离、倒计时、发起方式和提示消息。
修改配置后,可使用 /ldt reload 重载配置。该指令仅允许服务器管理员执行。
完整配置
yaml
# 交易界面标题,需要与 DragonCore 交易界面中的 match 一致
gui-title: '离渊交易'
# DragonCore 货币输入框映射
currency-textbox:
金币: 发包_对方金币文本框
点券: 发包_对方点券文本框
自定义: 发包_对方自定义文本框
# LyShopReload#货币ID: 发包_对方离渊商店货币文本框
# CX#货币ID: 发包_对方CX货币文本框
# 收款玩家实际获得的货币比例
currency-tax:
金币:
- 'vip.1:0.95'
- 'vip.2:0.975'
- 'vip.3:0.99'
点券:
- 'vip.1:0.95'
- 'vip.2:0.975'
- 'vip.3:0.99'
# 是否启用 TQBindReload 的交易后绑定功能
tqbind-enable: true
# 是否在控制台记录交易内容
log-trade-info: true
# 收到交易申请时播放的 Bukkit 音效名称
initiated-trade-sound: 'ENTITY_PLAYER_LEVELUP'
# Lore 中包含下列文本的物品禁止交易
anti-trade-for-contain-lore-item:
- '已绑定'
# 双方锁定交易后的完成倒计时,单位为秒
trade-count-down: 5
# 交易申请等待倒计时,单位为秒
receive-trade-count-down: 15
# 发起交易后的冷却时间,单位为秒
initiate-trade-cool-down: 15
# 世界名称包含下列文本时禁止发起交易
anti-trade-world:
- 'fb'
# 可发起交易的距离
trade-distance: -1
# 是否允许潜行并右键玩家发起交易
shift-right-initiate-trade: true
message:
trade-distance: '&c与对方不在一定范围内, 无法发起交易!'
item-contain-lore: '&c该物品禁止进行交易!'
anti-trade-world: '&c该世界禁止交易!'
trade-success: '&a交易成功!'
trade-cancel: '&c交易取消!'
trade-cool-down: '&c15秒内无法重复发起交易, 请稍后再试!'
initiate-trade: '&7你已向&6{player}&7发起交易, 正在等待回应...(15s)'
receive-trade: '&6{player}&7向您发起了交易申请.'
refuse-trade: '&7你拒绝了交易请求.'
refused-trade: '&6{player}&7拒绝了您的交易请求.'
trade-try: '&c禁止重复发起交易, 请等待对方回应.'
target-busy: '&c目标处于繁忙状态, 暂时无法发起交易.'
insufficient-slot: '&c对方的背包剩余空间不足以进行交易!'
insufficient-vault: '&c金币不足!'
insufficient-point: '&c点券不足!'
insufficient-CX#货币ID: '&c自定义货币不足!'
insufficient-LyShopReload#货币ID: '&c自定义货币不足!'
trade-locked-self: '&c当前交易已锁定,无法修改交易物品。'配置中的交易槽位数量不可调整。插件创建一个 18 格交易背包,前 9 格属于交易发起方,后 9 格属于交易接收方,每名玩家最多放入 9 个槽位的物品。
界面标题
yaml
gui-title: '离渊交易'| 配置项 | 类型 | 说明 |
|---|---|---|
gui-title | 字符串 | Bukkit 交易背包的标题,同时用于匹配 DragonCore 交易界面。 |
gui-title 必须与 DragonCore 交易界面配置中的 match 保持一致。默认界面使用 离渊交易,修改标题时需要同步修改 DragonCore 界面文件,否则交易界面可能无法正常匹配。
标题中的 & 会在创建交易背包时转换为 Minecraft 颜色符号。
货币输入框
yaml
currency-textbox:
金币: 发包_对方金币文本框
点券: 发包_对方点券文本框
自定义: 发包_对方自定义文本框currency-textbox 用于声明可交易的货币,以及对方 DragonCore 界面中需要同步更新的文本框组件名。
| 货币键格式 | 货币来源 | 使用条件 |
|---|---|---|
金币 | Vault 经济账户 | 服务器需要安装 Vault,并注册可用的经济服务。 |
点券 | PlayerPoints 点券账户 | 服务器需要安装并启用 PlayerPoints。 |
LyShopReload#货币ID | LyShopReload 指定货币 | 服务器需要安装并启用 LyShopReload。 |
CX#货币ID | CraftX 指定变量 | 服务器需要提供对应的 CraftX 变量。 |
自定义 | 默认配置中的界面展示位 | 服务端交易结算代码没有为普通 自定义 键提供扣除和发放逻辑。 |
右侧的值是对方界面中显示该货币金额的 DragonCore 文本框组件名。组件名填写错误时,玩家输入的金额仍可能被服务端记录,但对方界面不会正确同步显示。
LyShopReload 货币
LyShopReload 货币键必须以 LyShopReload# 开头,井号后填写货币 ID。
yaml
currency-textbox:
LyShopReload#金币碎片: 发包_对方离渊商店货币文本框交易完成时,插件通过 LyShopReload API 从付款方扣除对应货币,并按税率向收款方发放货币。
CraftX 变量货币
CraftX 变量货币键必须以 CX# 开头,井号后填写变量 ID。
yaml
currency-textbox:
CX#示例货币: 发包_对方CX货币文本框交易确认时,插件会读取对应变量并检查余额;交易完成时,从付款方变量扣除数值,再向收款方变量增加扣税后的数值。
输入数值限制
货币金额最终会作为整数处理。DragonCore 输入框应只允许玩家输入非负整数,不要提交小数、负数、表达式或其它字符。
新增货币时,还需要同步修改 DragonCore 的 LyDragonTrade_Gui.yml,为该货币添加输入框、金额刷新和对方金额显示逻辑。仅在 config.yml 中增加映射不会自动生成界面组件。
交易税率
yaml
currency-tax:
金币:
- 'vip.1:0.95'
- 'vip.2:0.975'
- 'vip.3:0.99'
点券:
- 'vip.1:0.95'
- 'vip.2:0.975'
- 'vip.3:0.99'currency-tax 按货币分别设置收款比例。列表项格式为 权限:比例。
| 示例 | 实际效果 |
|---|---|
vip.1:0.95 | 拥有 vip.1 权限时,收款玩家获得交易金额的 95%。 |
vip.2:0.975 | 拥有 vip.2 权限时,收款玩家获得交易金额的 97.5%。 |
vip.3:0.99 | 拥有 vip.3 权限时,收款玩家获得交易金额的 99%。 |
税率匹配规则:
- 税率按收款玩家拥有的权限匹配。
- 同时匹配多个权限时,使用数值最高的比例。
- 未配置税率、税率列表为空或没有匹配到权限时,比例为
1.0,即全额到账。 - 配置中的比例应填写
0至1之间的数字。 - 扣除部分不会存入其它账户,只会减少收款方最终得到的金额。
自定义货币的税率节点必须与 currency-textbox 中的完整货币键一致。
yaml
currency-tax:
LyShopReload#金币碎片:
- 'vip.1:0.95'
CX#示例货币:
- 'vip.1:0.95'TQBindReload 联动
yaml
tqbind-enable: true| 值 | 说明 |
|---|---|
true | 在 TQBindReload 已启用时,对交易获得的物品执行交易后绑定。 |
false | 不执行交易后绑定。 |
该功能同时要求服务器安装并启用 TQBindReload。只开启配置但没有启用 TQBindReload 时,插件不会执行绑定操作。
布尔值必须写成标准 YAML 布尔值 true 或 false,不要在值后添加分号。
交易记录
yaml
log-trade-info: true| 值 | 说明 |
|---|---|
true | 交易完成前在服务端控制台输出双方获得的物品和货币。 |
false | 不输出交易内容。 |
物品记录优先显示物品自定义名称,没有自定义名称时显示 Bukkit 材质名称,并附带物品数量。货币记录包含货币名称、计算后的数值和匹配到的比例。
当前代码只确认了控制台日志输出,没有发现独立日志文件或数据库记录配置。
申请提示音
yaml
initiated-trade-sound: 'ENTITY_PLAYER_LEVELUP'| 配置项 | 类型 | 说明 |
|---|---|---|
initiated-trade-sound | 字符串 | 玩家收到交易申请时播放的 Bukkit Sound 枚举名称。 |
该值会通过 Sound.valueOf 直接解析,必须填写当前服务端版本存在的完整音效枚举名称。填写不存在的名称可能导致发起交易时报错。
禁止交易的物品
yaml
anti-trade-for-contain-lore-item:
- '已绑定'列表中的文本用于检查物品 Lore。玩家在交易期间点击 Lore 包含任意指定文本的物品时,操作会被取消,并发送 message.item-contain-lore。
匹配规则:
- 使用“包含”匹配,不要求整行完全相同。
- 配置文本中的
&会转换为 Minecraft 颜色符号后再进行匹配。 - 可以配置多个禁止文本,命中任意一项即禁止操作。
- 删除整个
anti-trade-for-contain-lore-item节点后,不执行该项检查。
交易倒计时
yaml
trade-count-down: 5
receive-trade-count-down: 15
initiate-trade-cool-down: 15| 配置项 | 单位 | 默认值 | 说明 |
|---|---|---|---|
trade-count-down | 秒 | 5 | 双方锁定交易后,正式交换物品和货币前的倒计时。 |
receive-trade-count-down | 秒 | 15 | 交易申请界面的等待时间,倒计时结束后自动拒绝申请。 |
initiate-trade-cool-down | 秒 | 15 | 玩家成功发起一次交易申请后,再次发起交易的等待时间。 |
当双方均确认并锁定交易后,插件会锁定本次交易状态并开始 trade-count-down。倒计时结束后才会记录交易、转移物品、扣除货币并向收款方发放货币。
message.trade-cool-down 和 message.initiate-trade 中的默认秒数是固定文本,不会自动读取上述配置。修改倒计时时,应同步修改消息中的时间描述。
禁止交易的世界
yaml
anti-trade-world:
- 'fb'插件检查交易发起方所在世界的名称。世界名称只要包含列表中的任意文本,就会禁止发起交易并发送 message.anti-trade-world。
例如,配置 fb 时,名称为 fb、fb_01 或 world_fb 的世界都会被拦截。该匹配区分大小写。
删除整个 anti-trade-world 节点后,不执行世界名称关键词检查。交易距离配置仍可能要求双方处于同一世界。
交易距离
yaml
trade-distance: -1| 值 | 世界要求 | 距离要求 |
|---|---|---|
小于 0 | 不要求双方位于同一世界 | 不检查距离 |
等于 0 | 必须位于同一世界 | 不检查距离 |
大于 0 | 必须位于同一世界 | 双方距离不得超过配置值 |
距离检查发生在交易申请创建之前。未通过检查时,只向发起方发送 message.trade-distance。
潜行右键发起交易
yaml
shift-right-initiate-trade: true| 值 | 说明 |
|---|---|
true | 玩家潜行并右键另一名玩家时发起交易申请。 |
false | 关闭潜行右键发起方式,仍可使用 /ldt trade 玩家 发起交易。 |
该配置只控制交互事件,不影响命令和插件 API 发起交易。
提示消息
yaml
message:
trade-success: '&a交易成功!'
trade-cancel: '&c交易取消!'| 配置项 | 触发条件 | 可用替换内容 |
|---|---|---|
message.trade-distance | 双方不满足世界或距离要求。 | 无 |
message.item-contain-lore | 玩家操作了包含禁止 Lore 的物品。 | 无 |
message.anti-trade-world | 发起方所在世界被禁止交易。 | 无 |
message.trade-success | 物品和货币交换完成。 | 无 |
message.trade-cancel | 交易界面在完成前关闭或倒计时被终止。 | 无 |
message.trade-cool-down | 发起方仍处于交易冷却。 | 无 |
message.initiate-trade | 成功向目标发出交易申请。 | {player}:接收方玩家名 |
message.receive-trade | 玩家收到交易申请。 | {player}:发起方玩家名 |
message.refuse-trade | 接收方拒绝申请,或申请等待超时。 | 无 |
message.refused-trade | 发起方的申请被拒绝或超时。 | {player}:接收方玩家名 |
message.trade-try | 发起方已经处于其它交易申请中。 | 无 |
message.target-busy | 目标已经处于其它交易申请中。 | 无 |
message.insufficient-slot | 对方背包空槽数量少于当前玩家提交的物品槽位数量。 | 无 |
message.insufficient-vault | Vault 金币余额不足。 | 无 |
message.insufficient-point | PlayerPoints 点券余额不足。 | 无 |
message.insufficient-LyShopReload#货币ID | 指定 LyShopReload 货币余额不足。 | 无 |
message.insufficient-CX#货币ID | 指定 CraftX 变量货币余额不足。 | 无 |
message.trade-locked-self | 玩家锁定交易后尝试修改自己的交易物品。 | 无 |
自定义货币余额不足消息
自定义货币的消息键必须使用 insufficient- 加完整货币键。
yaml
message:
insufficient-LyShopReload#金币碎片: '&c金币碎片不足!'
insufficient-CX#示例货币: '&c示例货币不足!'如果没有配置对应消息,代码会使用“自定义货币不足”作为默认文本。
颜色代码
通过插件消息工具发送的内容会将 & 转换为 Minecraft 颜色符号,因此可以使用 &a、&c、&7 等传统颜色代码。
当前版本中,背包空间不足和货币不足消息由 Bukkit 直接发送,没有经过统一的颜色转换方法。若发现这些消息原样显示 &,需要在实际配置和服务端环境中调整显示方式。
配置注意事项
config.yml必须使用正确的 YAML 缩进,统一使用空格,不要使用制表符。- 布尔值使用
true或false,不要在值后添加分号。 gui-title修改后必须同步修改 DragonCore 界面的match。currency-textbox的右侧组件名必须与 DragonCore 界面组件完全一致。- 使用金币、点券或自定义货币前,必须安装并启用对应的货币插件。
- 新增自定义货币时,需要同时配置输入框映射、DragonCore 界面组件;需要税率时还要添加对应的
currency-tax节点。 - 货币金额应限制为非负整数。
- Bukkit 音效名称会直接解析,修改
initiated-trade-sound前应确认服务端版本支持该名称。 - 配置重载只会重新读取
config.yml,不会自动修复 DragonCore 界面中的标题、组件名或货币输入逻辑。