KokaKiwi / MCLauncher

Custom Launcher for Minecraft
38 stars 28 forks source link

A propos des "minecraft.jar" moddés... #18

Closed Arcandian closed 11 years ago

Arcandian commented 11 years ago

Salut Kiwi =) Tout d'abord, merci d'avoir crée ce brillant launcher dont j'ai presque fini les tests !

Presque, simplement parce que je ne comprends pas pourquoi, quand je lance le launcher, l'update se passe normalement, me dézippe mes mods sans soucis et télécharge le "minecraft.jar" modifié avec Forge, PlayerAPI et GuiAPI, le tout pour MC 1.3.2.

Et c'est là que le bas blesse : une fois que le launcher à fini de télécharger et dézipper sans problèmes les jars plus ce fichier zip additionnel contenant les autres mods, eh bien le jar ne démarre pas.

J'ai refait l'essai avec un "minecraft.jar" d'origine : il démarre correctement.

Donc voilà, je souhaitais savoir si tu savais pour quelle raison et si c'est réparable, et dans ce cas comment fait-on?

Merci par avance, à plus ! ^^

EDIT : J'oubliais de préciser que j'utilise le dossier personnalisé pour portabiliser le jeu, que le nom des dossiers sont ceux par défaut (/mcp_data/.minecraft) et que je me sers du système de versions custom pour mettre à jour le jeu. En espérant ne rien avoir oublié !

Arcandian commented 11 years ago

Hmmmm, après quelques heures de recherches, j'ai peut-être une solution : il semblerait qu'il n'y ai pas de checksum md5 généré dans le dossier "bin" du jeu, fichier crée normalement avec le launcher d'origine il me semble. Et il me semble qu'il ai néessaire au démarrage du jeu, même si le jeu n'est pas moddé.

Je tenterais demain cette solution : dans mon zip additionnel, j'ajouterais simplement le md5 crée par le launcher d'origine.

Ce zip sera donc comme suit :

mods.zip : |- bin |- checksum.md5 |- config |- mes fichiers de configs de mods... |- mods |- mes mods zip ou jar |- resources | - les sons...

Et ainsi de suite...

Je vous tiens au courant demain !

Arcandian commented 11 years ago

Je viens tout juste d'essayer d'intégrer ce hash manquant : le résulat est le même. Le launcher télécharge sans soucis les fichiers demandés, mais reste ensuite sur un écran noir.

Cependant, j'ai peut-être une autre thèse, mais cette fois en rapport avec Forge lui-même. Voici le contenu d'un report d'erreurs généré par celui-ci :

2012-11-27 15:03:26 [INFO] [STDERR] java.lang.RuntimeException: cpw.mods.fml.relauncher.ReflectionHelper$UnableToFindClassException: java.lang.ClassNotFoundException: net.minecraft.Launcher 2012-11-27 15:03:26 [INFO] [STDERR] at cpw.mods.fml.relauncher.FMLRelauncher.relaunchApplet(FMLRelauncher.java:269) 2012-11-27 15:03:26 [INFO] [STDERR] at cpw.mods.fml.relauncher.FMLRelauncher.appletEntry(FMLRelauncher.java:212) 2012-11-27 15:03:26 [INFO] [STDERR] at net.minecraft.client.MinecraftApplet.init(MinecraftApplet.java:28) 2012-11-27 15:03:26 [INFO] [STDERR] at com.kokakiwi.mclauncher.core.launcher.LauncherApplet.replace(LauncherApplet.java:54) 2012-11-27 15:03:26 [INFO] [STDERR] at com.kokakiwi.mclauncher.core.Launcher.run(Launcher.java:85) 2012-11-27 15:03:26 [INFO] [STDERR] at java.lang.Thread.run(Unknown Source) 2012-11-27 15:03:26 [INFO] [STDERR] Caused by: cpw.mods.fml.relauncher.ReflectionHelper$UnableToFindClassException: java.lang.ClassNotFoundException: net.minecraft.Launcher 2012-11-27 15:03:26 [INFO] [STDERR] at cpw.mods.fml.relauncher.ReflectionHelper.getClass(ReflectionHelper.java:159) 2012-11-27 15:03:26 [INFO] [STDERR] at cpw.mods.fml.relauncher.FMLRelauncher.relaunchApplet(FMLRelauncher.java:254) 2012-11-27 15:03:26 [INFO] [STDERR] ... 5 more 2012-11-27 15:03:26 [INFO] [STDERR] Caused by: java.lang.ClassNotFoundException: net.minecraft.Launcher 2012-11-27 15:03:26 [INFO] [STDERR] at java.net.URLClassLoader$1.run(Unknown Source) 2012-11-27 15:03:26 [INFO] [STDERR] at java.net.URLClassLoader$1.run(Unknown Source) 2012-11-27 15:03:26 [INFO] [STDERR] at java.security.AccessController.doPrivileged(Native Method) 2012-11-27 15:03:26 [INFO] [STDERR] at java.net.URLClassLoader.findClass(Unknown Source) 2012-11-27 15:03:26 [INFO] [STDERR] at java.lang.ClassLoader.loadClass(Unknown Source) 2012-11-27 15:03:26 [INFO] [STDERR] at java.lang.ClassLoader.loadClass(Unknown Source) 2012-11-27 15:03:26 [INFO] [STDERR] at java.lang.Class.forName0(Native Method) 2012-11-27 15:03:26 [INFO] [STDERR] at java.lang.Class.forName(Unknown Source) 2012-11-27 15:03:26 [INFO] [STDERR] at cpw.mods.fml.relauncher.ReflectionHelper.getClass(ReflectionHelper.java:151) 2012-11-27 15:03:26 [INFO] [STDERR] ... 6 more

Cette ligne : "Caused by: java.lang.ClassNotFoundException: net.minecraft.Launcher", semble indiquer que Forge ne sait pas ou chercher la classe Main() du launcher officiel. Ce qui explique l'erreur de démarrage.

Je vais tenter quelques opérations sur le Wrapper.java, pour voir si je peux overrider ce paramètre. Ça ou faire une version légèrement modifiée de Forge pour booter sur ton launcher. Ou alors modifier l'agencement de ton projet afin qu'il boot correctement. Je vais aussi essayer

Si je trouve une solution, je te posterais le lien de mes sources pour que tu puisse les examiner ^^

Voilà, voilà, si quelqu'un d'autre à trouvé une solution, merci de poster ici (toi aussi Kiwi hein :-) )

KokaKiwi commented 11 years ago

Ah oui en effet, j'ai eu le même problème lorsque j'ai voulu utiliser Minecraft Forge avec mon launcher. Le problème c'est que Forge est quasi lié au launcher de base, et ne fonctionne qu'avec celui-ci, et pour le moment je n'ai pas de solutions à ce problème (j'ai tout de même essayé de mettre les classes originelles du launcher de base pour voir, ça ne marche pas) :/

Arcandian commented 11 years ago

Ben j'ai un début de solution en fait : il y a un fichier dans les sources de Forge, dans le packet common.cpw.mods.fml.relauncher, une classe appelée FMLRelauncher. Elle contient ces lignes (minecraftforge-src-1.4.5-6.4.0.396) :

Ligne 253 | String launcherClassName = System.getProperty("minecraft.applet.WrapperClass", "net.minecraft.Launcher");

Je crois comprendre ce cette chaîne de caractères prend en paramètre une classe de type wrapper et la classe principale du launcher officiel.

L'idée serait donc de remplacer ces paramètres par ceux de tes classes. J'ai essayé avec mcp v7.23 (sous Eclipse), en mettant :

String launcherClassName = System.getProperty("com.kokakiwi.mclauncher.launcher.core.Wrapper", "com.kokakiwi.mclauncher.MCLauncher");

Le souci, c'est que je ne sais pas où se trouvent la classe compilée. J'ignore où la chercher, pour après la remplacer dans mon minecraft.jar et essayer encore une fois.

Arcandian commented 11 years ago

Mmmh, je vais de faire un tour du code du FTB Launcher pour voir si je trouve pas un indice. Ils ont bien Forge qui fonctionne avec...

Arcandian commented 11 years ago

A défaut, je viens de poster une requête sur le projet FML de cpw, au cas ils pourraient nous donner un indice. Voilà voilà...

Arcandian commented 11 years ago

Bon ben j'ai toujours pas de réponses du côté des devs de FML, donc bah faudrait qu'on essaie la solution que j'ai cité précédemment...

KokaKiwi commented 11 years ago

Merci pour le truc que t'as trouvé du côté du dépôt de FML, j'vais y jeter un oeil bientôt, étant donné que je comptais utiliser mon launcher pour avoir un Minecraft moddé dans mon DD externe ^^ Du coup, il se peut qu'une MàJ arrive ensuite pour régler ce problème :)

Arcandian commented 11 years ago

C'est un plaisir, ravi d'avoir pu t'aider ^^

Je ferais des essais de mon côté. Je vais faire un fork de FML et compiler à la volée.

On se tient au courant, Kiwi hein? ^^

Bon codage :-)

KokaKiwi commented 11 years ago

Bon bah voilà, bug corrigé! Il suffisait en fait de faire un setProperty de "minecraft.applet.WrapperClass" de ma classe implémentant Applet :p

Arcandian commented 11 years ago

Raaah génial ! Merci Kiwi ^^

maxi1134 commented 11 years ago

Comment on télécharge cette version ?