MonsterPlaceholder
MonsterPlaceholder是从MonsterAPI-2.x版本开始支持的一个内置变量系统,它可以在任何支持的地方使用这个变量系统 在MonsterAPI-3.x完全重写,本文档基于3.0.1版本
PlaceholderAPI兼容
使用 %monsterapi_mp_$变量$%
来使用 MonsterPlaceholder
使用格式
这只是一个官方推荐格式,也是官方变量的使用标准
使用 $ap3:物理攻击.def@u$或$ap3:物理攻击$
来引用变量
官方变量一般由4个部分组成,格式为 $唯一标识符:数据.附加数据@目标$
也可以是一个 $唯一标识符:数据$
的格式,因为官方变量会在解析前自动为你填入附加数据和目标
官方工具
这不是一个硬性要求的格式,但更推荐使用这个格式
如果你需要使用 JavaScript 变量和开发附属那么你需要阅读此部分
部分 | 描述 | 使用 | 工具默认值 |
---|---|---|---|
唯一标识符 | id | 必须在后面加一个:否则变量无法使用 | 必填内容 |
关键词 | 基本的数据 | 必须写在:的右边 | 必填内容 |
附加数据 | 额外附加的数据 | 在数据的后面使用.来区分附加数据 | def |
目标 | 变量解析的目标 | 在最后使用一个@?代表目标 | u |
目标 | 描述 |
---|---|
u | user 使用者 |
t | target 被使用者 |
其他 | 其他变量支持的目标 |
TIP
唯一标识符必须唯一
官方工具获取的任何数据都不包含任何分割符
附加数据可以是x.x.x的格式
官方工具时可以通过getAt()获取@后的任意字符
官方变量
变量 | 描述 |
---|---|
Bukkit变量 | |
$bukkit:health.max$ | 最大生命值 |
$bukkit:health.lose$ | 失去的生命值 |
$bukkit:health.now$ | 当前生命值 |
$bukkit:health$ | 当前生命值 |
$bukkit:level$ | 玩家当前等级 |
MonsterAPI变量 | |
$monsterapi:randomvalue.[最小值].[最大值]$ | 随机数 |
$monsterapi:rv.[最小值].[最大值]$ | 随机数 |
$monsterapi:math.[自定义公式]$ | 计算 |
$monsterapi:data.[key]$ | EntityData中的数据 |
AttributePlus变量 | |
$ap3:[属性名].max$ | 最大属性值 |
$ap3:[属性名].min$ | 最小属性值 |
$ap3:[属性名].random$ | 随机属性值 |
$ap3:[属性名]$ | min-max 范围属性值 |
SkillAPI变量 | |
$sapi:value.[key]$ | value存储值 |
$sapi:skilllevel.[技能名]$ | 技能等级 |
$sapi:attribute.[属性名]$ | 属性值 |
$sapi:attribute.point$ | 属性点 |
$sapi:flag.[key]$ | flag值 |
$sapi:flagtime.[key]$ | flag剩余时间 |
在脚本中注册变量
JavaScript
//$hp:percent.2$
var identifier = "hp"
var author = "MonsterXZ"
var tips = "百分比血量"
var version = "1.0.0"
function parse(utils, user, target) {
/*
utils 解析工具
key $identifier:key.data@u$中key的部分
data $identifier:key.data@u$中data的部分
entity 自动通过@?获取的目标
*/
var key = utils.getKey()
if(key.equals("percent")){
var data = utils.getData()
var entity = utils.getEntity()
var args = data.split(".")
if(entity.getHealth() > 0){
if(args[0].equals("number")){
return (user.getHealth() / 100).toFixed(parseInt(args[1])) + "%"
}
if(args[0].equals("icon")){
var icon = args[1]
var string = ""
var have = entity.getHealth() / entity.getMaxHealth() * 10
var lose = 10 - have - 1
for (var i = 0; i < have-1; i++) {
string += "§a" + icon
}
if(have != 10) string += "§7" + icon
for (var i = 0; i < lose; i++) {
string += "§f" + icon
}
return string
}
}
}
return ""
}
在插件中注册变量
Java
public class Example extends SubMPlaceholder {
//唯一标识符,一般是插件名或缩写
@Override
public String getIdentifier() {
return "Example";
}
//作者
@Override
public String getAuthor() {
return "MonsterXZ";
}
//提示或介绍,尽可能简短
@Override
public String getTips() {
return "一个例子";
}
//变量版本
@Override
public String getVersion() {
return "1.0.0";
}
//传递的参数是由$括起来的完整变量
//不需要操作变量中的{...} 它会自动通过MPlaceholder解析
@Override
public String parse(LivingEntity user, LivingEntity target, String params) {
/*
utils 解析工具
key $identifier:key.data@u$中key的部分
data $identifier:key.data@u$中data的部分
entity 自动通过@?获取的目标
*/
MPlaceholderUtils utils = new MPlaceholderUtils(user, target, params);
String key = utils.getKey();
String data = utils.getData();
LivingEntity livingEntity = utils.getEntity();
if(key.equalsIgnoreCase("health")){
switch (data) {
case "now":
case "def":
return livingEntity.getHealth() + "";
case "max":
return livingEntity.getMaxHealth() + "";
case "lose":
return (livingEntity.getMaxHealth() - livingEntity.getHealth()) + "";
}
}
return "0";
}
}