修复1.21及以上版本生命值属性增加、清除错误问题
可能有部分小变动未记录,但最主要的新增、修复、优化记录都在下方 修复 伤害反弹类 属性可能会导致双方相互无限反弹的情况 修复 移速加成 属性因负值属性导致报错问题 优化 玩家物品描述属性标签读取处理,优化相关处理 优化 AttributeManager 属性管理器中各类型属性的管理集合 新增 AttributeAPI 实体攻击方法 attackTo(entity, attacker, damage) 造成固定伤害方法: 该方法 entity.damage(damage) 相比,该方法直接击杀目标击杀者会为 [attacker] 建议各类真伤处理调用该方法,该方法造成的时候不会触发二次属性处理 新增 实体单体冷却中控器(针对非玩家实体) 实体死亡时将自动清除相关的冷却数据 在 AttrScriptUtils.kt 类中新增相关调用方法,可在属性脚本中调用 Utils.hasEntityCooling(name, entity) 目标是否冷却中 Utils.hasEntityCooling(name, entity, time) 目标是否冷却中,未冷却则进入冷却 Utils.resetEntityCooling(name, entity) 重置目标冷却 新增 CUSTOM 自定义触发器属性类型 支持通过自定义 JavaScript 属性脚本编写该类型,脚本配置编写下面方法即可: function runCustom(attr, caster, target, params, source, handle) caster 触发者 target 触发目标(可为空) params 触发器事件传入的参数 source 触发器此次事件对象 新版自带 3 种触发器,需要 SkillAPI 插件支持: SKILL CAST(技能释放) SKILL DAMAGE ENTITY(技能攻击非玩家实体) SKILL DAMAGE PLAYER(技能攻击玩家实体) 注意 该类型属性需在 onLoad() 方法内调用 setCustomTrigger(name: String) 方法 设置该属性脚本的触发器名称,例如 setCustomTrigger("SKILL CAST") JavaScript 用法示例:传送门 新增 CUSTOM 自定义触发器注册 附属开发者可通过 CustomTriggerComponent 类,自定义注册更多不同的触发器 下面附带 SKILL CAST 属性触发器代码示例 复制interface CustomTriggerComponent<E: Event> { //触发器名称 val name: String //触发器事件 val event: Class<E> //触发器事件优先级 val priority: EventPriority //触发器事件是否忽略取消 val ignoreCancelled: Boolean /** * 触发器触发条件,条件不满足时将不触发处理 * [event] 触发器此次事件 */ fun condition(event: E): Boolean { return true } /** * 触发者对象传入 * [event] 触发器此次事件 */ fun caster(event: E): LivingEntity /** * 目标对象传入 * [event] 触发器此次事件 */ fun target(event: E): LivingEntity? { return null } /** * 触发事件相关参数传入,可在 runCustom 属性处理方法获取 * [event] 触发器此次事件 */ fun params(event: E): Array<Any> { return emptyArray() } /* 注册触发器 */ fun register() { attributeManager.registerTrigger(this) } } class SkillCastAttributeTrigger : CustomTriggerComponent<PlayerCastSkillEvent> { override val name: String = "SKILL CAST" override val event: Class<PlayerCastSkillEvent> = PlayerCastSkillEvent::class.java override val priority: EventPriority = EventPriority.NORMAL override val ignoreCancelled: Boolean = false override fun caster(event: PlayerCastSkillEvent): LivingEntity { return event.player } override fun params(event: PlayerCastSkillEvent): Array<Any> { val skillName = event.skill.data.name return arrayOf(skillName) } }
修复"生命力(%)"属性词条,存在极小概率导致玩家掉血问题 修复频繁增加/清除属性来源,存在极小概率导致玩家掉血问题 以上问题存在于之前的所有版本中,无法稳定复现 在 3.3.2.2~3.3.2.5 版本中概率增大,且可频繁稳定复现(所以我才能修复,所以以后有BUG先找复现方法再跟我反馈)