机制
标签
AttributeSystem
字数
217 字
阅读时间
2 分钟
介绍
机制 是 AttributeSystem 的一大特色,你可以通过编写机制并在战斗机制组中使用来操纵战斗过程
AttributeSystem 自带的机制详见机制列表
定义
javascript
var Coerce = static("Coerce");
var Player = find("org.bukkit.entity.Player");
var ProxyParticle = find(">taboolib.common.platform.ProxyParticle");
var Plus = static("com.skillw.attsystem.internal.operation.Plus").INSTANCE;
//@Mechanic(my_mechanic)
function exec(fightData, context, damageType) {
var attacker = fightData.attacker;
var defender = fightData.defender;
var power = attacker instanceof Player ? attacker.level : 0;
var damage = calculate([context.get("formula"), attacker, null]);
var location = defender.location;
var particle = ProxyParticle.EXPLOSION_LARGE;
Tool.sendParticle(particle, location, 36.0, 100, 1.0);
fightData.damageSources.put(
"my_mechanic_damage",
Plus.element(power * 10 + damage)
);
return true;
}kotlin
@AutoRegister
object MyMechanic : Mechanic("my_mechanic") {
override fun exec(fightData: FightData, context: Map<String, Any>, damageType: DamageType): Any? {
val attacker = fightData.attacker ?: return false
val defender = fightData.defender
val power = max(if (attacker is Player) attacker.level else 0, 0)
val damage = Coerce.toDouble(context["formula"])
val players = attacker.getNearbyEntities(10.0, 10.0, 10.0).filterIsInstance<Player>().map { adaptPlayer(it) }
val location = adaptLocation(defender.location)
ProxyParticle.EXPLOSION_LARGE.sendTo(location, range = 10.0)
fightData.damageSources["my_mechanic_damage"] = Plus.element(power * 10 + damage)
return true
}
}效果
在将my_mechanic加入战斗机制组attack-damage后
