Minecraft Launcher:无法获得主要方法需要帮助

Minecraft Launcher: Cannot get main method need assistance

我正在尝试为 Minecraft 1.7.10 创建一个简单的启动器。但是,当我尝试从 net.minecraft.client.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 获取主要方法并允许我调用它,但如果我什至尝试加载 class 它会吐出 joptsimple/optionspec 错误。

你还需要在这个 class 加载器中包含 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 校验和、库目录中的路径,如果丢失,link 可以下载它。所以你可以实现启动器来下载丢失的库。

您可以使用这些现有的配置文件,或者只是制作您自己的系统来跟踪您需要包含在 class 加载程序中的库。
请注意,配置文件还包括您需要传递给 Minecraft main 方法以 运行 游戏的所有参数 - 您也需要这些。