Skip to content

机制

标签
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

mechanic

贡献者

The avatar of contributor named as Glomzzz Glomzzz
The avatar of contributor named as Glom-c Glom-c

页面历史