目录

  • 导读
  • 关于 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动作高级用法相关推荐

  1. Minecraft TrMenu 菜单插件 研究心得

    目录 导读 链接 函数 材质参数化 全局变量操作 待更新- 导读 本文主要是对 TrMenu 插件部分用法解释 为了方便我个人查阅 啊哈哈哈 主要使用 TrMenu v3 版本作为演示 文章内容仅为个 ...

  2. jQuery弹性展开收缩菜单插件gooey.js

    分享一款基于jQuery弹性展开收缩菜单插件gooey.js.这是一款基于gooey.js插件实现的弹性菜单特效代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <hea ...

  3. 多级手风琴下拉菜单插件metisMenu.js

    下载地址 metisMenu.js是一个纯JavaScript导航菜单插件,可以帮助你创建响应式,动画,手风琴/下拉菜单导航.主要特色光滑的折叠/展开动画.启用AJAX.兼容的桌面和移动.事件处理程序 ...

  4. 基于jQuery弹性展开收缩菜单插件gooey.js

    首先 引入css <link rel="stylesheet" href="css/bootstrap.min.css"> <link rel ...

  5. (0085)iOS开发之OC与JS交互高级用法(JavaScriptCore)

    前述:JavaScriptCore你不知道的OC与JS之间交互.OC与JS之间用model实现交互.通讯.传值!好玩! 几乎三年来一直断断续续接触OC与JS交互,每次觉得UIWebView OC与JS ...

  6. 多级联动下拉菜单插件:jquery.cxselect.js

    话说这个插件,我也用了挺久了,但一直对其具体的作用不是很懂,只知道可以利用 ajax来请求数据,实现类似于多级联动的效果.后来百度了下,在此做个总结吧. 下面是以一名php程序员的角度来分析的...可 ...

  7. 我的世界服务器虚拟菜单插件,[综合|娱乐|管理][比赛]VirtualMenu——支持多种类型GUI的虚拟菜单[1.7.10~1.14]...

    您尚未登录,立即登录享受更好的浏览体验! 您需要 登录 才可以下载或查看,没有帐号?注册(register) x 本帖最后由 ColorsWind 于 2020-4-4 11:27 编辑 写在前面 v ...

  8. 【jQuery】smartMenu右键自定义上下文菜单插件(似web QQ)

    DEMO: http://sources.ikeepstudying.com/menu-mail-qq/ 一.这是什么样的一个插件 我们都知道,默认状态下,我们右键web页面,会出现一个上下文菜单,例 ...

  9. html5 menu下拉,jquery下拉菜单插件SelectMenu

    SelectMenu.js是一款简洁.易用.多样的jquery下拉菜单插件.SelectMenu下拉菜单插件功能强大,支持下拉,分页,键盘操作等功能.它的特点还有: 基于 jQuery1.x 开发, ...

最新文章

  1. 程序员哀叹:专科都是ji's万的年薪,互联网的泡沫要破了
  2. L1-003. 个位数统计
  3. macOS解决sublime text3运行python3报:UnicodeEncodeError: 'ascii' codec can't encode characters in position
  4. 如何构建银行数据仓库
  5. java继承对象转换_java中类与对象的继承重写,存储以及自动转换和强制转换。...
  6. 双双拿下赛道全部指标最佳 | 腾讯新一代VAV1携手V265亮相MSU编码器大赛
  7. iOS微博项目(七)发微博和定位
  8. 华为服务器型号2285,华为服务器2285磁盘阵列设置
  9. 小雪节气艺术字体设计PNG素材 | 希望可以温暖到你了
  10. Shiro【授权过滤器、与ehcache整合、验证码、记住我】
  11. Kali linux 全部版本镜像下载
  12. android测试基站,Android iPhone 手机查看基站信息
  13. 2010 年全国大学生数学建模竞赛甘肃赛区 获奖情况
  14. 达梦数据库服务未知状态解决历程
  15. 永磁同步电机驱动器保护算法专题
  16. Hadoop 学习笔记(三)常用命令
  17. 赠书 | 劲爆!5本书籍大礼包免费送,一网打尽脑科学
  18. PLC应用关于自动化控制中离散PID模型的理论分析
  19. 云服务器是怎么虚拟的,云服务器怎么虚拟化
  20. MAC MacVim及Vundle安装

热门文章

  1. 基于JS的金铲铲工资结算系统的设计与开发
  2. CAD教程:CAD软件中CAD标注设置技巧
  3. 如何在Schlage Connect Smart Lock上启用警报
  4. jquery实现nav的下拉
  5. switch hosts的使用
  6. .strip().split('t')和.strip().split()
  7. 2060显卡驱动最新版本_A卡继续战未来?AMD最新显卡驱动测试
  8. 【考前看几题】系统集成项目管理师-2018年上半年-上午真题
  9. php+控制器中的全局变量,php中的全局变量引用
  10. 我的周刊(第024期)