
Shield System
一个提供简单盾牌系统的Minecraft模组
这是一个来自 SimpleRPG Core 的独立护盾系统。
它提供了一个类似于英雄联盟的护盾系统,并拥有完整的 kubejs 支持。

目前适配 Overflow Bars
kubejs 使用方式:
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((kubeUnitShield, living) => {
kubeUnitShield.getKubeObject().save(kubeUnitShield, living)
})
//加载
.load((kubeUnitShield, living) => {
kubeUnitShield.getKubeObject().load(kubeUnitShield, living)
})
//因为是单体护盾,所以不提供单体护盾构造函数,而是直接提供一个单体护盾。因此,使用'.create(0)'</br>//注意: 原文中的'./ create(0)'可能为笔误,此处根据上下文修正为 '.build().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")
})
API 使用方式:
EntityEvents.afterHurt(event => {
//向护盾增加护盾值时有两种情况:
//如果目标护盾是护盾组,则会根据提供的护盾值创建一个单体护盾,然后将该单体护盾添加到护盾组中
//如果目标护盾是单体护盾,则会在原护盾值的基础上直接增加护盾值
ShieldAPI.addShieldAmount(event.entity, "kubejs:kubejs_test_decay", 80)
//减少护盾
ShieldAPI.reduceShieldAmount(event.entity, "kubejs:kubejs_test_decay", 40)
//获取护盾实例
var shieldInstance = ShieldAPI.getShieldInstance(event.entity, "kubejs:kubejs_test_decay")
})
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。