JavaScript
2024年10月29日大约 2 分钟
JavaScript
对象
TrMenu 的 JavaScript 引擎目前提供以下对象
bukkitServer
即 Bukkit.getServer()utils
即 me.arasple.mc.trmenu.module.internal.script.js.Assist.INSTANCEplayer
即 玩家本身session
即 me.arasple.mc.trmenu.module.display.MenuSession
插件挂钩
可以在 JavaScript 中调用挂钩的插件,比如我想调用 EcoItems 的 API 来获得物品,可以通过ecoitems.getItem("my_item")
来获得
聪明的你应该已经发现了,绑定到 JavaScript 命名空间的名称是插件名字的全小写
目前支持挂钩的
- EcoItems
- Floodgate
- HeadDatabase
- HMCCosmetics
- ItemsAdder
- MagicCosmetics (注意:这个插件的 JS 命名空间是 magicAPI)
- MagicGem
- MMOItems
- NBTAPI
- NeigeItems
- Oraxen
- PlayerPoints
- SkinsRestorer
- Skulls
- SXItem
- Triton
- Vault
- Zaphkiel
- MythicMobs
如果你并不想要,可以关闭Export-Hook-Plugin
Java 命名空间
别名
在settings.yml
中的Bindings.Binding-Map
可以将类以别名导出到 JS 命名空间
比如
Bindings:
Binding-Map:
"Bukkit": "org.bukkit.Bukkit"
"EntityType": "org.bukkit.entity.EntityType"
奇技淫巧
java.lang["System"].out.println("TrMenu 真 NB")
Java.type
创建别名
var System = Java.type("java.lang.System")
System.out.println("TrMenu 真 NB")
函数
TrMenu 的 JavaScript 引擎目前提供以下函数
vars(String input)
返回替换函数变量varInt(String input)
替换变量并转换为整型
注意
- TrMenu 的 JavaScript 均会预编译缓存,一切变量使用都需要通过函数处理
- 表示 “或” 的符号为
||
, 表示 “与” 的符号为&&
实例
- 判断有无权限
- 可直接调用 player 对象的方法,
player.hasPermission("perm")
- 可直接调用 player 对象的方法,
utils
TrMenu GraalJS
该功能仍处于实验性
让 TrMenu 使用 GraalJS,根据性能测试,GraalJS 的执行性能在 Nashorn 的两倍以上,并且支持最新的JS语法
安装
GraalJS 需要在 GraalVM 上才可以完全发挥性能,其他 JDK 也能用
下载 TrMenu GraalJS,作为插件进行安装
语法扩展
包加载
Java.addToClasspath(location)
将指定位置.jar(文件或目录路径字符串)添加到 Java 的类路径中
JS执行
load(source)
加载(解析并执行)指定的 JavaScript 源代码
包访问
GraalVM JavaScript 提供了一个全局属性:Packages
Packages.java.lang.System.out.println("TrMenu 真 NB")
TODO
不想写了(:,还有()