自定义属性
完全使用脚本属性,你必须会使用 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
}
}