索引

前言

目录

帮助文档
一、说明
二、API接口定义
 1.通用数据处理及网络功能
 2.MC核心玩法相关功能
 3.MC玩家互动相关功能
三、注册机制
 1.注册范例
 2.所有事件
四、杂项

前言

  如何在事件触发时使用指令?如何实现外部命令方块?如何多服互动?最初只是一个简单的内部服务器需求,最终衍生出来的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 对象参考手册》章节。

二、API接口定义

1.通用数据处理及网络功能

(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)

2.MC核心玩法相关功能

(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种有效旋转类型)

3.MC玩家互动相关功能

(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插件运行平台采用事件驱动机制与游戏进行内容交互。注册监听关键字,通过特定事件被触发后的回传结果,进行判断、执行额外指令来实现插件功能。

1.注册范例

[例] setBeforeActListener(key, function (e) { })

key - 关键字
 "onUseItem" - 使用物品回调
e - 回传数据
 playername - 玩家名字
 dimension - 玩家所在维度
 dimensionid - 玩家所在维度ID
 isstand - 玩家是否立足于方块/悬空
 XYZ - 玩家所处位置
 position - 操作方块所在位置
 itemid - 物品ID
 itemaux - 物品特殊值
 itemname - 物品名称
 result - 原事件操作是否成功(仅限After事件)

其中,对于注册Before事件的函数返回值(true/false)决定了是否拦截该事件(非全部)。其它关键字类推。

2.所有事件

(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