跳到主要内容

方块交互事件

KetherModulesLite 的核心功能之一。通过配置文件定义玩家与方块交互时触发的 Kether 脚本。

事件类型

事件标识说明配置文件夹
break_block破坏方块break_block/
leftClick_block左键方块click_block/
rightClick_block右键方块click_block/
walk_on_block行走在方块上on_block/
sneak_on_block蹲下在方块上on_block/
jump_on_block跳跃在方块上on_block/

每个文件夹支持放入多个 .yml 文件,插件会自动加载。

配置结构

每种事件下按方块材质名(小写)配置。每个材质下支持两种匹配模式:

模式一:全局匹配(all)

对所有该材质的方块生效,不限坐标。

模式二:精确坐标匹配

用数字编号(123...)定义特定坐标的方块,通过 position 指定坐标。

每个条目包含:

  • cancel — Kether 表达式,返回 true 则取消原版事件(如阻止破坏)
  • actions — 触发时执行的 Kether 脚本
  • position — 仅精确匹配需要,支持以下格式:
    • 单点匹配:'world,x,y,z'
    • 范围匹配:'world,x1,y1,z1~x2,y2,z2'(使用 ~ 分隔两个坐标点)
    • 列表格式:支持字符串或列表形式

范围坐标示例

你可以使用 ~ 符号定义一个立方体区域,插件会自动判断方块是否在该区域内:

diamond_block:
1:
# 单点匹配:只匹配 world 世界的 (100,64,200) 这一个方块
position: 'world,100,64,200'
cancel: true
actions: |-
tell "这是一个特殊的钻石块"
2:
# 范围匹配:匹配 world 世界中从 (100,64,200) 到 (110,70,210) 的立方体区域内的所有方块
position: 'world,100,64,200~110,70,210'
cancel: true
actions: |-
tell "你在保护区内破坏了钻石块"
3:
# 多个区域:使用列表形式定义多个区域
position:
- 'world,100,64,200~110,70,210'
- 'world,200,64,300~210,70,310'
cancel: false
actions: |-
tell "这是多个保护区之一"

范围坐标的工作原理:

  • 插件会自动计算两个坐标点形成的立方体边界框(BoundingBox)
  • 当玩家交互的方块坐标在该边界框内时,触发对应的脚本
  • 坐标顺序不重要,插件会自动取最小值和最大值

破坏方块事件

配置文件位于 break_block/ 文件夹。

默认 break_block.yml

break_block:
drop_period: 1
all_drop: true
diamond_ore: |-
set amt to 10
set item to "zap:Gem"
set vel to inline "-0.5~0.5,0.2,0~0.8"
if eventlite drop &item amount &amt to ~,~,~+2,~ chance 50 throw &vel then {
tell "好哦"
evel drop exp amount &amt to sender chance 100
}
false
diamond_block:
all:
cancel: |-
not eventlite drop "mm:mmID" amount 1 to "{block}" chance 50
actions: |-
set item to "mm:mmID"
eventlite give &item amount 1 to sender chance 50
1:
position: 'world,x,y,z'
cancel: "true"
actions: |-
tell "special location"
oak_log: |-
tell inline node "def4"
evel delay 1s kml setblock at "{block}" this name
true

说明:

  • drop_period — 掉落冷却(tick)
  • all_drop — 是否允许所有掉落
  • 破坏方块事件支持简写模式:直接写 Kether 脚本字符串(如 diamond_ore 示例),脚本返回值作为是否取消事件的判断
  • 也支持完整模式:all + 编号条目(如 diamond_block 示例)

简写模式 vs 完整模式

简写模式(直接写脚本):

break_block:
oak_log: |-
tell inline node "def4"
evel delay 1s kml setblock at "{block}" this name
true

脚本返回 true 表示取消原版破坏事件,false 表示不取消。

完整模式(all + 编号):

break_block:
diamond_block:
all:
cancel: "true"
actions: |-
tell "所有钻石块都不能破坏"
1:
position: 'world,100,64,100'
cancel: "true"
actions: |-
tell "这个特殊位置的钻石块"
2:
# 使用范围坐标保护一个区域
position: 'world,100,64,100~120,80,120'
cancel: "true"
actions: |-
tell "这是保护区内的钻石块,无法破坏"

点击方块事件

配置文件位于 click_block/ 文件夹,包含左键和右键两种事件。

默认 click_block.yml

leftClick_block:
crafting_table:
all:
cancel: true
actions: |-
tell "sb2"
1:
position:
- 'world,x,y,z'
cancel: 'false'
actions: |-
tell "sb1"
2:
# 范围坐标示例:保护一个区域内的工作台
position: 'world,100,64,100~120,80,120'
cancel: true
actions: |-
tell "这个区域的工作台被保护了"

rightClick_block:
crafting_table:
all:
cancel: "not perm vip"
actions: |-
tell "sb2"
1:
position: 'world,x,y,z'
cancel: false
actions: |-
tell "sb1"
2:
# 多个区域保护
position:
- 'world,100,64,100~120,80,120'
- 'world,200,64,200~220,80,220'
cancel: "not perm admin"
actions: |-
tell "只有管理员可以使用这些区域的工作台"

注意 cancel 支持 Kether 表达式,比如 "not perm vip" 表示没有 vip 权限的玩家会被取消事件。

行走/蹲下/跳跃事件

配置文件位于 on_block/ 文件夹。

默认 on_block.yml

walk_on_block:
crafting_table:
all:
cancel: "not perm vip"
actions: |-
tell "sb2"
1:
position: 'world,x,y,z'
cancel: false
actions: |-
tell "sb1"

sneak_on_block:
crafting_table:
all:
cancel: "not perm vip"
actions: |-
tell "sb2"

jump_on_block:
crafting_table:
all:
cancel: "not perm vip"
actions: |-
tell "sb2"

事件冷却

config.yml 中配置各事件的触发冷却(tick),防止频繁触发:

prevent_period:
left_click_block: 5
right_click_block: 5
jump_on_block: 5
sneak_on_block: 5
walk_on_block: 5

获取坐标

使用 /kml getloc 命令获取准星指向方块的坐标,直接复制到 position 配置中。

检测距离和忽略方块在 config.yml 中配置:

target_block:
distance: 64
ignore_block:
- air
- stone

Kether 内置变量

在方块事件的 Kether 脚本中,可以使用以下内置功能:

  • this name — 当前方块材质名
  • this age — 方块 age 属性
  • this data — 方块 data 值
  • "{block}" — 当前方块的位置字符串
  • sender — 触发事件的玩家