生物基础属性
所有生物都默认拥有一些属性,可自行修改
考虑到可能不是所有人都有 Groovy 的开发能力,所以特此说明
实体默认属性
在前篇 系统属性 中说到 attributes\update 下有一个名为 实体默认属性.groovy 的脚本文件,它负责管理实体默认拥有的基础属性集合
在 实体默认属性.groovy 的脚本中,我们可以看到这些代码,生物身上默认就有的属性,就是在这里配置的,可自行修改或删除
Groovy
if (entity.getType() == EntityType.PLAYER) {
// 玩家默认属性
double power = AttributeName.HEALTH.power * AttributeOptions.INSTANCE.healthBaseValue
// 为什么会额外添加一个 AttributeName.ATTRIBUTE_POWER.name + ":" + power 属性呢?
// 因为原版自带的生命值(attribute.yml 中 options 下 health 下 base value)不提供生命值这个属性的战斗力
// 会导致,战斗力看上去缺少一些,所以我们手动添加战斗力来弥补
FormatListAttributeSource source = new FormatListAttributeSource(AttributeName.ENTITY_ATTRIBUTE.name, Arrays.asList(
AttributeName.ATTRIBUTE_POWER.name + ":" + power,
AttributeName.HEALTH.name + ":80",
AttributeName.HIT_CHANCE.name + ":100",
AttributeName.CRIT_MULTIPLIER.name + ":100"
), -1)
data.addAttributeSource(source)
} else {
// 非玩家默认属性
FormatListAttributeSource source = new FormatListAttributeSource(AttributeName.ENTITY_ATTRIBUTE.name, Arrays.asList(
AttributeName.HIT_CHANCE.name + ":100",
AttributeName.CRIT_MULTIPLIER.name + ":100"
), -1)
data.addAttributeSource(source)
}提示
// 后面的字是注释,不会在代码中生效,就像 YAML 中的 # 一样
修改默认属性
修改生物默认属性主要是在以下代码中
Groovy
// 玩家属性
FormatListAttributeSource source = new FormatListAttributeSource(AttributeName.ENTITY_ATTRIBUTE.name, Arrays.asList(
AttributeName.ATTRIBUTE_POWER.name + ":" + power,
AttributeName.HEALTH.name + ":80",
AttributeName.HIT_CHANCE.name + ":100",
AttributeName.CRIT_MULTIPLIER.name + ":100"
), -1)
// 非玩家属性
FormatListAttributeSource source = new FormatListAttributeSource(AttributeName.ENTITY_ATTRIBUTE.name, Arrays.asList(
AttributeName.HIT_CHANCE.name + ":100",
AttributeName.CRIT_MULTIPLIER.name + ":100"
), -1)可以看到,相同部分如下
Groovy
FormatListAttributeSource source = new FormatListAttributeSource(AttributeName.ENTITY_ATTRIBUTE.name, Arrays.asList(
//
), -1)所以我们只需要修改,从 ...., Arrays.asList( 开始,到 ), -1) 结束的中间部分,也就是上面代码中 // 的部分,下面是示例
Groovy
// 一个属性
FormatListAttributeSource source = new FormatListAttributeSource(AttributeName.ENTITY_ATTRIBUTE.name, Arrays.asList(
"一个属性:100"
), -1)
// 两个属性,使用英文逗号 , 分割参数
FormatListAttributeSource source = new FormatListAttributeSource(AttributeName.ENTITY_ATTRIBUTE.name, Arrays.asList(
"一个属性:100",
"两个属性:100"
), -1)
// 使用 AttributeName ,不知道 AttributeName 是什么的话,请看前篇 [系统属性]
FormatListAttributeSource source = new FormatListAttributeSource(AttributeName.ENTITY_ATTRIBUTE.name, Arrays.asList(
AttributeName.HIT_CHANCE.name + ":100"
), -1)
// 无属性
FormatListAttributeSource source = new FormatListAttributeSource(AttributeName.ENTITY_ATTRIBUTE.name, Arrays.asList(), -1)提示
- 属性源使用的是
FormatListAttributeSource须按照属性名:属性值或属性名:最小值-最大值(注意是英文符号:-)的格式 - 多个属性必须使用
,分割,比如"一个属性:100", "两个属性:100",换不换行取决于你的习惯,格式正确即可 - 在
Groovy中最后一个参数后可以加,,比如"一个属性:100", "两个属性:100",
以下为错误示范
Groovy
// 没有 "" 包裹,错误
FormatListAttributeSource source = new FormatListAttributeSource(AttributeName.ENTITY_ATTRIBUTE.name, Arrays.asList(
一个属性:100
), -1)
// "" 没有包裹全,也没有拼接字符串,错误
FormatListAttributeSource source = new FormatListAttributeSource(AttributeName.ENTITY_ATTRIBUTE.name, Arrays.asList(
"一个属性:"100
), -1)
// "" 胡乱包裹,且不拼接,错误
FormatListAttributeSource source = new FormatListAttributeSource(AttributeName.ENTITY_ATTRIBUTE.name, Arrays.asList(
"一个属性:""100"
), -1)
// 没有 : ,格式不对,错误
FormatListAttributeSource source = new FormatListAttributeSource(AttributeName.ENTITY_ATTRIBUTE.name, Arrays.asList(
"一个属性100"
), -1)
// 没有 , 分割参数,错误
FormatListAttributeSource source = new FormatListAttributeSource(AttributeName.ENTITY_ATTRIBUTE.name, Arrays.asList(
"一个属性:100"
"两个属性:100"
), -1)
// 不解析 PlaceholderAPI 变量,直接塞进去,错误
FormatListAttributeSource source = new FormatListAttributeSource(AttributeName.ENTITY_ATTRIBUTE.name, Arrays.asList(
"一个属性:%player_level%"
), -1)
// 数值不是数值或范围值,错误
FormatListAttributeSource source = new FormatListAttributeSource(AttributeName.ENTITY_ATTRIBUTE.name, Arrays.asList(
"一个属性:abc"
), -1)
// 把持续时间改了,这样属性过一会就没了,错误
FormatListAttributeSource source = new FormatListAttributeSource(AttributeName.ENTITY_ATTRIBUTE.name, Arrays.asList(
// 正确的属性
), 100)