我正在尝试为Minecraft 1.7.10创建一个简单的启动器。但是,当我尝试从net.minecraft.client.main.Main
获取main方法时,出现了错误:
java.lang.ClassNotFoundException:joptsimple / OptionSpec。
我尝试研究其他启动器的代码,以了解它们如何解决此问题,但我看不出有什么区别。
public Method getMainMethod() throws NoSuchMethodException, SecurityException,
ClassNotFoundException, IOException,
InstantiationException, IllegalAccessException
{
return new URLClassLoader(new URL[] {new URL("file:///" +
MinecraftUtil.getBinFolder() + "/minecraft.jar")},
URLClassLoader.getSystemClassLoader().getParent())
.loadClass("net.minecraft.client.main.Main")
.getMethod("main", String[].class);
}
这应该是从minecraft.jar中获取main方法并允许我调用它的,但是,即使我试图加载该类,也会吐出joptsimple / optionspec错误。
答案 0 :(得分:0)
您还需要在该类加载器中包含Minecraft需要的所有库,如果您查看典型的Minecraft安装,您会注意到\libraries
文件夹中包含很多子目录和其他.jar文件。最后,您需要加载所有需要的文件。
Minecraft使用配置文件来跟踪所需的库,应该有versions
文件夹,并且每个版本都包含该版本的.jar和.json文件以及您需要加载的所有库:
"libraries": [
{
"name": "com.mojang:patchy:1.1",
"downloads": {
"artifact": {
"size": 15817,
"sha1": "aef610b34a1be37fa851825f12372b78424d8903",
"path": "com/mojang/patchy/1.1/patchy-1.1.jar",
"url": "https://libraries.minecraft.net/com/mojang/patchy/1.1/patchy-1.1.jar"
}
}
},
并且您可以找到.jar文件的大小,sha1校验和,该库目录中的路径,如果缺少该文件,则可以下载链接。因此,您可以实现启动器,该启动器将下载缺少的库。
您可以使用这些现有配置文件,也可以仅创建自己的系统来跟踪需要包含在该类加载器中的库。
请注意,配置文件还包括您需要传递给Minecraft主要方法以运行游戏的所有参数-您也需要这些参数。