VipSystemEx 自定义函数教程

发布于 2020-02-13  4021 次阅读


在VipSystem 4.6及以后的版本中,支持了自定义函数功能,通过这个功能,你可以自定义编辑,来实现一些需要定时执行的任务

通过它,可以做到什么

自定义函数功能允许你配置一系列的后台命令或js函数,可以访问BukkitAPI及其他Java的代码,设定函数的时限,在函数开始运行时执行一系列操作,在结束时再执行一些列操作。不过需要注意的是,自定义函数在被发起后,除非是通过数据库直接删除,或正常到期,否则无法直接取消,或获取相关变量。

下面的文章,将会告诉你如何通过这个功能,在一些支持离线玩家操作的权限组插件中,实现限时单个权限功能。

打开./plugins/VipSystem 文件夹,可以看到插件会生成一个custom文件夹,点开文件夹后,默认会生成一个Example文件夹,文件夹内还有一个custom.ymlscript.js,所有自定义函数都需要参照这个格式,如下方所示

- Example (这里的Example就是这个自定义函数的名字)
-- custom.yml (存储自定义函数的基本信息)
-- script.js (存储自定义函数的js)

打开custom.yml,默认的配置文件如下(下文的注释已翻译到中文),可以参考注释修改相关参数

默认配置文件及中文注释

description: 'Give vip by moving group manually'
#自定义函数的描述
args: ["Player","Group","Time"]
#自定义函数的参数
duration: '{Time}'
#自定义函数的持续时间
#你可以使用 {Time} 来替换在参数中已经定义的Time,插件会自动将上方提供的数值填入该项,同时,也会自动把1d1h1s这样的类似的时间转换到插件所需要的数据类型
#或者,你也可以直接填写你需要的持续时间的毫秒数,例如1分钟 则填入60000
onStart:
  - '[Console] pex user {Player} group remove {Group}'
#函数开始时执行步骤
onEnd:
  - '[Console] pex user {Player} group remove {Group}'
#函数结束时执行步骤
#同样可以使用上方定义的参数中的变量来填充命令
#目前可用的标签如下
#'[Console] command' 执行一个控制台命令
#'[Script] func(arg1,arg2)' 使用给定的参数来执行 'script.js' 中的js函数

如果,我们需要将上方的描述改成中文,并且将功能改为给玩家添加临时权限。则可以把配置文件改为下方的样子

description: '给与玩家临时权限'
args: ["玩家","权限","时间"]
duration: '{时间}'
onStart:
  - '[Console] pex user {玩家} add {权限}'
onEnd:
  - '[Console] pex user {玩家} remove {权限}'

改成这样之后,并把文件夹命名为TimePerm,进入服务器,重载插件,输入/vipsys customs 即可看到你写的自定义函数了,可以按照提示输入命令来完成操作

/vip run TimePerm Soldier__ essentials.fly 1d

这样,我们就能给Soldier__这个玩家essentials.fly权限1天

使用JavaScript脚本

插件还支持调用JavaScript脚本来执行一些操作,下面的例子将会写一个在执行命令时把玩家抛向高空的JavaScript例子

注意,你需要有一定的JavaScript和Bukkit基础。如果没有,建议不要往下阅读

打开script.js,编辑一个函数,如下

var helper = Java.type("me.zhanshi123.vipsystem.script.ScriptHelper");
//VipSystemEx提供的快捷类,可以快捷调用一些方法,例如发送信息等
var bukkit = Java.type("org.bukkit.Bukkit");
//获取Bukkit
var Vector = Java.type("org.bukkit.util.Vector");
//获取Vector向量

var activate = function (player) {
    //此时传入的player参数为字符串
    helper.sendMessage("&6公告 &7>>> &f玩家 &a" +player+" &f购买了临时飞行权限,大家快去膜拜一下氪金大佬!")
    //发送服务器公告
    var playerObj = bukkit.getPlayer(player);
    //通过bukkit方法获取玩家对象
    if(playerObj == null){
        return;//如果对象为空,就返回
    }
    helper.sendMessage(playerObj, "&c恭喜你开通了临时飞行权限");
    //给玩家发送消息
    playerObj.setVelocity(new Vector(0, 2, 0));
    //将玩家向上抛出
    playerObj.setNoDamageTicks(20 * 2);
    //取消玩家落地伤害
};

这样就写好了一个叫activate的函数,这时我们将它从custom.yml调用,修改后的配置文件如下

description: '给与玩家临时权限'
args: ["玩家","权限","时间"]
duration: '{时间}'
onStart:
  - '[Console] pex user {玩家} add {权限}'
  - '[Script] activate({玩家})' 
onEnd:
  - '[Console] pex user {玩家} remove {权限}'

重载,测试效果

可以看到,玩家被成功抛出,消息发送成功


一个全世界最菜的菜鸡