lancer le 1.12.2.jar sans passer par le launcher officiel
-
oui j’ai le pseudo mais par contre le mot de passe je ne sais pas trop
ça doit être le--accessToken
je pense
là je fais mes recherches mais je ne trou e toujours rien… -
Oui c’est ce que j’ai dis dans l’édit, normalement t’as une URL minecraft où avec le pseudo & mot de passe tu peux généré un HASH de connexion, cela à été mis en place suite à une plainte sur l’insécurité de fournir les identifiants à chaque fois partout, il y à eu un HASH pour ne stocker aucun identifiant sur le PC.
-
là je crois tenir quelque chose j’ai regardé sur spigotMC (ce post), et j’ai trouvé ce code-là :
private final static String authserver = "https://authserver.mojang.com"; public static String authenticate(String username, String password) throws Exception { String genClientToken = UUID.randomUUID().toString(); // Setting up json POST request String payload = "{\"agent\": {\"name\": \"Minecraft\",\"version\": 1},\"username\": \"" + username + "\",\"password\": \"" + password + "\",\"clientToken\": \"" + genClientToken + "\"}"; String output = postReadURL(payload, new URL(authserver + "/authenticate")); // Setting up patterns String authBeg = "{\"accessToken\":\""; String authEnd = "\",\"clientToken\":\""; String clientEnd = "\",\"selectedProfile\""; // What we are looking for String authtoken = getStringBetween(output, authBeg, authEnd); return authtoken; } private static String postReadURL(String payload, URL url) throws Exception { HttpsURLConnection con = (HttpsURLConnection) (url.openConnection()); con.setReadTimeout(15000); con.setConnectTimeout(15000); con.setRequestMethod("POST"); con.setRequestProperty("Content-Type", "application/json"); con.setDoInput(true); con.setDoOutput(true); OutputStream out = con.getOutputStream(); out.write(payload.getBytes("UTF-8")); out.close(); BufferedReader in = new BufferedReader(new tStreamReader(con.getInputStream())); String output = ""; String line = null; while ((line = in.readLine()) != null) { output += line; in.close(); } return output; } private static String getStringBetween(String base, String begin, String end) { Pattern patbeg = Pattern.compile(Pattern.quote(begin)); Pattern patend = Pattern.compile(Pattern.quote(end)); int resbeg = 0; int resend = base.length() - 1; Matcher matbeg = patbeg.matcher(base); if (matbeg.find()) resbeg = matbeg.end(); Matcher matend = patend.matcher(base); if (matend.find()) resend = matend.start(); return base.substring(resbeg, resend); }
il doit y avoir un moyen de le retranscrire en bash je pense, ou de créer un script (en python par exemple)
EDIT : ou même de l’ajouter à un code, car on peut créer un script bash avec java (il faut que je revoie ça), et ça devrait marcher avec des variables (j’espère)
-
En faite quand tu le fais avec Java il y aucun soucis, étant un langage objet et souple tu peux largement le faire (je l’avais fais), l’URL à l’air d’être la bonne je ne la trouver plus l’API réponds.
Il suffit de questionner l’API, comme n’importe quel site et récupérer le token après et voilà ^^
Mais en bash ça va être difficile d’accéder à l’url d’un site, récupérer les sources et de récupérer le token dans le json.
Mais pas impossible
-
je ne pensais pas à ça (regarde l’édit) j’ai dit que c’était sûrement possible de lancer un script bash depuis un programme java (j’ai déjà vu ça), et ça donnerait par exemple
List<String> command; command.add("set MC_DIR=%AppData%\.minecraft"); // le reste des variables command.add("java"); command.add("%JVM_ARGS%"); // etc... command.add("-cp"); command.add("%MC_DIR%/librairies/...1.12.2.jar"); command.add("--username"); command.add(username); //etc... command.add("--accesToken"); command.add((int) authenticate(username, password)); //etc... String newCommand = new String[command.size()]; for (int i = 0;i < command.size(); i++) { newCommand[i] = command.index(i); } Process p = runtime.getRuntime().exec(newCommand); p.waitFor();
je pense que ça marche
-