拦截器 - interceptor
概念
在 AzureFlow 中,触发器(Trigger) 通常是绑定在特定物品上的,只有当玩家手持或使用该物品时,触发器才会生效。这种机制虽然高效,但在某些场景下不够灵活。
拦截器(Interceptor) 则是一种全局监听机制,不依赖特定物品。它是 AzureFlow 中最接近底层(Bukkit API)的一层,能够拦截和响应各种原始事件,无论玩家手中是否是 AF 的物品,甚至可以脱离 AzureFlow 的物品体系。
拦截器适用于以下场景:
全局性操作:对所有物品生效的操作逻辑,例如全服右键某类物品触发某个事件。
非 AF 物品处理:即使不是 AzureFlow 生成的物品,也能监听并响应事件。
特殊事件监听:如基于 ItemMeta、lore 等细节字段做判断。
逻辑隔离:当你希望某些逻辑独立于物品逻辑进行处理时(例如 PvP 限制、区域交互检测等)。
触发器 vs 拦截器
绑定方式
绑定在 AzureFlow 物品上
全局生效,无需绑定物品
作用范围
仅限 AF 物品
所有物品,甚至非 AF 物品
使用场景
物品技能、行为绑定等
全局监听、扩展事件控制
接近底层程度
相对较高
非常接近 Bukkit API
如何使用
在插件目录下新建 interceptors
文件夹(如果尚未存在),然后在其中创建任意名称的 .yml
文件,例如:
拦截器文件的命名没有限制,只要是 .yml
格式,插件启动时会自动加载其中的拦截器逻辑。
拦截器的语法结构与触发器类似。只需要写出事件名称、条件和动作即可。例如:
示例 1:检测所有物品右键带有特定 lore 的操作
示例 2:玩家攻击攻击时触发血量检测(无视手中物品)
示例 3:禁止玩家在特定区域丢弃任何物品
备注
拦截器执行顺序早于触发器,可用于拦截默认行为。
如果你需要对事件做更加细致的控制,拦截器是首选。
不要在拦截器中过度执行重逻辑任务,建议异步或延迟处理。
Last updated