package org.serverct.ersha.attribute.sub.attack
import org.bukkit.entity.LivingEntity
import org.serverct.ersha.api.annotations.AutoRegister
import org.serverct.ersha.api.component.SubAttribute
import org.serverct.ersha.api.enums.AttributeName
import org.serverct.ersha.attribute.enums.AttributeType
const val TEST = "溟灭几率"
const val TEST_DAMAGE = "溟灭伤害"
const val TEST_DEFENSE = "溟灭防御"
@AutoRegister
//属性注册后会在 attribute.yml 配置生成对应的配置节点
class TestAttribute : SubAttribute(12, 5.0, TEST, AttributeType.ATTACK, "test") {
override fun onLoad(): SubAttribute {
//每次调用 getRandomValue() 时,都会自动临时储存属性值,再通过 {变量名} 显示
arrayListOf(
/*攻击者*/
"溟灭! 你对对方造成 {test_damage} 点溟灭伤害",
/*被攻击者*/
"溟灭! 对方对你造成 {test_defense} 点溟灭伤害"
).setMessages()
//设置默认的属性公式
"{entityA:溟灭伤害}+({entityB:生命力}*0.5)".setFormula()
return this
}
override fun runAttack(attacker: LivingEntity, entity: LivingEntity): Boolean {
//获取攻击者的 溟灭几率 属性值
val chance = attacker.getRandomValue().toDouble()
return chance.chance().apply {
if (this){
//获取公式计算后的值
var damage = getFormulaValue {
//这里面是默认公式的计算方法,由于 1.7.10 无法使用公式计算,所以会执行这里来获取计算值
val health = entity.getRandomValue(AttributeName.HEALTH.toDefaultName()).toDouble()
//返回值 (Kotlin 就是这么方便)
attacker.getRandomValue(TEST_DAMAGE).toDouble()+(health * 0.5)
}
//获取被攻击者的 溟灭防御 属性值
damage -= entity.getRandomValue(TEST_DEFENSE).toDouble()
//储存数据值,因为上方已经调用了 entity.getRandomValue(TEST_DEFENSE).toDouble() 方法
//所以这里我们要初始化一下值
("test_defense" to damage).storageValue(true)
//增加此次攻击者的伤害
attacker.addDamage(damage)
}
}
}
@AutoRegister
class TestDamageAttribute : SubAttribute(-1, 1.0, TEST_DAMAGE, AttributeType.OTHER, "test_damage")
@AutoRegister
class TestDefenseAttribute : SubAttribute(-1, 1.0, TEST_DEFENSE, AttributeType.OTHER, "test_defense")
}