Démarrer Minecraft Sur Mac Avec Java


J'essaie de créer un programme java qui lancera minecraft en mode hors ligne avec le nom d'utilisateur que je veux afin que je puisse avoir des noms d'utilisateur comme Notch et deadmau5 et j'utilise ce code pour le lancer sur mac et Windows (Actuellement en test sur mac):

public void startMacMinecraft(String username) throws IOException,
        InterruptedException {
    System.out.println(defaultDirectory());

    String sysUser = System.getProperty("user.name");
    String commandString = "java -cp "
            + defaultDirectory()
            + "/minecraft/bin/minecraft.jar:"
            + defaultDirectory()
            + "/minecraft/bin/lwjgl.jar:"
            + defaultDirectory()
            + "/minecraft/bin/lwjgl_util.jar:"
            + defaultDirectory()
            + "/minecraft/bin/jinput.jar: -Djava.library.path="
            + defaultDirectory()
            + "/minecraft/bin/natives -Xmx1024M -Xms512M net.minecraft.client.Minecraft '"
            + username + "'";
    CommandLine command = CommandLine.parse(commandString);
    DefaultExecutor executor = new DefaultExecutor();
    int exitValue = executor.execute(command);
    System.out.println(exitValue);

    System.out.println("\nTry Two:\n");
    String javaExe = System.getProperty("java.home") + "/bin/java";

}

public void startWinMinecraft(String username) throws IOException,
        InterruptedException {
    String sysUser = System.getProperty("user.name");
    String commandString = "Java -Xms512m -Xmx1024m -cp \"%APPDATA%\\.minecraft\\bin\\*\" -Djava.library.path=\"%APPDATA%\\.minecraft\\bin\\natives net.minecraft.client.Minecraft \""
            + username + "\"";
    CommandLine command = CommandLine.parse(commandString);
    DefaultExecutor executor = new DefaultExecutor();
    int exitValue = executor.execute(command);
    System.out.println(exitValue);

}

private static String defaultDirectory() {
    String OS = System.getProperty("os.name").toUpperCase();
    if (OS.contains("WIN"))
        return System.getenv("APPDATA");
    else if (OS.contains("MAC"))
        return System.getProperty("user.home") + "/Library/Application "
                + "Support";
    else if (OS.contains("NUX"))
        return System.getProperty("user.home");
    return System.getProperty("user.dir");
}

Que j'essaie d'adapter à partir de cet applescript que j'ai déjà exécuté et obtenu de https://gaming.stackexchange.com/questions/46608/how-can-i-run-minecraft-in-offline-mode-on-os-x-and-still-have-my-name que je vais coller ici:

property user_name : "Player"

display dialog "Enter A User Name" default answer "" buttons {"Cancel", "Continue"} default button 2
set the user_name to text returned of the result

set UsrApp to (path to current user folder)
set UsrApp_unx to POSIX path of UsrApp

set MineScript to "java -cp " & UsrApp_unx & "Library/Application\\ Support/minecraft/bin/minecraft.jar:" & UsrApp_unx & "Library/Application\\ Support/minecraft/bin/lwjgl.jar:" & UsrApp_unx & "Library/Application\\ Support/minecraft/bin/lwjgl_util.jar:" & UsrApp_unx & "Library/Application\\ Support/minecraft/bin/jinput.jar: -Djava.library.path=" & UsrApp_unx & "Library/Application\\ Support/minecraft/bin/natives -Xmx1024M -Xms512M net.minecraft.client.Minecraft '" & user_name & "'"

do shell script MineScript

Lorsque j'exécute l'applescript, cela fonctionne parfaitement bien mais lorsque j'exécute ma version adaptée, cela me donne une erreur class not found:

    Logging in as: Player
/Users/Connor/Library/Application Support
Exception in thread "main" java.lang.NoClassDefFoundError: Support/minecraft/bin/minecraft/jar:/Users/Connor/Library/Application
Caused by: java.lang.ClassNotFoundException: Support.minecraft.bin.minecraft.jar:.Users.Connor.Library.Application
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
    at org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:377)
    at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:160)
    at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:147)
    at info.connorbp.GUIApp.LoginPanel.startMacMinecraft(LoginPanel.java:137)
    at info.connorbp.GUIApp.LoginPanel$1.actionPerformed(LoginPanel.java:82)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    at java.awt.Component.processMouseEvent(Component.java:6375)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
    at java.awt.Component.processEvent(Component.java:6140)
    at java.awt.Container.processEvent(Container.java:2083)
    at java.awt.Component.dispatchEventImpl(Component.java:4737)
    at java.awt.Container.dispatchEventImpl(Container.java:2141)
    at java.awt.Component.dispatchEvent(Component.java:4565)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4619)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4280)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4210)
    at java.awt.Container.dispatchEventImpl(Container.java:2127)
    at java.awt.Window.dispatchEventImpl(Window.java:2482)
    at java.awt.Component.dispatchEvent(Component.java:4565)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:684)
    at java.awt.EventQueue.access$000(EventQueue.java:85)
    at java.awt.EventQueue$1.run(EventQueue.java:643)
    at java.awt.EventQueue$1.run(EventQueue.java:641)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
    at java.awt.EventQueue$2.run(EventQueue.java:657)
    at java.awt.EventQueue$2.run(EventQueue.java:655)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:654)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Quelqu'un sait-il ce que je fais de mal ou comment le réparer?

MODIFIER:

Encore plus étrange, je suis allé dans la zone des événements de la zone applescript et j'ai trouvé la commande exacte que l'applescript exécutait:

java -cp /Users/Connor/Library/Application\\ Support/minecraft/bin/minecraft.jar:/Users/Connor/Library/Application\\ Support/minecraft/bin/lwjgl.jar:/Users/Connor/Library/Application\\ Support/minecraft/bin/lwjgl_util.jar:/Users/Connor/Library/Application\\ Support/minecraft/bin/jinput.jar: -Djava.library.path=/Users/Connor/Library/Application\\ Support/minecraft/bin/natives -Xmx1024M -Xms512M net.minecraft.client.Minecraft 'username'

Et même quand j'ai essayé d'exécuter le script qui venait directement de l'applescript, j'ai eu un autre java.lang.Erreur NoClassDefFoundError, même si j'ai pris la commande directement à partir de l'applescript qui fonctionne.

Author: Community, 2013-02-05

2 answers

Dans le lanceur par défaut, quel que soit le nom d'utilisateur que vous fournissez est utilisé pour le mode hors ligne, donc écrire un lanceur séparé est inutile.

Dans tous les cas, décompiler le lanceur devrait nous donner une assez bonne idée de la façon de lancer le jeu.

Il y a beaucoup de code donc je recommande de le décompiler vous-même. Pour Mac, JD-GUI fait un bon travail. Pour Windows, je ne peux pas recommander un décompilateur, mais c'est à cela que sert Google:)

Après avoir obtenu le code source du lanceur, jetez un coup d'oeil à public void login(String userName, String password) en net.de minecraft.LauncherFrame. Net est également pertinent.de minecraft.Lanceur.

Lire cela devrait vous donner une assez bonne idée de la façon de lancer Minecraft.

 1
Author: arjunyg, 2013-05-29 05:07:23

Oups, oublié cette question. En fait, il me manquait juste une partie du code nécessaire pour lancer Minecraft.

 0
Author: connorbp, 2013-06-12 00:09:38