Skip to content

自定义属性

完全使用脚本属性,你必须会使用 JavaScript 或 Groovy 才能编写属性

现在你可能看得两眼一黑,不要紧,可以到 属性编写教程 中查看脚本教程

嗯...插件自带一套基础属性脚本,可以在 attributes 文件夹下找到

脚本编写

一个示例

JavaScript
// 属性类型 这是一个字符串
var type = "ATTACK_AND_DEFENSE"
// 属性id 全小写,使用_分割
var id = "test_script_attribute"
// 属性名
var name = "测试脚本属性"
// 属性优先级
var priority = 1
// 属性战斗力
var power = 1.0

/**
 * onEnable(attr) 会在加载时运行
 * @parms attr 这个属性对象本身
 */
function onEnable(attr) {
    //使用 AttributeAPI.registerDefaultAttribute 可快捷注册默认类型属性
    AttributeAPI.registerDefaultAttribute("test_default", "测试默认属性", 0.0)
    AttributeAPI.registerDefaultAttribute("test_default1", "测试另一个默认属性", 0.0)
}

/**
 * ATTACK_AND_DEFENSE 类属性,运行 onAttackAndDefense(attr, attacker, entity, handler) 函数
 * @parms attr 这个属性对象本身
 * @parms attacker 攻击者
 * @parms entity 被攻击者
 * @parms handler 属性处理器
 */
function onAttackAndDefense(attr, attacker, entity, handler) {
    attacker.sendMessage(handler.getRandomValue(attacker, "测试脚本属性"))
    handler.addDamage(attacker, handler.getRandomValue(attacker, "测试脚本属性"))
    
    // 返回 true 代表触发,false 反之
    return true
}
Groovy
package attributes // 包名

// 必须 import 才能调用对应类
import cn.org.bukkit.craneattribute.api.AttributeAPI
import cn.org.bukkit.craneattribute.core.attribute.AttributeTypes
import cn.org.bukkit.craneattribute.core.attribute.Attribute
import cn.org.bukkit.craneattribute.core.attribute.handler.AttackAndDefenseHandler
import org.bukkit.entity.LivingEntity
import groovy.transform.CompileStatic

@CompileStatic // 静态注解
class TestAttribute extends Attribute { //继承 cn.org.bukkit.craneattribute.core.attribute.Attribute

    // 必须无参构造 否则无法加载
    public TestAttribute() {
        super(AttributeTypes.ATTACK_AND_DEFENSE, "test_script_attribute", "测试脚本属性", 1, 1.0D);
    }

    /**
     * onEnable() 会在加载时运行
     * 和 JavaScript 不一样,不需要传入 attr 参数 因为 attr 就是这个类本身
     * this.xxx 等同于在 JavaScript 中使用 attr.xxx
     */
    @Override
    public void onEnable() {
        //使用 AttributeAPI.registerDefaultAttribute 可快捷注册默认类型属性
        AttributeAPI.registerDefaultAttribute("test_default", "测试默认属性", 0.0D)
        AttributeAPI.registerDefaultAttribute("test_default1", "测试另一个默认属性", 0.0D)
    }

    /**
     * ATTACK_AND_DEFENSE 类属性,运行 onAttackAndDefense 方法
     * 和 JavaScript 不一样,不需要传入 attr 参数 因为 attr 就是这个类本身
     * this.xxx 等同于在 JavaScript 中使用 attr.xxx
     * @parms attacker 攻击者
     * @parms entity 被攻击者
     * @parms handler 属性处理器
     */
    @Override
    public boolean onAttackAndDefense(LivingEntity attacker, LivingEntity entity, AttackAndDefenseHandler handler) {
        handler.addDamage(attacker, handler.getRandomValue(attacker, "测试脚本属性"))
        // 返回 true 代表触发,false 反之
        return true
    }

}