Skip to content

属性

标签
AttributeSystem
字数
939 字
阅读时间
4 分钟

介绍

标识符

属性本身只是一个标识符,用来存取相应的属性数据

功能实现

不同于其它属性插件,AttributeSystem 中一个属性 与 其功能的实现 是 完完全全分开的

  • 读取&记录 通过 ReadPattern 读取格式 实现
  • 属性具体功能的实现 通过 原版属性公式 / 机制组公式(战斗公式) / 脚本监听器 / 机制 / 代码 实现

自定义属性

plugins/AttributeSystem/attributes 文件夹下任意一个YAML 文件中定义你的属性即可

yaml
ExampleAtt:
  #权重  不填默认0
  priority: 1
  #是否会计算到实体属性上  不填默认true
  include-entity: true
  #展示名  不填默认names的第一个
  display: "攻击力"
  #名称  不填默认是key
  names:
    - "示例属性"
    - "示例属性2"
    - "示例属性3"
  #读取组 不填默认Default
  read-pattern: Default
  #属性映射
  map:
    #其他属性, 这里格式和NBT属性一样
    PhysicalDamage:
      #其他属性的捕获组
      #后面可以通过 <占位符公式id> 调用本属性读取组的占位符公式
      #就像这样: <total>
      #支持内联函数与占位符
      value: |-
        calculate '<total> * %player_level%'

你可以通过以下方式快速定义一个属性

yaml
快速属性: {}

接下来由我将属性的定义逐一拆解进行讲解.

键 [key]

属性的唯一标识符,用来存取属性数据 读取 NBT 属性时会通过它来读取

NBT 属性 ,后面会详细讲解

yaml
ATTRIBUTE_DATA:
  example_data:
    MyFirstAttribute:
      value: 100

权重 [priority]

用来决定与其它属性间的读取顺序, 如果你在用诸如 AttributePlus 类的属性插件, 大概会遇到下面这个问题: 当一个属性名为 伤害 另一个属性名为 暴击伤害属性在读取时会一律把含 暴击伤害 的词条读为了 伤害 属性,而忽略了 暴击伤害AttributeSystem 通过权重解决这一问题

一个属性的权重值越小 读取顺序越靠前

yaml
Crit:
  priority: 2
  names:
    - "伤害"
  read-pattern: Percent
CritDamage:
  priority: 1
  names:
    - "暴击伤害"
  read-pattern: Percent

以上配置便能完美地解决读取问题,这也是权重的作用

计入实体 [include-entity]

  • true 会计入实体属性,并能够通过实体占位符获取 (%as_att:属性id_占位符id%)
  • false 不会计入实体属性,能通过物品占位符获取 (%as_equipment:装备组id_装备id_属性名_占位符id%)

名称 [names]

将会以<name>为键带入读取格式,与文本进行匹配

读取格式 [read-pattern]

与一个读取格式绑定,读取格式是用来定义属性是如何读取的 AttributeSystem自带的读取格式:

数字
  • default [[valuemax, percentmax, scalar, percentmin, valuemin, percent, value]] 默认的数字属性读取组
  • percent [[percentmax, percentmin, percent]] 百分百属性读取组
字符串
  • strskip [[value]] 字符串读取组 (只读一个)
  • strappend [[value]] 字符串读取组 (以某符号为分隔符进行字符串叠加)
  • strroman [[roman]] 字符串读取组 (读取罗马数字)

贡献者

The avatar of contributor named as Glomzzz Glomzzz
The avatar of contributor named as Glom-c Glom-c

页面历史