zhanshi123
更新插件到 java16 + nashorn 15.2的时候
遇到了一些nashorn奇怪的问题
先上代码
https://gitee.com/Soldier233/Vip ... /ScriptManager.java
运行时 控制台debug信息和报错如下
  1. [17:57:24 INFO]: Soldier__ issued server command: /vip run TimePerm Soldier__ 1 90s
  2. [17:57:24 INFO]: [VipSystem-Debug] Precompile custom function TimePerm 's script, file:D:\Minecraft\Servers\1.12 Test2\plugins\VipSystem\custom\TimePerm\script.js
  3. [17:57:24 INFO]: [VipSystem-Debug] translate {玩家} to Soldier__
  4. [17:57:24 INFO]: [VipSystem-Debug] translate {权限} to 1
  5. [17:57:24 INFO]: [VipSystem-Debug] translate {时间} to 90s
  6. [17:57:24 INFO]: Unknown command. Type "/help" for help.
  7. [17:57:24 INFO]: [VipSystem-Debug] InvokeD:\Minecraft\Servers\1.12 Test2\plugins\VipSystem\custom\TimePerm\script.js function activate with args (Soldier__)
  8. [17:57:24 WARN]: java.lang.NoSuchMethodException: No such function activate
  9. [17:57:24 WARN]:        at org.openjdk.nashorn.api.scripting.ScriptObjectMirror.callMember(ScriptObjectMirror.java:192)
  10. [17:57:24 WARN]:        at org.openjdk.nashorn.api.scripting.NashornScriptEngine.invokeImpl(NashornScriptEngine.java:379)
  11. [17:57:24 WARN]:        at org.openjdk.nashorn.api.scripting.NashornScriptEngine.invokeFunction(NashornScriptEngine.java:186)
  12. [17:57:24 WARN]:        at me.zhanshi123.vipsystem.script.ScriptManager.invokeCustomFunction(ScriptManager.java:65)
  13. [17:57:24 WARN]:        at me.zhanshi123.vipsystem.custom.CustomFunction.executeFunction(CustomFunction.java:159)
  14. [17:57:24 WARN]:        at me.zhanshi123.vipsystem.custom.StoredFunction.lambda$handleCustomProcedure$6(StoredFunction.java:118)
  15. [17:57:24 WARN]:        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
  16. [17:57:24 WARN]:        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
  17. [17:57:24 WARN]:        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
  18. [17:57:24 WARN]:        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
  19. [17:57:24 WARN]:        at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
  20. [17:57:24 WARN]:        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
  21. [17:57:24 WARN]:        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
  22. [17:57:24 WARN]:        at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
  23. [17:57:24 WARN]:        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
  24. [17:57:24 WARN]:        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
  25. [17:57:24 WARN]:        at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
  26. [17:57:24 WARN]:        at me.zhanshi123.vipsystem.custom.StoredFunction.handleCustomProcedure(StoredFunction.java:112)
  27. [17:57:24 WARN]:        at me.zhanshi123.vipsystem.custom.StoredFunction.executeStart(StoredFunction.java:93)
  28. [17:57:24 WARN]:        at me.zhanshi123.vipsystem.command.sub.RunCommand.onCommand(RunCommand.java:50)
  29. [17:57:24 WARN]:        at me.zhanshi123.vipsystem.command.CommandsExecutor.handle(CommandsExecutor.java:63)
  30. [17:57:24 WARN]:        at me.zhanshi123.vipsystem.command.CommandsExecutor.onCommand(CommandsExecutor.java:34)
  31. [17:57:24 WARN]:        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
  32. [17:57:24 WARN]:        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:152)
  33. [17:57:24 WARN]:        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:685)
  34. [17:57:24 WARN]:        at net.minecraft.server.v1_12_R1.PlayerConnection.handleCommand(PlayerConnection.java:1492)
  35. [17:57:24 WARN]:        at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1297)
  36. [17:57:24 WARN]:        at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:45)
  37. [17:57:24 WARN]:        at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:5)
  38. [17:57:24 WARN]:        at net.minecraft.server.v1_12_R1.PlayerConnectionUtils.lambda$ensureMainThread$0(PlayerConnectionUtils.java:14)
  39. [17:57:24 WARN]:        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
  40. [17:57:24 WARN]:        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
  41. [17:57:24 WARN]:        at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46)
  42. [17:57:24 WARN]:        at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:850)
  43. [17:57:24 WARN]:        at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:423)
  44. [17:57:24 WARN]:        at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:774)
  45. [17:57:24 WARN]:        at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:666)
  46. [17:57:24 WARN]:        at java.base/java.lang.Thread.run(Thread.java:831)
复制代码
对应的js文件如下
  1. var bukkit = Java.type("org.bukkit.Bukkit");
  2. //获取Bukkit
  3. var Vector = Java.type("org.bukkit.util.Vector");
  4. //获取Vector向量

  5. var activate = function (player) {
  6.     //此时传入的player参数为字符串
  7.     helper.sendMessage("&6公告 &7>>> &f玩家 &a" +player+" &f购买了临时飞行权限,大家快去膜拜一下氪金大佬!");

  8. };
复制代码
这个咋就获取不到名叫activate的函数了呢?
有没有dalao知道的?

Hueihuea
本帖最后由 Hueihuea 于 2021-6-10 21:41 编辑


你试着eval里面直接带上调用函数的代码
而不是invokeFunction试试看?

zhanshi123
Hueihuea 发表于 2021-6-10 21:36
你试着eval里面直接带上调用函数的代码
而不是invokeFunction试试看?

测试了一下
发现 不带bindings或者context
直接eval是可以用的
但是CompiledScript不能用

带了bindings或context
一个都用不了

但是频繁eval又会造成卡顿。。
所以还是得想办法解决不能预编译的问题