使用myClass.getMethod("func_181057_v")
在控制台中抛出异常- "NoSuchMethodException: myClass.v()"。
我不认为它应该这样做-为什么抛出异常中的方法名称与我实际输入的方法名称不同,我如何检索该方法?
我已经尝试了.getMethod(..)
和.getDelcaredMethod(..)
以及打印的.getDeclaredMethods()
列表和.func_181057_v()在列表上。当我更改名称时(例如func_181057__v),则查找确切键入的方法,而不是"v"
我代码:
try {
Class<?> fmlCommonHandlerClass = Class.forName("net.minecraftforge.fml.common.FMLCommonHandler");
Class<?> minecraftServerClass = Class.forName("net.minecraft.server.MinecraftServer");
Class<?> playerListClass = Class.forName("net.minecraft.server.management.PlayerList");
Method getMinecraftServerInstanceMethod = fmlCommonHandlerClass.getDeclaredMethod("getMinecraftServerInstance");
Method getPlayerListMethod = minecraftServerClass.getDeclaredMethod("getPlayerList");
Method getPlayersMethod = playerListClass.getDeclaredMethod("func_181057_v");
} catch (Exception exception) {
throw new RuntimeException(exception);
}
完整的代码:https://github.com/KittyNath/ReflectionExample
确切的方法名称是public java.util.List net.minecraft.server.management.PlayerList.func_181057_v()
如果你想执行它,你需要编译和安装它作为一个插件到Mohist服务器,我使用1.12.2版本,构建320。
Java 1.8.0361 .
完全例外:
[18:25:56 ERROR]: Error occurred while enabling ReflectionExample v1.0-SNAPSHOT (Is it up to date?)
java.lang.RuntimeException: java.lang.NoSuchMethodException: net.minecraft.server.management.PlayerList.v()
at com.example.plugin.reflectionExample.ReflectionExample.onEnable(ReflectionExample.java:20) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:177) ~[JavaPlugin.class:?]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:318) [JavaPluginLoader.class:?]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:399) [SimplePluginManager.class:?]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugin(CraftServer.java:477) [CraftServer.class:?]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugins(CraftServer.java:418) [CraftServer.class:?]
at net.minecraft.server.MinecraftServer.func_71247_a(MinecraftServer.java:383) [MinecraftServer.class:?]
at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:315) [nz.class:?]
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:590) [MinecraftServer.class:?]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_361]
Caused by: java.lang.NoSuchMethodException: net.minecraft.server.management.PlayerList.v()
at java.lang.Class.getMethod(Unknown Source) ~[?:1.8.0_361]
at com.mohistmc.bukkit.nms.proxy.ProxyClass.getMethod(ProxyClass.java:43) ~[ProxyClass.class:?]
at com.example.plugin.reflectionExample.ReflectionExample.onEnable(ReflectionExample.java:18) ~[?:?]
... 9 more
我能够解决核心问题,但无法解决谜题。
可以在干净的Mohist服务器上同时使用.v()和.func_181057_v()。我忘记删除一个名为BKCommonLib(版本1.19.3-v3-1512)的插件,它似乎删除了.func_181057_v(),但使v()工作。
解决方案-只需使用.v()
。
至于为什么日志说,当您使用。func_181057_v()而BKCommonLib存在于服务器上时,找不到。v() -我不知道。也许这是一个Java bug,出现由于BKCommonLib通过反射路径的东西。
请随意查看并添加评论!