此 API 允许你通过反射访问类、字段和方法。但与默认的反射方法不同,你可以指定多个名称,API 将自动解析到实际存在的类/字段/方法。这对于插件使用 net.minecraft.server 类并希望兼容多个版本(例如 1.8 和 1.9)尤其有用。它还提供了一些实用的 Minecraft 相关方法,例如一个适用于 1.9 和 1.8(/1.7)的 DataWatcher 类。
ClassResolver、FieldResolver、MethodResolver、ConstructorResolver 等工具,简化反射操作。DataWatcher 等类,帮助处理跨版本的 Minecraft 特定数据操作。以下是如何使用 NMSClassResolver 和 ClassResolver 来跨版本访问类的示例。
假设你需要访问 NMS 的 ChatSerializer 类。在 1.8_R2 之前,它位于 net.minecraft.server.ChatSerializer,之后则被移至 net.minecraft.server.IChatBaseComponent$ChatSerializer。使用 NMSClassResolver 可以轻松处理:
Class<?> chatSerializer = new NMSClassResolver().resolveSilent(
"ChatSerializer",
"IChatBaseComponent$ChatSerializer"
);NMSClassResolver 会自动添加 net.minecraft.server 前缀。resolveSilent 方法会忽略所有抛出的异常。对于像 Title 数据包这样在不同版本中位于多个不同类的情况,可以使用通用的 ClassResolver:
ClassResolver resolver = new ClassResolver();
Class<?> packetTitle = resolver.resolveSilent(
"net.minecraft.server." + Minecraft.getVersion() + "PacketPlayOutTitle", // > 1.8
"org.spigotmc.ProtocolInjector$PacketTitle" // protocol-hack 版本
);
Class<?> packetAction = resolver.resolveSilent(
"net.minecraft.server." + Minecraft.getVersion() + "PacketPlayOutTitle$EnumTitleAction", // > 1.8 R3
"net.minecraft.server." + Minecraft.getVersion() + "EnumTitleAction", // < 1.8 R3
"org.spigotmc.ProtocolInjector$PacketTitle$Action" // protocol-hack 版本
);ClassResolver、FieldResolver、MethodResolver、ConstructorResolver 和 DataWatcher 的完整详细信息。友情链接: 网易我的世界 | 泰拉瑞亚 | ocent云计算 | 米饭Minecraft插件文档 | 友链合作
历史访问人数:1,247,059 | 历史访问人次:1,549,068
今日访问人数:4,308 | 今日访问人次:4,509
昨日访问人数:27,770 | 昨日访问人次:30,933
Copyright © 2019-2026 我的世界服务器列表站. All rights reserved.
❤ Powered by GermMC 京ICP备17023959号-6