Skip to content

插件默认属性

插件提供了一些属性,供大家使用和参考

所有属性均可更改或删除,也可在 config.yml 中关闭 create system resource file 来取消创建默认文件(libs expansions attributes 都不会创建)

默认属性

attributes\attack

文件名属性属性类型描述
命中几率.groovy命中几率ATTACK_AND_DEFENSE多少几率命中目标
命中几率.groovy闪避几率DEFAULT对应1:1减少命中几率
物理攻击.groovy物理攻击ATTACK_AND_DEFENSE攻击力
物理攻击.groovy物理护甲DEFAULT防御力
物理攻击.groovy物理穿透DEFAULT对应1:1减少防御力
物理攻击.groovy暴击几率DEFAULT暴击的几率
物理攻击.groovy暴击伤害DEFAULT暴击造成的伤害倍数
物理攻击.groovy暴击规避DEFAULT对应1:1减少暴击几率
物理攻击.groovy暴伤抵抗DEFAULT对应1:1减少暴击伤害
物理攻击.groovy吸血几率DEFAULT生命窃取的几率
物理攻击.groovy吸血倍率DEFAULT生命窃取的倍率
物理攻击.groovy吸血规避DEFAULT对应1:1减少吸血几率
物理攻击.groovy吸血抵抗DEFAULT对应1:1减少吸血倍率
减速几率.groovy减速几率ATTACK_AND_DEFENSE使目标受到药水减速效果
减速几率.groovy减速效果DEFAULT目标受到减速效果时的效果
减速几率.groovy减速时间DEFAULT目标受到减速效果时的时间

attributes\update

文件名属性属性类型描述
默认属性.groovy默认属性UPDATE_AFTER实体默认拥有的的属性
生命值.groovy生命值UPDATE_AFTER实体的最大生命值
移速加成.groovy移速加成UPDATE_AFTER实体基础移速的加成

attributes\update

文件名属性属性类型描述
生命恢复.groovy生命恢复RUNTIME_AFTER玩家每隔几秒恢复多少生命值

GroovyAttribute

随便打开一个文件,都可以看到它有着 ... extends GroovyAttribute 这样的内容,这是它继承了 GroovyAttribute 这个类,是位于 libs 文件夹下的一个抽象类

它额外提供了一个 GroovyAttribute(AttributeType type, AttributeName attributeName) 构造方法

点我查看代码

截止至 2025/11/29,它的代码是这样的

Groovy
package libs

import cn.org.bukkit.craneattribute.api.attribute.AttributeType
import cn.org.bukkit.craneattribute.core.attribute.Attribute
import groovy.transform.CompileStatic


@CompileStatic
abstract class GroovyAttribute extends Attribute {

    GroovyAttribute(AttributeType type, AttributeName attributeName) {
        this(type, attributeName.id, attributeName.name, attributeName.priority, attributeName.power, attributeName.max)
    }

    GroovyAttribute(AttributeType type, String id, String name, int priority, double power, double max) {
        super(type, id, name, priority, power, max)
    }

    GroovyAttribute(String type, String id, String name, double power, double max) {
        super(type, id, name, power, max)
    }
}

AttributeName

随便打开一个文件,都可以看到 AttributeName.xxxx 之类的东西,AttributeName 是位于 libs 文件夹下的一个枚举类

它记录了属性的 id name priority power max,这样非常便于我们管理属性

点我查看代码

截止至 2025/11/29,它的代码是这样的

Groovy
package libs

import groovy.transform.CompileStatic

@CompileStatic
enum AttributeName {
    // ATTACK_AND_DEFENSE 类
    HIT_CHANCE("HIT_CHANCE", "命中几率", 1, 1.0D, -1),
    DOGE_CHANCE("DOGE_CHANCE", "闪避几率", -1, 1.0D, -1),

    PHYSICAL_ATTACK("PHYSICAL_ATTACK", "物理攻击", 2, 1.0D, 66.66),
//    MAGICAL_ATTACK("MAGICAL", "法术攻击", 3, 1.0D),

    PHYSICAL_ARMOR("ARMOR", "物理护甲", -1, 1.0D, -1),
    PHYSICAL_ARMOR_PENETRATION("ARMOR_PENETRATION", "物理穿透", -1, 1.0D, -1),

//    MAGICAL_ARMOR("MAGICAL_ARMOR", "法术护甲", -1, 1.0D),
//    MAGICAL_ARMOR_PENETRATION("MAGICAL_ARMOR_PENETRATION", "法术穿透", -1, 1.0D),

    CRIT_CHANCE("CRIT_CHANCE", "暴击几率", -1, 1.0D, -1),
    CRIT_MULTIPLIER("CRIT_MULTIPLIER", "暴击伤害", -1, 1.0D, -1),
    CRIT_EVASION("CRIT_EVASION", "暴击规避", -1, 1.0D, -1),
    CRIT_MULTIPLIER_RESISTANCE("CRIT_MULTIPLIER_RESISTANCE", "暴伤抵抗", -1, 1.0D, -1),

    LIFESTEAL_CHANCE("LIFESTEAL_CHANCE", "吸血几率", -1, 1.0D, -1),
    LIFESTEAL_MULTIPLIER("LIFESTEAL_MULTIPLIER", "吸血倍率", -1, 1.0D, -1),
    LIFESTEAL_EVASION("LIFESTEAL_EVASION", "吸血规避", -1, 1.0D, -1),
    LIFESTEAL_MULTIPLIER_RESISTANCE("LIFESTEAL_MULTIPLIER_RESISTANCE", "吸血抵抗", -1, 1.0D, -1),

    SLOW_CHANCE("SLOW_CHANCE", "减速几率", 10, 1.0D, -1),
    SLOW_POWER("SLOW_POWER", "减速效果", -1, 1.0D, -1),
    SLOW_DURATION("SLOW_DURATION", "减速时间", -1, 1.0D, -1),

    TEST_ATTRIBUTE("TEST_ATTRIBUTE", "测试脚本属性", 1, 1.0D, -1),


    // UPDATE_AFTER 类
    ENTITY_ATTRIBUTE("ENTITY_ATTRIBUTE", "默认属性", 2, 1.0D, -1),
    HEALTH("HEALTH", "生命值", 10001, 1.0D, -1),
    SPEED("SPEED", "移动速度", 10002, 1.0D, -1),

    // RUNTIME_AFTER 类
    HEALTH_REGEN("HEALTH_REGEN", "生命回复", 1, 1.0D, -1),

    //
    ATTRIBUTE_POWER("ATTRIBUTE_POWER", "战斗力", -1, 1.0D, -1)


    final String id
    final String name
    final int priority
    final double power
    final double max

    AttributeName(String id, String name, int priority, double power, double max) {
        this.id = id
        this.name = name
        this.priority = priority
        this.power = power
        this.max = max
    }
}
AttributeName 的应用

命中几率.groovy 为例,AttributeName.HIT_CHANCE.name 就可以调用 AttributeName 这个枚举类中的 HIT_CHANCEname

Groovy
package attributes.attack

import cn.org.bukkit.craneattribute.core.attribute.AttributeTypes
import cn.org.bukkit.craneattribute.core.attribute.handler.AttackAndDefenseHandler
import libs.GroovyAttribute
import libs.Utils
import groovy.transform.CompileStatic
import libs.AttributeName
import org.bukkit.entity.LivingEntity

@CompileStatic
class HitChance extends GroovyAttribute {

    HitChance() {
        super(AttributeTypes.ATTACK_AND_DEFENSE, AttributeName.HIT_CHANCE);
    }

    @Override
    void onEnable() {
        this.setSkipFilter(true)
        Utils.registerDefaultAttribute(AttributeName.DOGE_CHANCE)
    }

    @Override
    boolean onAttackAndDefense(LivingEntity attacker, LivingEntity entity, AttackAndDefenseHandler handler) {
        double v = handler.getRandomValue(attacker, AttributeName.HIT_CHANCE.name) - handler.getRandomValue(entity, AttributeName.DOGE_CHANCE.name)

        if (!Utils.chance(v)) {
            handler.trigger(entity, AttributeName.DOGE_CHANCE.name)
            handler.setCancelled(true)
            attacker.sendMessage("§e${entity.getName()} 闪避了你的攻击!")
            return false
        }

        return true
    }

}