如何在事件触发时使用指令?如何实现外部命令方块?如何多服互动?最初只是一个简单的内部服务器需求,最终衍生出来的JS插件运行平台,JSRunner。坊间传言的BDS开发难度高的问题,C++/.Net系写dll类插件安全性差的问题,在JSRunner下皆可得到有效解决。梦之故里出品的JS插件运行平台,为BDS服务器提供了一个稳定安全的跨版本插件开发解决方案。基于谷歌V8虚拟机运行的js插件,具有线程安全的稳定性。所有事件驱动接口使用标准Json字符串传输,符合工业标准规范,易于上手,操作简单。
一、说明
二、API接口定义
三、注册机制
四、杂项
本插件平台使用v8引擎作为js解释执行工具。全程采用监听器注册机制以完成特定事件的处理。
插件基本运作原理:hook bds事件点位
-> 修改内存属性/转v8虚拟机执行事件处理代码
-> 取结果决定是否拦截/继续执行。
使用之前,请确保您已了解了js本地对象和内置对象相关内容及JSON相关语法。js基本数据及函数参考手册详见
https://www.w3school.com.cn/jsref/index.asp
中的《JavaScript 对象参考手册》章节。
(1)fileReadAllText
// 函数名:fileReadAllText
// 功能:文件输入流读取一个文本
// 参数个数:1个
// 参数类型:字符串
// 参数详解:fname - 文件名(相对BDS位置)
// 返回值:字符串
[例]
let t = fileReadAllText(
'outjs.js')
(2)fileWriteAllText
// 函数名:fileWriteAllText
// 功能:文件输出流全新写入一个字符串
// 参数个数:2个
// 参数类型:字符串,字符串
// 参数详解:fname - 文件名(相对BDS位置),content - 文本内容
// 返回值:是否写成功
[例]
let w = fileWriteAllText(
'jslog.txt',
'测试字符')
(3)fileWriteLine
// 函数名:fileWriteLine
// 功能:文件输出流追加一行字符串
// 参数个数:2个
// 参数类型:字符串,字符串
// 参数详解:fname - 文件名(相对BDS位置),content - 追加内容
// 返回值:是否写成功
[例]
let w = fileWriteLine(
'jslog.txt',
'下一行测试字符')
(4)log
// 函数名:log
// 功能:标准输出流打印消息
// 参数个数:1个
// 参数类型:字符串
// 参数详解:待输出至标准流字符串
[例] log(
'你好 js')
(5)TimeNow
// 函数名:TimeNow
// 功能:返回一个当前时间的字符串
// 参数个数:0个
// 返回值:字符串
[例]
let t = TimeNow()
(6)setShareData
// 函数名:setShareData
// 功能:存入共享数据
// 参数个数:2个
// 参数类型:字符串,数据/函数对象
// 参数详解:key - 关键字,value - 共享数据
[例] setShareData(
'TEXT_HELLO',
'你好 js')
(7)getShareData
// 函数名:getShareData
// 功能:获取共享数据
// 参数个数:1个
// 参数类型:字符串
// 参数详解:key - 关键字
// 返回值:共享数据
[例]
let t = getShareData(
'TEXT_HELLO')
(8)removeShareData
// 函数名:removeShareData
// 功能:删除共享数据
// 参数个数:1个
// 参数类型:字符串
// 参数详解:key - 关键字
// 返回值:旧数据
[例]
let oldt = removeShareData(
'TEXT_HELLO')
(9)runScript
// 函数名:runScript
// 功能:使用全局环境执行一段脚本命令并返回结果
// 参数个数:1个
// 参数类型:字符串
// 参数详解:script - 语法正确的一段脚本文本
// 返回值:脚本执行结果
[例] runScript(
'log("你好 js")')
(10)request
// 函数名:request
// 功能:发起一个远程HTTP请求
// 参数个数:4个
// 参数类型:字符串,字符串,字符串,函数对象
// 参数详解:urlpath - 远程接口路径,mode - 访问方式,params - 附加数据,func - 获取结果回调
[例] request(
'http://www.baidu.com',
'GET',
'name=act',
function (e) { })
(注:mode可使用GET和POST两种方式)
(11)setTimeout
// 函数名:setTimeout
// 功能:延时执行一条指令
// 参数个数:2个
// 参数类型:字符串/函数,整型
// 参数详解:code - 待延时执行的指令字符串/函数对象,millisec - 延时毫秒数
[例] setTimeout(
'log("你好 js")', 1000)
(12)setBeforeActListener
// 函数名:setBeforeActListener
// 功能:注册玩家事件加载前监听器
// 参数个数:2个
// 参数类型:字符串,函数对象
// 参数详解:key - 注册用关键字,func - 供事件触发时的回调函数对象
[例] setBeforeActListener(
'onChat',
function (e) { log(e) })
(13)removeBeforeActListener
// 函数名:removeBeforeActListener
// 功能:移除玩家事件监听器
// 参数个数:1个
// 参数类型:字符串
// 参数详解:key - 注册用关键字
// 返回值:旧的监听器
[例]
let oldfunc = removeBeforeActListener(
'onChat')
(14)getBeforeActListener
// 函数名:getBeforeActListener
// 功能:获取玩家事件监听器
// 参数个数:1个
// 参数类型:字符串
// 参数详解:key - 注册用关键字
// 返回值:当前设置的监听器
[例]
let func = getBeforeActListener(
'onInputText')
(15)setAfterActListener
// 函数名:setAfterActListener
// 功能:注册玩家事件加载后监听器
// 参数个数:2个
// 参数类型:字符串,函数对象
// 参数详解:key - 注册用关键字,func - 供事件触发时的回调函数对象
[例] setAfterActListener(
'onChat',
function (e) { log(e) })
(16)removeAfterActListener
// 函数名:removeAfterActListener
// 功能:移除玩家事件加载后监听器
// 参数个数:1个
// 参数类型:字符串
// 参数详解:key - 注册用关键字
// 返回值:旧监听器
[例]
let oldfunc = removeAfterActListener(
'onChat')
(17)getAfterActListener
// 函数名:getAfterActListener
// 功能:获取玩家事件加载后监听器
// 参数个数:1个
// 参数类型:字符串
// 参数详解:key - 注册用关键字
// 返回值:当前设置的监听器
[例]
let func = getAfterActListener(
'onChat')
(18)setCommandDescribe
// 函数名:setCommandDescribe
// 功能:设置一个全局指令说明
// 参数个数:2个
// 参数类型:字符串,字符串
// 参数详解:cmd - 命令,description - 命令说明
// 备注:延期注册的情况,可能不会改变客户端界面
[例] setCommandDescribe(
'testcase',
'这是一个测试用例指令说明')
(19)runcmd
// 函数名:runcmd
// 功能:执行后台指令
// 参数个数:1个
// 参数类型:字符串
// 参数详解:cmd - 语法正确的MC指令
// 返回值:是否正常执行
[例]
let r = runcmd(
'me 你好 js')
(20)logout
// 函数名:logout
// 功能:发送一条命令输出消息(可被拦截)
// 参数个数:1个
// 参数类型:字符串
// 参数详解:cmdout - 待发送的命令输出字符串
[例] logout(
'执行结果=正确')
(21)getOnLinePlayers
// 函数名:getOnLinePlayers
// 功能:获取在线玩家列表
// 参数个数:0个
// 返回值:玩家列表的Json字符串
[例]
let v = getOnLinePlayers()
(22)getStructure
// 函数名:getStructure
// 功能:获取一个结构
// 参数个数:5个
// 参数类型:整型,字符串,字符串,布尔型,布尔型
// 参数详解:dimensionid - 地图维度,posa - 坐标JSON字符串,posb - 坐标JSON字符串,exent - 是否导出实体,exblk - 是否导出方块
// 返回值:结构json字符串
[例]
let d = getStructure(0,
'{"x":0, "y":4, "z":0}',
'{"x":10, "y":14, "z":10}',
false,
true)
(23)setStructure
// 函数名:setStructure
// 功能:设置一个结构到指定位置
// 参数个数:6个
// 参数类型:字符串,整型,字符串,整型,布尔型,布尔型
// 参数详解:strnbt - 结构JSON字符串,dimensionid - 地图维度,posa - 起始点坐标JSON字符串,rot - 旋转类型,exent - 是否导入实体,exblk - 是否导入方块
// 返回值:是否设置成功
[例]
let r = setStructure(fileReadAllText(
'data.json'), 0,
'{"x":0, "y":4, "z":0}', 0,
true,
true)
(注:旋转类型包含4种有效旋转类型)
(24)reNameByUuid
// 函数名:reNameByUuid
// 功能:重命名一个指定的玩家名
// 参数个数:2个
// 参数类型:字符串,字符串
// 参数详解:uuid - 在线玩家的uuid字符串,newName - 新的名称
// 返回值:是否命名成功
// (备注:该函数可能不会变更客户端实际显示名)
[例]
let r = reNameByUuid(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9',
'请叫我LiuXiaohua')
(25)getPlayerAbilities
// 函数名:getPlayerAbilities
// 功能:获取玩家能力表
// 参数个数:1个
// 参数类型:字符串
// 参数详解:uuid - 在线玩家的uuid字符串
// 返回值:能力json字符串
[例]
let a = getPlayerAbilities(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9')
(注:含总计18种能力值)
(26)setPlayerAbilities
// 函数名:setPlayerAbilities
// 功能:设置玩家能力表
// 参数个数:2个
// 参数类型:字符串,字符串
// 参数详解:uuid - 在线玩家的uuid字符串,newAbilities - 新能力json数据字符串
// 返回值:是否设置成功
// (备注:该函数可能不会变更客户端实际显示能力)
[例]
let r = setPlayerAbilities(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9',
'{"opencontainers": false}')
(27)getPlayerAttributes
// 函数名:getPlayerAttributes
// 功能:获取玩家属性表
// 参数个数:1个
// 参数类型:字符串
// 参数详解:uuid - 在线玩家的uuid字符串
// 返回值:属性json字符串
[例]
let t = getPlayerAttributes(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9')
(注:总计14种生物属性,含部分有效玩家属性)
(28)setPlayerAttributes
// 函数名:setPlayerAttributes
// 功能:设置玩家属性表
// 参数个数:2个
// 参数类型:字符串,字符串
// 参数详解:uuid - 在线玩家的uuid字符串,newAttributes - 新属性json数据字符串
// 返回值:是否设置成功
// (备注:该函数可能不会变更客户端实际显示值;该函数可能导致玩家死后重生不会恢复初始属性)
[例]
let r = setPlayerAttributes(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9',
'{"attack_damage": 9999}')
(注:方法功能不推荐)
(29)setPlayerTempAttributes
// 函数名:setPlayerTempAttributes
// 功能:设置玩家属性临时值表
// 参数个数:2个
// 参数类型:字符串,字符串
// 参数详解:uuid - 在线玩家的uuid字符串,newTempAttributes - 新属性临时值json数据字符串
// 返回值:是否设置成功
// (备注:该函数可能不会变更客户端实际显示值)
[例]
let r = setPlayerTempAttributes(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9',
'{"hunger": 10}')
(30)getPlayerMaxAttributes
// 函数名:getPlayerMaxAttributes
// 功能:获取玩家属性上限值表
// 参数个数:1个
// 参数类型:字符串
// 参数详解:uuid - 在线玩家的uuid字符串
// 返回值:属性上限值json字符串
[例]
let m = getPlayerMaxAttributes(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9')
(31)setPlayerMaxAttributes
// 函数名:setPlayerMaxAttributes
// 功能:设置玩家属性上限值表
// 参数个数:2个
// 参数类型:字符串,字符串
// 参数详解:uuid - 在线玩家的uuid字符串,newMaxAttributes - 新属性上限值json数据字符串
// 返回值:是否设置成功
// (备注:该函数可能不会变更客户端实际显示值)
[例]
let r = setPlayerMaxAttributes(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9',
'{"maxhealth": 200}')
(32)getPlayerItems
// 函数名:getPlayerItems
// 功能:获取玩家所有物品列表
// 参数个数:1个
// 参数类型:字符串
// 参数详解:uuid - 在线玩家的uuid字符串
// 返回值:物品列表json字符串
[例]
let t = getPlayerItems(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9')
(注:玩家物品包括末影箱、装备、副手和背包四项物品的nbt描述型数据列表。nbt被序列化数据类型的tag所描述,总计12种有效tag,所对应值可序列化为json数据,亦可反序列化为nbt)
(33)getPlayerSelectedItem
// 函数名:getPlayerSelectedItem
// 功能:获取玩家当前选中项信息
// 参数个数:1个
// 参数类型:字符串
// 参数详解:uuid - 在线玩家的uuid字符串
// 返回值:当前选中项信息json字符串
[例]
let i = getPlayerSelectedItem(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9')
(注:选中项包含选中框所处位置,以及选中物品的nbt描述型数据)
(34)setPlayerItems
// 函数名:setPlayerItems
// 功能:设置玩家所有物品列表
// 参数个数:2个
// 参数类型:字符串,字符串
// 参数详解:uuid - 在线玩家的uuid字符串,newItems - 新物品列表json数据字符串
// 返回值:是否设置成功
// (备注:特定条件下可能不会变更游戏内实际物品)
[例]
let r = setPlayerItems(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9',
'{"Offhand":{"tt":9,"tv":[{"tt":10,"tv":[{"ck":"Count","cv":{"tt":1,"tv":1}},{"ck":"Damage","cv":{"tt":2,"tv":0}},{"ck":"Name","cv":{"tt":8,"tv":"minecraft:trident"}},{"ck":"tag","cv":{"tt":10,"tv":[{"ck":"ench","cv":{"tt":9,"tv":[{"tt":10,"tv":[{"ck":"id","cv":{"tt":2,"tv":7}},{"ck":"lvl","cv":{"tt":2,"tv":8888}}]}]}}]}}]}]}}')
(35)addPlayerItemEx
// 函数名:addPlayerItemEx
// 功能:增加玩家一个物品
// 参数个数:2个
// 参数类型:字符串,字符串
// 参数详解:uuid - 在线玩家的uuid字符串,item - 物品json数据字符串
// 返回值:是否添加成功
// (备注:特定条件下可能不会变更游戏内实际物品)
[例]
let r = setPlayerItems(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9',
'{"tt":10,"tv":[{"ck":"Count","cv":{"tt":1,"tv":1}},{"ck":"Damage","cv":{"tt":2,"tv":0}},{"ck":"Name","cv":{"tt":8,"tv":"minecraft:trident"}},{"ck":"tag","cv":{"tt":10,"tv":[{"ck":"ench","cv":{"tt":9,"tv":[{"tt":10,"tv":[{"ck":"id","cv":{"tt":2,"tv":10}},{"ck":"lvl","cv":{"tt":2,"tv":9999}}]}]}}]}}]}')
(36)addPlayerItem
// 函数名:addPlayerItem
// 功能:增加玩家一个物品
// 参数个数:4个
// 参数类型:字符串
// 参数详解:uuid - 在线玩家的uuid字符串,id - 物品id值,aux - 物品特殊值,count - 数量
// 返回值:是否增加成功
// (备注:特定条件下可能不会变更游戏内实际物品)
[例]
let r = addPlayerItem(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9', 9, 0, 32)
(37)getPlayerEffects
// 函数名:getPlayerEffects
// 功能:获取玩家所有效果列表
// 参数个数:1个
// 参数类型:字符串
// 参数详解:uuid - 在线玩家的uuid字符串
// 返回值:效果列表json字符串
[例]
let e = getPlayerEffects(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9')
(注:效果为nbt描述型数据)
(38)setPlayerEffects
// 函数名:setPlayerEffects
// 功能:设置玩家所有效果列表
// 参数个数:2个
// 参数类型:字符串,字符串
// 参数详解:uuid - 在线玩家的uuid字符串,newEffects - 新效果列表json数据字符串
// 返回值:是否设置成功
[例]
let r = setPlayerEffects(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9',
'{"tt":9,"tv":[{"tt":10,"tv":[{"ck":"Ambient","cv":{"tt":1,"tv":0}},{"ck":"Amplifier","cv":{"tt":1,"tv":0}},{"ck":"DisplayOnScreenTextureAnimation","cv":{"tt":1,"tv":0}},{"ck":"Duration","cv":{"tt":3,"tv":3461}},{"ck":"DurationEasy","cv":{"tt":3,"tv":3461}},{"ck":"DurationHard","cv":{"tt":3,"tv":3461}},{"ck":"DurationNormal","cv":{"tt":3,"tv":3461}},{"ck":"Id","cv":{"tt":1,"tv":16}},{"ck":"ShowParticles","cv":{"tt":1,"tv":1}}]}]}')
(39)setPlayerBossBar
// 函数名:setPlayerBossBar
// 功能:设置玩家自定义血条
// 参数个数:3个
// 参数类型:字符串,字符串,浮点型
// 参数详解:uuid - 在线玩家的uuid字符串,title - 血条标题,percent - 血条百分比
// 返回值:是否设置成功
[例]
let r = setPlayerBossBar(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9',
'欢迎来到梦之故里', 1.00)
(40)removePlayerBossBar
// 函数名:removePlayerBossBar
// 功能:清除玩家自定义血条
// 参数个数:1个
// 参数类型:字符串
// 参数详解:uuid - 在线玩家的uuid字符串
// 返回值:是否清除成功
[例]
let r = removePlayerBossBar(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9')
(41)selectPlayer
// 函数名:selectPlayer
// 功能:查询在线玩家基本信息
// 参数个数:1个
// 参数类型:字符串
// 参数详解:uuid - 在线玩家的uuid字符串
// 返回值:玩家基本信息json字符串
[例]
let e = selectPlayer(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9')
(42)transferserver
// 函数名:transferserver
// 功能:传送玩家至指定服务器
// 参数个数:3个
// 参数类型:字符串,字符串,整型
// 参数详解:uuid - 在线玩家的uuid字符串,addr - 待传服务器,port - 端口
// 返回值:是否传送成功
[例]
let t = transferserver(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9',
'www.xiafox.com', 19132)
(43)teleport
// 函数名:teleport
// 功能:传送玩家至指定坐标和维度
// 参数个数:5个
// 参数类型:字符串,浮点型,浮点型,浮点型,整型
// 参数详解:uuid - 在线玩家的uuid字符串,X - x,Y - y,Z - z,dimensionid - 维度ID
// 返回值:是否传送成功
[例]
let t = teleport(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9', 10, 99, 10, 2)
(44)talkAs
// 函数名:talkAs
// 功能:模拟玩家发送一个文本
// 参数个数:2个
// 参数类型:字符串,字符串
// 参数详解:uuid - 在线玩家的uuid字符串,msg - 待模拟发送的文本
// 返回值:是否发送成功
[例]
let t = talkAs(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9',
'你好 js')
(45)runcmdAs
// 函数名:runcmdAs
// 功能:模拟玩家执行一个指令
// 参数个数:2个
// 参数类型:字符串,字符串
// 参数详解:uuid - 在线玩家的uuid字符串,cmd - 待模拟执行的指令
// 返回值:是否发送成功
[例]
let t = runcmdAs(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9',
'/me 你好 js')
(46)sendSimpleForm
// 函数名:sendSimpleForm
// 功能:向指定的玩家发送一个简单表单
// 参数个数:4个
// 参数类型:字符串,字符串,字符串,字符串
// 参数详解:uuid - 在线玩家的uuid字符串,title - 表单标题,content - 内容,buttons - 按钮文本数组字符串
// 返回值:创建的表单id,为 0 表示发送失败
[例]
let fid = sendSimpleForm(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9',
'致命选项',
'请选择:',
'["生存","死亡","求助"]')
(47)sendModalForm
// 函数名:sendModalForm
// 功能:向指定的玩家发送一个模式对话框
// 参数个数:5个
// 参数类型:字符串,字符串,字符串,字符串,字符串
// 参数详解:uuid - 在线玩家的uuid字符串,title - 表单标题,content - 内容,button1 按钮1标题(点击该按钮selected为true),button2 按钮2标题(点击该按钮selected为false)
// 返回值:创建的表单id,为 0 表示发送失败
[例]
let fid = sendModalForm(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9',
'没有第三个选项',
'请选择:',
'生存',
'死亡')
(48)sendCustomForm
// 函数名:sendCustomForm
// 功能:向指定的玩家发送一个自定义表单
// 参数个数:2个
// 参数类型:字符串,字符串
// 参数详解:uuid - 在线玩家的uuid字符串,json - 自定义表单的json字符串(要使用自定义表单类型,参考nk、pm格式或minebbs专栏)
// 返回值:创建的表单id,为 0 表示发送失败
[例]
let fid = sendCustomForm(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9',
'{"content":[{"type":"label","text":"这是一个文本标签"},{"placeholder":"水印文本","default":"","type":"input","text":""},{"default":true,"type":"toggle","text":"开关~或许是吧"},{"min":0.0,"max":10.0,"step":2.0,"default":3.0,"type":"slider","text":"游标滑块!?"},{"default":1,"steps":["Step 1","Step 2","Step 3"],"type":"step_slider","text":"矩阵滑块?!"},{"default":1,"options":["Option 1","Option 2","Option 3"],"type":"dropdown","text":"如你所见,下拉框"}], "type":"custom_form","title":"这是一个自定义窗体"}')
(49)releaseForm
// 函数名:releaseForm
// 功能:放弃一个表单
// 参数个数:1个
// 参数类型:整型
// 参数详解:formid - 表单id
// 返回值:是否释放成功
//(备注:已被接收到的表单会被自动释放)
[例]
let r = releaseForm(1000)
(50)setPlayerSidebar
// 函数名:setPlayerSidebar
// 功能:设置玩家自定义侧边栏临时计分板
// 参数个数:3个
// 参数类型:字符串,字符串,字符串
// 参数详解:uuid - 在线玩家的uuid字符串,title - 侧边栏标题,list - 列表字符串数组
// 返回值:是否设置成功
// (注:列表总是从第1行开始,总计不超过15行)
[例]
let r = setPlayerSidebar(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9',
'自定义侧边栏',
'["第一行", "第二行", "我在哪行? "]')
(51)removePlayerSidebar
// 函数名:removePlayerSidebar
// 功能:清除玩家自定义侧边栏
// 参数个数:1个
// 参数类型:字符串
// 参数详解:uuid - 在线玩家的uuid字符串
// 返回值:是否清除成功
[例]
let r = removePlayerSidebar(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9')
(52)getPlayerPermissionAndGametype
// 函数名:getPlayerPermissionAndGametype
// 功能:获取玩家权限与游戏模式
// 参数个数:1个
// 参数类型:字符串
// 参数详解:uuid - 在线玩家的uuid字符串
// 返回值:权限与模式的json字符串
[例]
let t = getPlayerPermissionAndGametype(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9')
(注:OP命令等级包含6个有效等级[op-permission-level],权限包含3种有效权限[permissions.json],游戏模式包含5种有效模式[gamemode])
(53)setPlayerPermissionAndGametype
// 函数名:setPlayerPermissionAndGametype
// 功能:设置玩家权限与游戏模式
// 参数个数:2个
// 参数类型:字符串,字符串
// 参数详解:uuid - 在线玩家的uuid字符串,newModes - 新权限或模式json数据字符串
// 返回值:是否设置成功
// (备注:特定条件下可能不会变更游戏内实际能力)
[例]
let r = setPlayerPermissionAndGametype(
'8f976e22-78bc-3fe1-8ee5-cf5ff56347b9',
'{"gametype" : 3}')
本JS插件运行平台采用事件驱动机制与游戏进行内容交互。注册监听关键字,通过特定事件被触发后的回传结果,进行判断、执行额外指令来实现插件功能。
[例] setBeforeActListener(key,
function (e) { })
key - 关键字
"onUseItem" - 使用物品回调
e - 回传数据
playername - 玩家名字
dimension - 玩家所在维度
dimensionid - 玩家所在维度ID
isstand - 玩家是否立足于方块/悬空
XYZ - 玩家所处位置
position - 操作方块所在位置
itemid - 物品ID
itemaux - 物品特殊值
itemname - 物品名称
result - 原事件操作是否成功(仅限After事件)
其中,对于注册Before事件的函数返回值(true/false)决定了是否拦截该事件(非全部)。其它关键字类推。
(1)"onServerCmd" - 后台指令监听
拦截可否:是
回传数据:
cmd – 指令数据
(2)"onServerCmdOutput" - 后台指令输出信息监听
拦截可否:是
回传数据:
output – 输出信息
(3)"onFormSelect" - 玩家选择GUI表单监听
拦截可否:是
回传数据:
uuid – 玩家uuid信息
formid – 表单ID
selected – 表单回传的选择项信息
playername – 玩家名字
dimensionid – 玩家所在维度ID
dimension – 玩家所在维度
isstand – 玩家是否立足于方块/悬空
XYZ – 玩家所处位置
(4)"onUseItem" - 使用物品监听
拦截可否:是
回传数据:
position – 操作方块所在位置
itemid – 物品ID
itemaux – 物品特殊值
itemname – 物品名称
playername – 玩家名字
dimensionid – 玩家所在维度ID
dimension – 玩家所在维度
isstand – 玩家是否立足于方块/悬空
XYZ – 玩家所处位置
(注:使用物品事件可在单次点击内触发多次,需自行处理事件合并)
(5)"onPlacedBlock" - 放置方块监听
拦截可否:是
回传数据:
position – 操作方块所在位置
blockid – 方块ID
blockname – 方块名称
playername – 玩家名字
dimensionid – 玩家所在维度ID
dimension – 玩家所在维度
isstand – 玩家是否立足于方块/悬空
XYZ – 玩家所处位置
(6)"onDestroyBlock" - 破坏方块监听
拦截可否:是
回传数据:
position – 操作方块所在位置
blockid – 方块ID
blockname – 方块名称
playername – 玩家名字
dimensionid – 玩家所在维度ID
dimension – 玩家所在维度
isstand – 玩家是否立足于方块/悬空
XYZ – 玩家所处位置
(7)"onStartOpenChest" - 开箱监听
拦截可否:是
回传数据:
position – 操作方块所在位置
playername – 玩家名字
dimensionid – 玩家所在维度ID
dimension – 玩家所在维度
isstand – 玩家是否立足于方块/悬空
XYZ – 玩家所处位置
(8)"onStartOpenBarrel" - 开桶监听
拦截可否:否
回传数据:
position – 操作方块所在位置
playername – 玩家名字
dimensionid – 玩家所在维度ID
dimension – 玩家所在维度
isstand – 玩家是否立足于方块/悬空
XYZ – 玩家所处位置
(9)"onStopOpenChest" - 关箱监听
拦截可否:否
回传数据:
position – 操作方块所在位置
playername – 玩家名字
dimensionid – 玩家所在维度ID
dimension – 玩家所在维度
isstand – 玩家是否立足于方块/悬空
XYZ – 玩家所处位置
(10)"onStopOpenBarrel" - 关桶监听
拦截可否:否
回传数据:
position – 操作方块所在位置
playername – 玩家名字
dimensionid – 玩家所在维度ID
dimension – 玩家所在维度
isstand – 玩家是否立足于方块/悬空
XYZ – 玩家所处位置
(11)"onSetSlot" - 放入取出物品监听
拦截可否:否
回传数据:
itemid – 物品ID
itemcount – 物品数量
itemname – 物品名字
itemaux – 物品特殊值
position – 操作方块所在位置
blockid – 方块ID
blockname – 方块名称
slot – 操作格子位置
playername – 玩家名字
dimensionid – 玩家所在维度ID
dimension – 玩家所在维度
isstand – 玩家是否立足于方块/悬空
XYZ – 玩家所处位置
(12)"onChangeDimension" - 切换维度监听
拦截可否:否
回传数据:
position – 玩家所处位置
playername – 玩家名字
dimensionid – 玩家所在维度ID
dimension – 玩家所在维度
isstand – 玩家是否立足于方块/悬空
XYZ – 玩家所处位置
(13)"onMobDie" - 生物死亡监听
拦截可否:否
回传数据:
mobname – 生物名称
dimensionid – 生物所处维度ID
XYZ – 生物所在位置
mobtype – 生物类型
srcname – 伤害源名称
srctype – 伤害源类型
dmcase – 伤害具体原因ID
playername – 玩家名字(若为玩家死亡,附加此信息)
dimension – 玩家所在维度(附加信息)
isstand – 玩家是否立足于方块/悬空(附加信息)
(14)"onMobHurt" - 生物受伤监听
拦截可否:是
回传数据:
health – 生物血量
dmtype – 生物受伤类型
dmcount – 生物受伤具体值
mobname – 生物名称
dimensionid – 生物所处维度ID
XYZ – 生物所在位置
mobtype – 生物类型
srcname – 伤害源名称
srctype – 伤害源类型
dmcase – 伤害具体原因ID
playername – 玩家名字(若为玩家受伤,附加此信息)
dimension – 玩家所在维度(附加信息)
isstand – 玩家是否立足于方块/悬空(附加信息)
(15)"onRespawn" - 玩家重生监听
拦截可否:否
回传数据:
playername – 玩家名字
dimensionid – 玩家所在维度ID
dimension – 玩家所在维度
isstand – 玩家是否立足于方块/悬空
XYZ – 玩家所处位置
(16)"onChat" - 聊天监听
拦截可否:否
回传数据:
playername – 发言人名字(可能为服务器或命令方块发言)
target – 接收者名字
msg – 接收到的信息
chatstyle – 聊天类型
(17)"onInputText" - 玩家输入文本监听
拦截可否:是
回传数据:
msg – 输入的文本
playername – 玩家名字
dimensionid – 玩家所在维度ID
dimension – 玩家所在维度
isstand – 玩家是否立足于方块/悬空
XYZ – 玩家所处位置
(18)"onCommandBlockUpdate" - 玩家更新命令方块监听
拦截可否:是
回传数据:
position – 命令方块所在位置
cmd – 将被更新的新指令
isblock – 是否是方块
actortype – 实体类型(若被更新的是非方块,附加此信息)
playername – 玩家名字
dimensionid – 玩家所在维度ID
dimension – 玩家所在维度
isstand – 玩家是否立足于方块/悬空
XYZ – 玩家所处位置
(19)"onInputCommand" - 玩家输入指令监听
拦截可否:是
回传数据:
cmd – 玩家输入的指令
playername – 玩家名字
dimensionid – 玩家所在维度ID
dimension – 玩家所在维度
isstand – 玩家是否立足于方块/悬空
XYZ – 玩家所处位置
(20)"onBlockCmd" - 命令方块(矿车)执行指令监听
拦截可否:是
回传数据:
cmd – 将被执行的指令
tickdelay – 命令设定的间隔时间
type – 执行者类型
name – 执行者自定义名称
position – 执行者所在位置
(21)"onNpcCmd" - NPC执行指令监听
拦截可否:是
回传数据:
position – NPC所在位置
entity – NPC实体标识名
entityid – NPC实体标识ID
npcname – NPC名字
dimensionid – NPC所处维度ID
dimension – NPC所处维度
actionid – 选择项
actions – 指令列表
(22)"onLoadName" - 加载名字监听
拦截可否:否
回传数据:
playername – 玩家名字
uuid – 玩家uuid字符串
xuid – 玩家xuid字符串
ability – 玩家能力值列表
(23)"onPlayerLeft" - 离开游戏监听
拦截可否:是
回传数据:
playername – 玩家名字
uuid – 玩家uuid字符串
xuid – 玩家xuid字符串
ability – 玩家能力值列表
(24)"onMove" - 移动监听
拦截可否:否
回传数据:
position – 玩家所处位置
playername – 玩家名字
dimensionid – 玩家所在维度ID
dimension – 玩家所在维度
isstand – 玩家是否立足于方块/悬空
XYZ – 玩家所处位置
(25)"onAttack" - 攻击监听
拦截可否:是
回传数据:
actorname – 被攻击实体名称
actortype – 被攻击实体类型
position – 玩家所处位置
playername – 玩家名字
dimensionid – 玩家所在维度ID
dimension – 玩家所在维度
isstand – 玩家是否立足于方块/悬空
XYZ – 玩家所处位置
(26)"onLevelExplode" - 爆炸监听
拦截可否:是
回传数据:
position – 爆炸点所在位置
entity – 爆炸者实体标识名
entityid – 爆炸者实体标识ID
dimensionid – 爆炸者所处维度ID
dimension – 爆炸者所处维度
explodepower – 爆炸强度
JSRunner自带种子隐藏。可通过修改server.properties配置文件中level-seed选项为自定义整数数值达到隐藏种子效果。不设值则恢复默认。
Powered by 梦之故里, All Rights Reserved.
2020-2023