🥋
AttributePlus - Pro
  • AttributePlus
  • 插件相关
    • 高版本物品问题
    • 配置
      • attribute.yml
      • stats.yml
      • script.yml
    • 语言
  • 属性相关
    • 优先级 / 战斗力 / 公式 / 消息
    • MythicMobs 属性相关
  • 读取相关
    • 过滤符相关
    • 装备条件标签
    • NBT属性加载
    • 自定义条件标签
    • 新读取格式相关 (>=3.3.0.7)
    • 旧读取格式相关 (<=3.3.0.6)
    • 属性内嵌条件格式
    • 属性百分比读取格式
  • 机制相关
    • 蓄力机制
    • 盾牌机制
    • 弓箭机制
    • 召唤机制
  • 属性脚本
    • 属性类型
    • 脚本教学
      • RUNTIME 类型
      • UPDATE 类型
      • CUSTOM 类型
      • KILLER 类型
      • 延迟触发任务
    • 脚本方法
    • 常见问题
  • 开发文档
    • API
    • Counter 计数器
    • AttributeComponent
      • AttributeType
      • Example
      • AttributeName
    • CustomTriggerComponent
    • EmbeddedCondition
    • ReadComponent
      • 教学
  • 更新记录
由 GitBook 提供支持
在本页
  • 读取需求
  • 代码
  • 像 装备等级 这种标签该怎么写?
  • 我要怎么才能将 插件默认的读取方式注销 掉?
  • 后续

这有帮助吗?

  1. 开发文档
  2. ReadComponent

教学

示例

读取需求

读取 "物理伤害: 100 (+100)" 括号内的属性值

代码

以下代码使用 Kotlin 语言

@AutoRegister
class TestRead : DescriptionRead(ReadPriority.BEFORE, AttributeReadType.VALUE, true){

    override fun read(key: String, lore: String): Array<Number> {
        var array = arrayOf<Number>(0.0, 0.0)

        //判断描述内是否包含括号
        if (lore.contains("[()]".toRegex())){
            //取出括号内的值
            val value = lore.getValue("\\((.*?)\\)")
            array = arrayOf(value, value)
        }
        return array
    }

    fun String.getValue(regex: String): Double {
        val p: Pattern = Pattern.compile(regex)
        val m: Matcher = p.matcher(this)
        while (m.find()) {
            return m.group(1).replace("[^0-9.-]".toRegex(), "").toDoubleOrNull() ?: 0.0
        }
        return 0.0
    }
}

像 装备等级 这种标签该怎么写?

@AutoRegister
class TestRead : DescriptionRead(ReadPriority.BEFORE, AttributeReadType.BOOLEAN, true){

    //使用 @AutoIncreaseKey 注释来新增标签,如果不这样做则不会读取这个标签
    //当然你也可以使用 AttributeManager 内的 increaseKey(string: String) 方法来新增
    @AutoIncreaseKey
    val level: String = "装备等级"

    override fun condition(entity: LivingEntity, lore: String): Boolean {
        if (lore.contains(level) && entity is Player){
            //获取描述上的装备等级要求值,这边我就从简的写了
            val value = lore.split(level)[1].toIntOrNull() ?: 0
            return entity.level >= value
        }
        return true
    }
}

我要怎么才能将 插件默认的读取方式注销 掉?

ReadComponent 组件上有 unregister 方法,你只需要将 AttributeValueRead().unregister() 即可

后续

写完后,当然就是注册了,这里请使用 @AutoRegister 注释进行自动注册,最后再插件是在plugin.yml 依赖上加 AttributePlus 这样子就完成了

上一页ReadComponent下一页更新记录

最后更新于1年前

这有帮助吗?