Skip to content

⚖️自定义MM条件

ScriptCondition下

类型

技能类型描述需要重写的方法
ENTITY实体类型见下例子
LOCATION坐标类型见下例子
CASTER释放者类型见下例子
SKILLMETADATA技能元数据类型见下例子
TWOENTITY对比实体类型见下例子
TWOLOCATION对比坐标类型见下例子
ENTITYLOCATION对比实体和坐标类型见下例子
SKILLMETADATAENTITY对比技能元数据类型和实体类型(mm 5.x)见下例子

示例

yaml
Conditions:
- ap3{移动速度=>100}
javascript
//唯一条件名
var conditionName = "ap3|ap"
/*
  Entity 实体 重写check(utils, data, abstractEntity)方法
  Location 坐标 重写check(utils, data, abstractLocation)方法
  Caster 释放者 重写check(utils, data, caster)方法
  SkillMetadata 技能元数据 重写check(utils, data, skillMetadata)方法
  TwoEntity 自己和目标 重写check(utils, data, abstractEntity, abstractEntity)方法
  TwoLocation 自己坐标和目标坐标 重写check(utils, data, abstractLocation, abstractLocation)方法
  EntityLocation 自己实体对目标坐标 重写check(utils, data, abstractEntity, abstractLocation)方法
  SkillMetaDataEntity 技能元数据和目标 重写check(utils, data, skillMetadata, abstractEntity)方法 (5.x专属)
*/
var conditionType = "ENTITY"

/**
 * 加载时运行
 *
 * @param utils 脚本工具
 * @param data 脚本数据
 * @param line 技能配置
 * @param lineParse 解析器 其实就是MythicConfigLine
 */
function onLoad(utils, data, line, lineParse) {
    //遍历AttributePlus标签 将是AttributePlus标签的内容存入临时数据
    var attributeList = AttributePlus.attributeManager.attributeNameList
    var attributesHashMap = new Packages.java.util.HashMap()
    for (var i in attributeList.keySet().toArray()) {
        var attributeName = attributeList.keySet().toArray()[i]
        var attributeValue = lineParse.getString(attributeName, "null")
        if (!attributeValue.equals("null")) {
            //存入一个MythicMobs的RangedDouble
            attributesHashMap.put(attributeName, utils.getRangedDouble(attributeValue))
        }
    }
    data.set("attributesHashMap", attributesHashMap)
}

/**
 * 检查
 *
 * @param utils 脚本工具
 * @param data 脚本数据
 * @param abstractEntity 抽象实体
 */
function check(utils, data, abstractEntity) {
    //不是AttributePlus能解析的实体就不去检测
    if (!abstractEntity.isLiving()) return false;
    //需要检测的目标
    var entity = abstractEntity.getBukkitEntity()
    //遍历onLoad时存入的数据
    var attributesHashMap = data.get("attributesHashMap")
    for (var i in attributesHashMap.keySet().toArray()) {
        var attributeName = attributesHashMap.keySet().toArray()[i]
        //获取属性值
        var attributeValue = AttributeAPI.getAttrData(entity).getAttributeValue(attributeName)[1]
        //通过RangedDouble提供的方法检测条件语句
        if (!attributesHashMap.get(attributeName).equals(attributeValue)) {
            //任何一个属性不满足 都不能通过条件
            return false;
        }
    }
    //返回true则通过条件 false反之
    return true
}