Minecraft TrMenu 菜单插件的JS动作高级用法
目录
- 导读
- 关于 TrMenu
- JavaScript 脚本动作
- 高级用法
- 类的引入与实例化
- 待更新…
导读
本文主要是对 TrMenu 插件高级脚本动作(JavaScript Action)的用法详解
主要使用 TrMenu v1.21 版本作为演示
文章内容仅为个人研究心得,若有缺漏,欢迎指正
关于 TrMenu
TrMenu 是一款发布于 Oct 4th, 2019 的 Bukkit 高级菜单系统
相比市面上同类菜单插件,拥有丰富功能的同时,还具有强大高效的特点,广受国内外大量用户好评
当前已基于 Kotlin 大量改善和完全重写,使用超强 Bukkit-API 拓展 TabooLib5
转自 https://temp-17.gitbook.io/trmenu/v/chinese/
TrMenu 是我认为最强大的菜单插件,它能做到的功能非常多,不仅仅限于做菜单,商店等。灵活运用其 JavaScript 脚本动作能够实现很多不可思议的功能。
JavaScript 脚本动作
JavaScript 脚本动作可谓是 TrMenu 里比较出色的一点,通过使用脚本动作,我们可以实现一些高级功能来将这款插件的用处发挥到极致。官方文档也给出了相当不错的使用范例。
随机传送(Random Teleport) :
- |-js:function randomTeleport() { // 定义一个 randomTeleport() 函数var x = TrUtils.randomInteger(0,2500); // 随机获取0~2500之间的数字var z = TrUtils.randomInteger(0,2500);var randomLoc = TrUtils.createLocation(player.getWorld(), x, z); // 生成随机坐标player.teleport(randomLoc); // 将玩家传送至该坐标player.sendTitle("&3&lRandom teleporting...", "&6X: &3" + x + "&8; &6Z: &3" + z, 20, 60, 20); // 向玩家发送一个 Title 内容}randomTeleport(); // 调用 randomTeleport() 函数
转译自官方文档:https://trmenu.trixey.cn/v/chinese/requirement-and-javascript/javascript
由这个范例可见,其 JavaScript 脚本动作的强大之处,但其能实现的功能远不止于此。
仔细看上面的随机传送范例的中间两行:
player.teleport(...); // 将玩家传送至该坐标player.sendTitle(...); // 向玩家发送一个 Title 内容
如果有学习过 Minecraft Bukkit 插件编写的读者应该很快就能看出来,上面这两行内容其实就是在调用 org.bukkit.entity.Player 类里面的 teleport(…) 和 sendTitle(…) 方法。而前面的 player 则是执行这个 JavaScript 动作的玩家对象。
通过查阅官方文档我们可以得知,在 JavaScript 脚本动作里能使用的对象有如下:
- player(玩家对象 org.bukkit.entity.Player)
- bukkitServer = Bukkit.getServer() (服务器对象 org.bukkit.Server)
- clickEvent (容器点击事件 org.bukkit.event.inventory.InventoryClickEvent)
- clickType (点击类型 org.bukkit.event.inventory.ClickType)
- clickItemStack (点击的物品 org.bukkit.inventory.ItemStack)
转自官方文档:https://trmenu.trixey.cn/v/chinese/actions/functional-actions/javascript
有了相应的对象实例,结合 Bukkit 文档,我们就可以通过调用对象的方法来实现各种功能,例如:
- |-js:player.getInventory().clear(); // 将玩家背包清空player.setHealth(10.0); // 设置玩家血量player.damage(3.0); // 向玩家造成 3.0 HP伤害......
由于player对象还有很多方法,这里我就不一一列举了,感兴趣的读者可以前往 Bukkit开发文档 查阅更多内容。
高级用法
现在我们来思考一个问题:
如何使用 JavaScript 脚本动作来给予玩家 10秒的缓慢2级 药水效果呢?
通过翻看 Bukkit 文档,我们可以找到给予生物药水效果的方法:
addPotionEffect(PotionEffect effect)
向生物实体添加指定的PotionEffect(药水效果)。
http://docs.zoyn.top/bukkitapi/1.12.2/index.html?org/bukkit/entity/LivingEntity.html
这个方法要求传入的参数是一个 PotionEffect 对象,但官方给出的 5 个对象里并没有 PotionEffect 的实例对象,那该怎么办呢?
看到这里有的读者就会发现,尽管官方给出的可直接操作的对象有 5 个,但是远远不够用。因此我们不能只限于这 5 个对象的操作,我们应该想办法获得更多的可操作对象来实现更多的功能。
类的引入与实例化
目前,官方给出的可直接调用的类仅有 TrUtils 工具类,这是一个官方给定的类,在 JS 里可以直接调用其内部的静态方法。例如上面提到的的 随机传送 范例其中两行
...var x = TrUtils.randomInteger(0,2500); // 随机获取0~2500之间的数字var z = TrUtils.randomInteger(0,2500); ...
通过调用 TrUtils 里的 randomInteger(…) 方法来获取随机数字。
那么,除了官方给定的 TrUtils 类以外,我们能不能调用其他的类呢?例如前面提到的 PotionEffect 类?
答案是:当然可以!而且只需要将类的包名完整填入即可!
例如:PotionEffect 类的包名为 org.bukkit.potion,那么我们就可以这样写
- |-js:org.bukkit.potion.PotionEffect.xxx(...); // 引入 PotionEffect 并调用其 xxx(...) 静态方法
当然我们引入 PotionEffect 可不是为了调用静态方法的,我们的目标是实例化一个 PotionEffect 对象来传入 addPotionEffect(PotionEffect effect) 方法中。现在让我们来实例化一个 PotionEffect 对象。
根据 Bukkit 文档 得知,实例化一个 PotionEffect 类需要调用它的构造方法:
PotionEffect(PotionEffectType type, int duration, int amplifier)
创造一个药水效果
http://docs.zoyn.top/bukkitapi/1.12.2/index.html?org/bukkit/potion/PotionEffect.html
而其第一个参数 type 是 PotionEffectType 枚举类型,其包名为 org.bukkit.potion,用来控制药水效果的类型,这里我们用 PotionEffectType.SLOW 来表示 缓慢效果。
第二个参数 duration 是 int 整数类型,用来控制药水持续时长,单位是Tick(1秒=20 Tick),因此这里我们输入 200 来表示 10秒。
第三个参数 amplifier 同样也是 int 整数类型,用来控制药水效果的等级,不过这里需要注意的是,0代表1级药水效果,1代表2级的药水效果,以此类推。因此,这里我们输入1来表示2级的药水效果
因此我们可以这样来实例化 PotionEffect 类:
- |-js:var type = org.bukkit.potion.PotionEffectType.SLOW; // 引入 PotionEffectType 缓慢效果var duration = 200; // 10秒药水时长var amplifier = 1; // 2级药水效果var effect = new org.bukkit.potion.PotionEffect(type, duration, amplifier); // 实例化 PotionEffect
实例化 PotionEffect 之后,我们就获得了一个叫 effect 的对象,接着我们将它传入上面提到的 addPotionEffect(PotionEffect effect) 方法
player.addPotionEffect(effect);
这样玩家就会获得一个 10秒缓慢2级 的药水效果了。
完整代码:menu.yml
Title: '测试菜单'
Layout:- 'A'
Buttons:'A':display:mats: 'GRASS'name: '10秒缓慢2级药水效果'actions:all:- |-js:var type = org.bukkit.potion.PotionEffectType.SLOW;var duration = 200;var amplifier = 1;var effect = new org.bukkit.potion.PotionEffect(type, duration, amplifier);player.addPotionEffect(effect);
待更新…
Minecraft TrMenu 菜单插件的JS动作高级用法相关推荐
- Minecraft TrMenu 菜单插件 研究心得
目录 导读 链接 函数 材质参数化 全局变量操作 待更新- 导读 本文主要是对 TrMenu 插件部分用法解释 为了方便我个人查阅 啊哈哈哈 主要使用 TrMenu v3 版本作为演示 文章内容仅为个 ...
- jQuery弹性展开收缩菜单插件gooey.js
分享一款基于jQuery弹性展开收缩菜单插件gooey.js.这是一款基于gooey.js插件实现的弹性菜单特效代码.效果图如下: 在线预览 源码下载 实现的代码. html代码: <hea ...
- 多级手风琴下拉菜单插件metisMenu.js
下载地址 metisMenu.js是一个纯JavaScript导航菜单插件,可以帮助你创建响应式,动画,手风琴/下拉菜单导航.主要特色光滑的折叠/展开动画.启用AJAX.兼容的桌面和移动.事件处理程序 ...
- 基于jQuery弹性展开收缩菜单插件gooey.js
首先 引入css <link rel="stylesheet" href="css/bootstrap.min.css"> <link rel ...
- (0085)iOS开发之OC与JS交互高级用法(JavaScriptCore)
前述:JavaScriptCore你不知道的OC与JS之间交互.OC与JS之间用model实现交互.通讯.传值!好玩! 几乎三年来一直断断续续接触OC与JS交互,每次觉得UIWebView OC与JS ...
- 多级联动下拉菜单插件:jquery.cxselect.js
话说这个插件,我也用了挺久了,但一直对其具体的作用不是很懂,只知道可以利用 ajax来请求数据,实现类似于多级联动的效果.后来百度了下,在此做个总结吧. 下面是以一名php程序员的角度来分析的...可 ...
- 我的世界服务器虚拟菜单插件,[综合|娱乐|管理][比赛]VirtualMenu——支持多种类型GUI的虚拟菜单[1.7.10~1.14]...
您尚未登录,立即登录享受更好的浏览体验! 您需要 登录 才可以下载或查看,没有帐号?注册(register) x 本帖最后由 ColorsWind 于 2020-4-4 11:27 编辑 写在前面 v ...
- 【jQuery】smartMenu右键自定义上下文菜单插件(似web QQ)
DEMO: http://sources.ikeepstudying.com/menu-mail-qq/ 一.这是什么样的一个插件 我们都知道,默认状态下,我们右键web页面,会出现一个上下文菜单,例 ...
- html5 menu下拉,jquery下拉菜单插件SelectMenu
SelectMenu.js是一款简洁.易用.多样的jquery下拉菜单插件.SelectMenu下拉菜单插件功能强大,支持下拉,分页,键盘操作等功能.它的特点还有: 基于 jQuery1.x 开发, ...
最新文章
- 程序员哀叹:专科都是ji's万的年薪,互联网的泡沫要破了
- L1-003. 个位数统计
- macOS解决sublime text3运行python3报:UnicodeEncodeError: 'ascii' codec can't encode characters in position
- 如何构建银行数据仓库
- java继承对象转换_java中类与对象的继承重写,存储以及自动转换和强制转换。...
- 双双拿下赛道全部指标最佳 | 腾讯新一代VAV1携手V265亮相MSU编码器大赛
- iOS微博项目(七)发微博和定位
- 华为服务器型号2285,华为服务器2285磁盘阵列设置
- 小雪节气艺术字体设计PNG素材 | 希望可以温暖到你了
- Shiro【授权过滤器、与ehcache整合、验证码、记住我】
- Kali linux 全部版本镜像下载
- android测试基站,Android iPhone 手机查看基站信息
- 2010 年全国大学生数学建模竞赛甘肃赛区 获奖情况
- 达梦数据库服务未知状态解决历程
- 永磁同步电机驱动器保护算法专题
- Hadoop 学习笔记(三)常用命令
- 赠书 | 劲爆!5本书籍大礼包免费送,一网打尽脑科学
- PLC应用关于自动化控制中离散PID模型的理论分析
- 云服务器是怎么虚拟的,云服务器怎么虚拟化
- MAC MacVim及Vundle安装
热门文章
- 基于JS的金铲铲工资结算系统的设计与开发
- CAD教程:CAD软件中CAD标注设置技巧
- 如何在Schlage Connect Smart Lock上启用警报
- jquery实现nav的下拉
- switch hosts的使用
- .strip().split('t')和.strip().split()
- 2060显卡驱动最新版本_A卡继续战未来?AMD最新显卡驱动测试
- 【考前看几题】系统集成项目管理师-2018年上半年-上午真题
- php+控制器中的全局变量,php中的全局变量引用
- 我的周刊(第024期)