Spigot中无法导入NMS?如何解决“无法解析符号minecraft”错误
解决Spigot中无法导入NMS的问题
你遇到的是典型的依赖缺失问题——你用的spigot-api-1.14.4-R0.1-20191205.000449-89-shaded.jar只包含Spigot对外暴露的API封装层,本身不包含NMS(net.minecraft.server包)的代码,所以IDE会提示无法解析符号。
解决方案
方案1:改用完整Spigot服务器JAR(推荐)
移除当前的spigot-api-shaded.jar依赖,替换为对应版本的完整Spigot服务器JAR(比如spigot-1.14.4-R0.1-SNAPSHOT.jar)。这个JAR同时包含NMS代码和Spigot API,能直接支持NMS类的导入。
如果用Maven/Gradle管理依赖,直接配置spigot依赖而非spigot-api:
<!-- Maven示例 --> <dependency> <groupId>org.spigotmc</groupId> <artifactId>spigot</artifactId> <version>1.14.4-R0.1-SNAPSHOT</version> <scope>provided</scope> </dependency>
方案2:补全NMS版本路径
NMS的包名在不同MC版本中有版本后缀,1.14.4对应的是v1_14_R1,你需要写全导入路径:
import net.minecraft.server.v1_14_R1.*;
但前提是你的项目依赖中已经包含了带NMS代码的JAR(也就是方案1中的完整Spigot服务器JAR)。
额外提醒
- NMS属于Minecraft内部代码,版本间变动极大,直接使用会导致插件跨版本兼容性极差。能通过Spigot/Bukkit API实现的功能,优先用官方API。
- 如果必须用NMS,也可以考虑用反射访问,避免直接导入包,能一定程度提升兼容性。示例:
import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_14_R1.CraftServer; // 通过反射风格获取NMS服务器实例 net.minecraft.server.v1_14_R1.MinecraftServer nmsServer = ((CraftServer) Bukkit.getServer()).getServer();
内容的提问来源于stack exchange,提问作者Sigge
相关产品推荐
相关产品推荐

