Skip to content

配置说明

LyDragonBlock 的配置由主配置 config.yml、方块配置目录 block/ 和自动生成的数据目录 data/ 组成。

修改 config.ymlblock/ 下的方块配置后,可使用 /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文本空字符串事件触发类型,可填写 leftrightbreak
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-origindrop

条件 condition

同一事件中的条件会按列表顺序逐项检查。任意条件不满足时立即停止后续条件检查,并执行 false-action

条件中的 {owner} 会替换为方块放置者名称;放置者名称为空时替换为 SYSTEM{id} 会替换为当前方块 ID。

通用条件

格式说明
papi:{表达式}先解析 PlaceholderAPI 变量,再计算表达式结果。
permission:{权限节点}玩家拥有指定权限时通过。
nopermission:{权限节点}玩家没有指定权限时通过。
roll:{概率}按概率随机判断,配置值范围为 01
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,但当前实现没有正确进入该条件的处理分支,不应将其作为可用条件使用。

槽位格式

槽位来源格式说明
DragonCoreDragonCore#槽位名读取 DragonCore 缓存槽位。
GermPluginGermPlugin#槽位名读取萌芽槽位数据库中的物品。
MinecraftMinecraft#槽位编号读取玩家原版背包槽位。项目示例标注范围为 0-36
APInventoryAPInventory#分页ID#槽位编号读取梦星桐背包指定分页和槽位。项目示例标注槽位范围为 0-53
LyInventoryLyInventory#背包ID#类型读取旧版 LyInventory 的指定背包槽位。
LyInventoryReloadLyInventoryReload#背包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-actionfalse-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 可能无法按配置产生预期效果。需要稳定限制交互时,可优先使用 cdservercd

指令与消息动作

格式说明
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 方块配置。
  • 保留当前内存中的已放置方块数据。
  • 保留当前内存中的玩家冷却和全服冷却。

重载方块配置时,每个顶层方块节点会单独载入。某个方块配置格式错误时,控制台会输出该方块载入失败的信息,其他能够正常解析的方块仍会继续载入。