Skip to content

GroovyConditionReader - 条件读取器基类

本篇由 AI 生成

📖 概述

GroovyConditionReader 是判断条件是否满足的抽象基类,继承自 Kotlin 核心的 ConditionReader 类。它用于解析配置中的条件表达式(如"血量需求: 50~100"),并根据上下文数据判断条件是否成立。

🎯 核心功能

  • 条件解析:从配置行中提取条件参数
  • 布尔判断:返回条件是否成立的布尔值
  • 键名管理:通过 key 字段标识条件类型
  • 消息反馈:支持在条件不满足时向玩家发送提示信息

📝 类定义

groovy
@CompileStatic
abstract class GroovyConditionReader extends ConditionReader {
    
    String name                    // 读取器名称
    String configKey               // 配置键名
    int priority                   // 执行优先级
    String key                     // 条件键名标识
    List<ConfigSetting> settingConfig  // 配置项列表
    
    // 构造函数
    GroovyConditionReader(String name, int priority, String key) {
        //...
    }

💡 使用示例

groovy
import scripts.libs.GroovyConditionReader
import cn.org.bukkit.craneattribute.api.read.ReadableLine
import cn.org.bukkit.craneattribute.api.attribute.data.AttributeData
import cn.org.bukkit.craneattribute.api.attribute.source.AttributeSource
import cn.org.bukkit.craneattribute.core.attribute.data.PlayerAttributeData

class HealthConditionReader extends GroovyConditionReader {
    
    List<String> readFormat = Arrays.asList("{key}:\\s*@value")
    
    HealthConditionReader() {
        super("health_condition", 10, "血量需求")
    }
    
    @Override
    protected boolean read(ReadableLine readableLine, AttributeData data, AttributeSource attributeSource) {
        // 实现处理逻辑
        return true
    }
}

🔧 核心方法

condition() - 公共入口

groovy
boolean condition(ReadableLine readableLine, AttributeData data, AttributeSource attributeSource)

默认委托给 read() 方法,可重写以添加日志或前置校验。

extractValues() - 数值提取

groovy
// 使用默认正则
List<String> extractValues(ReadableLine readableLine, List<String> readFormat)

// 使用自定义正则
List<String> extractValues(ReadableLine readableLine, List<String> readFormat, String valueRegex)

🔧 返回值说明

返回值含义
true条件满足,允许继续执行
false条件不满足,阻止后续操作

📌 注意事项

  1. 非玩家实体:对于非玩家实体,通常返回 true 以避免阻塞
  2. 性能考虑:避免在条件判断中执行耗时操作
  3. 用户友好:条件不满足时提供清晰的提示信息
  4. 容错处理:处理解析失败的情况,避免崩溃