配置说明
LyDragonBlock 的配置由主配置 config.yml、方块配置目录 block/ 和自动生成的数据目录 data/ 组成。
修改 config.yml 或 block/ 下的方块配置后,可使用 /ldb reload 重载。重载会重新读取主配置和全部方块配置,但不会重新载入 data/ 中的已放置方块数据。
配置文件
| 文件 / 目录 | 用途 | 是否手动编辑 |
|---|---|---|
config.yml | 配置交互检测间隔、破坏事件处理方式和提示文本。 | 是 |
block/*.yml | 定义方块 ID、DragonCore 匹配值、放置指令和交互事件。 | 是 |
data/*.yml | 保存已放置方块的位置、放置者、方块 ID 和原始物品。 | 通常不需要 |
block/ 会递归读取目录内所有扩展名为 .yml 的文件,因此可以使用子目录整理方块配置。每个文件可以定义一个或多个方块。
主配置 config.yml
默认配置如下:
yaml
# 部分事件触发间隔,单位:秒
# 推荐设置为 1 秒
interaction-interval: 1.0
# 是否无视已经被其他插件取消的方块破坏事件
ignore-unbreak: false
message:
not-the-owner-break: '&c你不是放置者, 无法破坏该方块!'
block-cd: '&c该方块在 &6{time}&c 秒内无法再次进行交互!'基础设置
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
interaction-interval | 小数 | 1.0 | 同一玩家触发左键或右键交互检测的最小间隔,单位为秒。 |
ignore-unbreak | 布尔值 | false | 是否继续处理已经被其他插件取消的方块破坏事件。 |
interaction-interval 是玩家级别的统一检测间隔。玩家触发一次有效的方块点击事件后,在间隔结束前的其他点击不会进入 LyDragonBlock 的方块识别和事件检测。
该值不建议设置过低。方块数量和在线玩家较多时,较低的间隔会增加交互事件的判断频率。
ignore-unbreak 的行为如下:
| 值 | 行为 |
|---|---|
false | 如果破坏事件已经被其他插件取消,LyDragonBlock 不再处理该事件。 |
true | 即使破坏事件已经被其他插件取消,LyDragonBlock 仍会继续识别方块并处理破坏事件。 |
消息设置
| 配置项 | 可用替换内容 | 说明 |
|---|---|---|
message.not-the-owner-break | 无 | 非 OP 玩家尝试破坏启用了主人保护的他人方块时发送。 |
message.block-cd | {time} | 当前方块对该玩家仍处于 blockcd 冷却时发送,时间以秒显示并保留一位小数。 |
消息支持使用 & 颜色代码。将消息设置为空字符串 '' 可以关闭对应提示。
方块配置 block/*.yml
方块配置位于 plugins/LyDragonBlock/block/。每个顶层节点都是一个独立的方块 ID。
yaml
示例方块:
match: '示例方块的match'
anti-break-by-non-owner: true
place-command:
- '[console]say %player_name% 放了一个{id}'
- '[op]tell %player_name% 1'
events:
主人提示:
type: 'right'
true-action:
- 'message:&7该方块的主人是 &6{owner}'方块节点
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| 顶层方块 ID | 文本 | 无 | LyDragonBlock 内部使用的方块 ID,也是管理界面显示、物品 NBT 和放置数据中保存的 ID。 |
match | 文本 | 无 | DragonCore 方块配置对应的 match 值,用于生成可放置的自定义头颅物品。 |
anti-break-by-non-owner | 布尔值 | false | 是否禁止非放置者破坏该方块。OP 不受此限制。 |
place-command | 文本列表 | 空列表 | 方块放置并保存数据后执行的指令。 |
events | 配置段 | 无 | 该方块可以触发的左键、右键和破坏事件。 |
警告
顶层方块 ID 与 DragonCore 的 match 不是同一个值。顶层节点填写 LyDragonBlock 的方块 ID,DragonCore 配置中的匹配值单独填写在 match 节点。
方块事件按照 YAML 中的配置顺序从上到下检测。同一种触发类型可以配置多个事件;除非动作执行了 return,否则插件会继续检测后续同类型事件。
放置指令 place-command
玩家放置从 /ldb open 管理界面取得的方块物品后,插件会记录放置数据,并按列表顺序执行 place-command。
yaml
示例方块:
match: '示例方块的match'
place-command:
- '[console]say %player_name% 放置了 {id}'
- '[op]tell %player_name% 放置成功'
- 'me 放置了一个方块'| 写法 | 执行身份 | 说明 |
|---|---|---|
[console]指令 | 控制台 | 移除 [console] 前缀后,由控制台执行。 |
[op]指令 | 玩家临时 OP | 执行期间临时给予玩家 OP,执行结束后恢复原状态。 |
指令 | 玩家 | 直接以放置者身份执行。 |
放置指令会先进行 PlaceholderAPI 变量替换。插件自身会在生成方块物品时写入方块 ID,但 place-command 中的 {id} 没有由放置指令执行器单独替换;原配置虽然使用了该写法,实际是否变化取决于 PlaceholderAPI 或其他变量处理。
事件配置 events
每个事件节点的名称是事件 ID,只需要在当前方块的 events 中保持不重复。
yaml
示例方块:
match: '示例方块的match'
events:
点击方块:
type: 'right'
cd-group: 'group'
cd-message: '&7该事件在 {time} 秒内无法再次触发!'
condition:
- 'permission:{vip.1}'
true-action:
- 'message:&a条件通过'
false-action:
- 'message:&c条件不通过'事件节点
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| 事件 ID | 文本 | 无 | 当前事件的配置名称,仅用于区分事件。 |
type | 文本 | 空字符串 | 事件触发类型,可填写 left、right 或 break。 |
cd-group | 文本 | default | 玩家冷却和全服冷却使用的冷却组。 |
cd-message | 文本 | 空字符串 | 当前事件的玩家冷却或全服冷却尚未结束时发送。 |
condition | 文本列表 | 空列表 | 事件条件,所有条件均通过后才执行 true-action。 |
true-action | 文本列表 | 空列表 | 所有条件通过时执行的动作。 |
false-action | 文本列表 | 空列表 | 任意条件不通过时执行的动作。 |
未配置 condition 时,条件结果默认为通过,插件会直接执行 true-action。
事件类型
| 类型 | 触发时机 | 事件特性 |
|---|---|---|
left | 玩家左键点击已记录的方块。 | 可通过 cancel 取消本次点击事件。 |
right | 玩家右键点击已记录的方块。 | 可通过 cancel 取消本次点击事件。 |
break | 玩家破坏已记录的方块。 | 可通过 cancel 阻止破坏;未取消时会删除对应的 data 数据。 |
破坏事件会先检查 anti-break-by-non-owner。启用主人保护后,非 OP 玩家只有名称与数据中保存的放置者名称一致时才能继续破坏。
LyDragonBlock 会关闭已记录方块的原版方块掉落。需要返还方块本体或掉落其他物品时,应在 break 事件中配置 drop-origin 或 drop。
条件 condition
同一事件中的条件会按列表顺序逐项检查。任意条件不满足时立即停止后续条件检查,并执行 false-action。
条件中的 {owner} 会替换为方块放置者名称;放置者名称为空时替换为 SYSTEM。{id} 会替换为当前方块 ID。
通用条件
| 格式 | 说明 |
|---|---|
papi:{表达式} | 先解析 PlaceholderAPI 变量,再计算表达式结果。 |
permission:{权限节点} | 玩家拥有指定权限时通过。 |
nopermission:{权限节点} | 玩家没有指定权限时通过。 |
roll:{概率} | 按概率随机判断,配置值范围为 0 至 1。 |
yaml
condition:
- 'papi:{%player_level% * 1 < 100}'
- 'permission:{vip.1}'
- 'roll:{0.1}'papi 表达式支持:
| 类型 | 支持内容 |
|---|---|
| 数学运算 | +、-、*、/、括号 |
| 数值比较 | >、<、>=、<=、==、!= |
| 字符串比较 | 使用单引号或双引号包裹字符串,并通过 == 或 != 比较 |
| 逻辑运算 | &&、|| |
| 布尔值 | 无比较符时,仅文本 true 会判断为通过 |
在 YAML 双引号字符串中编写复杂表达式时需要注意引号嵌套。通常建议将整条条件放在 YAML 单引号中。
物品槽位条件
| 格式 | 说明 |
|---|---|
check_equals_name:{槽位#名称} | 指定槽位物品的显示名称必须完整等于目标文本。 |
check_contain_name:{槽位#文本} | 指定槽位物品的显示名称必须包含目标文本。 |
check_equals_lore:{槽位#文本} | 指定槽位物品必须存在一整行与目标文本完全相同的 Lore。 |
目标名称和 Lore 支持 & 颜色代码。条件解析时会将其转换为 Minecraft 颜色符号再进行比较。
项目示例中还列出了 check_contain_lore,但当前实现没有正确进入该条件的处理分支,不应将其作为可用条件使用。
槽位格式
| 槽位来源 | 格式 | 说明 |
|---|---|---|
| DragonCore | DragonCore#槽位名 | 读取 DragonCore 缓存槽位。 |
| GermPlugin | GermPlugin#槽位名 | 读取萌芽槽位数据库中的物品。 |
| Minecraft | Minecraft#槽位编号 | 读取玩家原版背包槽位。项目示例标注范围为 0-36。 |
| APInventory | APInventory#分页ID#槽位编号 | 读取梦星桐背包指定分页和槽位。项目示例标注槽位范围为 0-53。 |
| LyInventory | LyInventory#背包ID#类型 | 读取旧版 LyInventory 的指定背包槽位。 |
| LyInventoryReload | LyInventoryReload#背包ID#类型 | 读取 LyInventory 重置版的指定背包槽位。 |
| 原版主手 | Origin#MainHand | 读取玩家主手物品。 |
| 原版副手 | Origin#OffHand | 读取玩家副手物品。 |
| 原版头盔 | Origin#Helmet | 读取玩家头盔。 |
| 原版胸甲 | Origin#ChestPlate | 读取玩家胸甲。 |
| 原版护腿 | Origin#Legging | 读取玩家护腿。 |
| 原版靴子 | Origin#Boots | 读取玩家靴子。 |
只有服务器实际安装了对应插件并满足其 API 环境时,相关第三方槽位格式才能使用。
yaml
condition:
- 'check_equals_name:{Origin#MainHand#&6钥匙}'
- 'check_equals_lore:{Origin#MainHand#&7可用于开启家具}'动作 true-action 与 false-action
条件判断完成后,插件按列表顺序执行对应动作。动作中的 {owner} 和 {id} 会分别替换为方块放置者名称和当前方块 ID。
控制台指令和 OP 指令还会进行 PlaceholderAPI 变量替换。message 动作只处理颜色代码以及插件内置的 {owner}、{id},不会额外调用 PlaceholderAPI。
事件控制动作
| 格式 | 说明 |
|---|---|
cancel | 取消当前 Bukkit 交互或破坏事件。用于 break 时可以阻止方块被破坏。 |
remove | 立即将当前方块设置为空气,并删除对应的已放置方块数据。 |
return | 立即结束本次事件处理,不再执行当前列表的后续动作,也不再检测后续事件。 |
在 break 事件中执行 remove 后,插件仍会在破坏事件结束阶段确认并清理对应数据。执行 remove 不会自动掉落方块物品。
冷却动作
| 格式 | 作用范围 | 说明 |
|---|---|---|
blockcd:秒数 | 当前玩家与当前方块 | 使当前玩家暂时无法再次与该方块交互。 |
cd:组名:秒数 | 当前玩家与冷却组 | 阻止当前玩家触发相同 cd-group 的事件。 |
cd:秒数 | 当前玩家与 default 组 | 省略组名时使用 default 冷却组。 |
servercd:组名:秒数 | 全服与冷却组 | 阻止所有玩家触发相同 cd-group 的事件。 |
servercd:秒数 | 全服与 default 组 | 省略组名时使用 default 冷却组。 |
冷却时间单位均为秒,必须大于 0。这些冷却只保存在内存中,服务器关闭或插件重新启动后不会继续保留。
事件触发时会依次检查玩家冷却组和全服冷却组。任意冷却尚未结束时发送当前事件的 cd-message,其中 {time} 会替换为剩余秒数并保留一位小数。
警告
当前实现写入 blockcd 时使用了独立的方块冷却容器,但交互检查读取的是普通冷却容器,因此 blockcd 可能无法按配置产生预期效果。需要稳定限制交互时,可优先使用 cd 或 servercd。
指令与消息动作
| 格式 | 说明 |
|---|---|
console:指令 | 经过 PlaceholderAPI 替换后,由控制台执行指令。 |
op:指令 | 经过 PlaceholderAPI 替换后,临时给予玩家 OP 并执行指令。 |
message:文本 | 向触发事件的玩家发送消息,支持 & 颜色代码。 |
yaml
true-action:
- 'console:tell %player_name% 你交互了 {id}'
- 'op:give %player_name% stone 1'
- 'message:&a该方块的主人是 &e{owner}'动作中的指令内容不需要填写开头的 /。
DragonCore 动画
| 格式 | 说明 |
|---|---|
animation:动作ID | 对当前方块的位置向触发玩家发送 DragonCore 方块动画。 |
yaml
true-action:
- 'animation:动作id'动画 ID 必须与 DragonCore 中实际存在的动作配置对应。
坐下动作
| 格式 | 说明 |
|---|---|
sit | 让玩家坐到当前方块上方,默认高度为 0.2。 |
sit:高度 | 使用指定的相对高度生成座位。 |
yaml
true-action:
- 'sit:0.2'座位通过不可见盔甲架实现。玩家死亡、传送、退出服务器或主动离开座位时,插件会移除对应盔甲架。
掉落动作
| 格式 | 说明 |
|---|---|
drop-origin | 在方块位置掉落放置时保存的原始方块物品。 |
drop:物品库@物品ID:数量 | 从支持的物品库取得物品,并在方块位置掉落指定数量。 |
drop:物品库@物品ID:最小值-最大值 | 配置随机数量范围。当前实现存在范围解析问题,实际可能固定为最小值。 |
支持的物品库前缀如下:
| 前缀 | 对应插件 |
|---|---|
AF@ | AzureFlow |
NI@ | NeigeItems |
SI@ | SX-Item |
MM@ | MythicMobs |
OA@ | OriginAttribute |
yaml
true-action:
- 'drop-origin'
- 'drop:MM@物品id:1'只有服务器安装了对应物品库插件并能正常取得目标物品时,drop 才能生成物品。物品不存在或数量格式错误时,插件会在控制台输出错误。
警告
当前随机数量代码会将范围两端都读取为最小值,因此 1-5 可能始终得到 1。需要确定数量时应直接填写固定整数。
完整方块结构
yaml
示例方块:
match: '示例方块的match'
anti-break-by-non-owner: true
place-command:
- '[console]say %player_name% 放置了方块'
events:
查看主人:
type: 'right'
true-action:
- 'message:&7该方块的主人是 &6{owner}'
权限交互:
type: 'right'
cd-group: 'vip-interact'
cd-message: '&c请等待 &e{time}&c 秒后再次操作。'
condition:
- 'permission:{vip.1}'
- 'roll:{0.5}'
true-action:
- 'cd:vip-interact:2.0'
- 'animation:动作id'
- 'message:&a交互成功。'
- 'return'
false-action:
- 'message:&c条件不满足。'
破坏处理:
type: 'break'
true-action:
- 'drop-origin'数据文件 data/*.yml
玩家放置方块时,插件会在 plugins/LyDragonBlock/data/ 中生成独立的数据文件。文件名由世界名称和方块坐标组成:
text
世界名称_X_Y_Z.yml数据结构如下:
yaml
location:
world: world
x: '100.0'
y: '64.0'
z: '100.0'
pitch: '0.0'
yaw: '0.0'
placer-uuid: '玩家 UUID'
placer-name: '玩家名称'
dragon-match: 'DragonCore match 值'
dragon-id: '方块 ID'
origin-item: '序列化物品数据'| 数据项 | 说明 |
|---|---|
location | 方块所在世界、坐标和方向数据。 |
placer-uuid | 放置者 UUID。 |
placer-name | 放置者名称,主人破坏判断实际使用该名称。 |
dragon-match | 放置物品中保存的 DragonCore 纹理匹配值。 |
dragon-id | 对应的 LyDragonBlock 方块 ID。 |
origin-item | 放置时物品的序列化数据,供 drop-origin 还原物品。 |
data/ 文件由插件自动创建和删除。正常破坏未被取消时,对应数据会被删除;执行 remove 时也会删除数据文件。
危险
不要在服务器运行期间随意修改或删除 data/ 文件。内存中的方块缓存不会通过 /ldb reload 从该目录重新载入,错误的数据还可能导致 /ldb load 载入失败。
重载范围
使用 /ldb reload 后会执行以下操作:
- 保存缺失的默认
config.yml和示例方块文件。 - 重新读取
config.yml。 - 清空并重新读取
block/下所有 YAML 方块配置。 - 保留当前内存中的已放置方块数据。
- 保留当前内存中的玩家冷却和全服冷却。
重载方块配置时,每个顶层方块节点会单独载入。某个方块配置格式错误时,控制台会输出该方块载入失败的信息,其他能够正常解析的方块仍会继续载入。