注册新属性 (BaseAttribute)

看完你就可以自己注册一个新的属性了

BaseAttribute.class

类型

方法

描述

protected void

setDefaultAttributeValue(int i)

设置属性的默认值

protected void

setCancelled(Entity entity, boolean b)

是否取消该实体此次攻击事件(不触发任何属性)

protected Object

javaScript(Entity entity, String plan)

计算公式

protected void

setHolo(String text)

设置 Holographic 提示内容

protected void

addDamage(double damage)

提高此次攻击者的攻击伤害

protected void

takeDamage(double damage)

降低此次攻击者的攻击伤害

protected void

damage(Entity entity, Entity damager, double damage)

对 entity 实体造成一次伤害,攻击者为 damager

protected boolean

chance(double chance)

触发几率

protected AttributeData

attributeData(Entity entity)

实体属性数据

protected EquipmentData

equipmentData(Entity entity)

实体装备数据

属性类型

枚举名

说明

AttributeType.DAMAGE

攻击时触发类属性

AttributeType.INJURED

被攻击时触发类属性

AttributeType.RUNTIME

属性更新时触发类属性

AttributeType.NULL

不会触发,仅提供属性标签

构造器说明

/**
* @param attributeType 属性类型
* @param attributeName 属性名
* @param placeholder 属性变量 (%ap_<属性变量>%)
*/
public BaseAttribute(AttributeType attributeType, String attributeName, String placeholder);

我怎么新注册一个 "伤害提升" 属性标签呢?

具体效果: 攻击时提高 XXX - XXX 伤害

public class DamageAttribute extends BaseAttribute {

    public DamageAttribute() {
        super(AttributeType.DAMAGE, "伤害提升", "test1");
    }
    
    @Override
    public void run(Entity damager, Entity entity, double attributeValue) {
        //获取攻击者属性数据
        AttributeData attributeData = this.attributeData(damager);
        //属性最小值
        double min = attributeValue;
        //属性最大值 (所有属性最大值都是在 标签后加[1])
        //最小值: 伤害提升
        //最大值: 伤害提升[1]
        double max= attributeData.getAttributeValue("伤害提升[1]");
        //随机值
        double r = new Random().nextDouble() * (max - min) + min;
        //增加此次攻击者攻击伤害
        this.addDamage(r);
    }
}

我怎么给 "伤害提升" 加上触发几率呢?

具体效果: 攻击时有 XX 几率,提高 XXX - XXX 伤害 那么将 "伤害提升" 标签的属性类型改为 NULL 类型 再新注册一个 "伤害提升几率" 的属性标签,属性类型为 DAMAGE

public class DamageChanceAttribute extends BaseAttribute {

    public DamageChanceAttribute() {
        super(AttributeType.DAMAGE, "伤害提升几率", "test2");
    }
    
    @Override
    public void run(Entity damager, Entity entity, double attributeValue) {
        //触发几率判断
        if (this.chance(attributeValue)){
            AttributeData attributeData = this.attributeData(damager);
            //获取最小值
            double min = attributeData.getAttributeValue("伤害提升");
            //获取最大值
            double max= attributeData.getAttributeValue("伤害提升[1]");
            double r = new Random().nextDouble() * (max - min) + min;
            this.addDamage(r);
        }
    }
}

public class DamageAttribute extends BaseAttribute {
    public DamageAttribute() {
        super(AttributeType.NULL, "伤害提升", "test1");
    }
}

那么我该怎么把属性注册至服务器呢?

@Override
public void onEnable(){
    //将属性草(一种植物)进服务器里
    new DamageChanceAttribute().registerAttribute();
    new DamageAttribute().registerAttribute();
}
注册 AttributePlus 插件属性,那就必须在插件 plugin.yml 内添加以下内容
depend: [AttributePlus]

注册完成后在装备上加上 "伤害提升几率: 100""伤害提升: 100 - 200" 就可以看到效果了! 是不是炒鸡简单?

最后更新于

这有帮助吗?