注册部分
StartupEvents.registry("shield_system:shield_type", event => {
//创建一个简单的单元护盾,永久存在
event.create("kubejs_test_unit")
.createSimpleUnitShield()
//创建一个简单的护盾组,护盾组的单元护盾永久存在
event.create("kubejs_test_group")
.createSimpleGroupShield()
//创建一个持续5秒的护盾,这个护盾属于护盾组
event.create("kubejs_test_time")
.createTimeLimitedShield(20 * 5)
//创建一个在5秒内持续衰减的护盾,这个护盾属于护盾组
event.create("kubejs_test_decay")
.createDecayShield(20 * 5)
//接下来是高级部分
event.create("kubejs_custom_1")
//添加护盾提供者
.shieldFactory(
//使用单元护盾构造器,为构建器提供kjs的对象,便于管理
() => UnitShieldBuilder.of((initAmount) => new TestShield(initAmount))
//tick
.tick((kubeUnitShield, living) => {
kubeUnitShield.getKubeObject().tick(kubeUnitShield, living)
})
//save
.save((kubeUnitShield, living) => {
kubeUnitShield.getKubeObject().save(kubeUnitShield, living)
})
//load
.load((kubeUnitShield, living) => {
kubeUnitShield.getKubeObject().load(kubeUnitShield, living)
})
//由于是单元护盾,所以不应该提供单元护盾构造器,而是直接提供单元护盾,所以.create(0)
.build().create(0)
)
event.create("kubejs_cunstom_2")
//添加护盾提供者
.shieldFactory(
//使用护盾组
() => new GroupShield(
//护盾组单元护盾构造器,并且为构建器提供kjs的对象,便于管理
UnitShieldBuilder.of((initAmount) => new TestShield(initAmount))
.tick((kubeUnitShield, living) => {
kubeUnitShield.getKubeObject().tick(kubeUnitShield, living)
})
.save((kubeUnitShield, living) => {
kubeUnitShield.getKubeObject().save(kubeUnitShield, living)
})
.load((kubeUnitShield, living) => {
kubeUnitShield.getKubeObject().load(kubeUnitShield, living)
})
//由于是护盾组,所以不存在初始护盾,所以这里提供单元护盾构造器,不需要.create(0)
.build()
)
)
})
function TestShield(initAmount) {
this.initAmount = initAmount
}
/**
* @param {$KubeUnitShield_<TestShield} kubeUnitShield
* @param {$LivingEntity_} living
*/
TestShield.prototype.tick = function (kubeUnitShield, living) {
kubeUnitShield.reduceShieldAmount(this.initAmount / 100)
}
/**
* @param {$KubeUnitShield_<TestShield} kubeUnitShield
* @param {$LivingEntity_} living
*/
TestShield.prototype.save = function (kubeUnitShield, living) {
}
/**
* @param {$KubeUnitShield_<TestShield} kubeUnitShield
* @param {$LivingEntity_} living
*/
TestShield.prototype.load = function (kubeUnitShield, living) {
}
/**
* @param {$LivingEntity_} living
*/
TestShield.prototype.sendMessage = function (living) {
living.sendSystemMessage(this.initAmount)
}
//注册护盾以及优先级(必须)
ShieldSystemEvents.RegisterShieldPriority(event => {
event.addShieldType("kubejs:kubejs_test_group")
event.addShieldType("kubejs:kubejs_test_time")
event.addShieldType("kubejs:kubejs_test_decay")
event.addShieldType("kubejs:kubejs_cunstom_2")
})
具体使用部分
EntityEvents.afterHurt(event => {
//为护盾添加护盾值,有两种情况:
//如果目标护盾是护盾组,则会以提供的护盾值创建一个单元护盾,然后将单元护盾添加进护盾组
//如果目标护盾是单元护盾,则会直接在原有护盾值的基础上增加护盾值
ShieldAPI.addShieldAmount(event.entity, "kubejs:kubejs_cunstom_2", 40)
//获取护盾实例
var shieldInstance = ShieldAPI.getShieldInstance(event.entity, "kubejs:kubejs_test_decay")
//模组为你提供了两种默认护盾类型,不需要注册就可以直接使用。
//为玩家添加一个5秒内持续衰减的10护盾
ShieldAPI.addCommonDecayShield(event.entity,10,20*5)
//为玩家添加一个持续5秒的护盾
ShieldAPI.addCommonTimeLimitedShield(event.entity,10,20*5)
})