⚖️自定义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
}