Le dossier config/ contient les fichiers de configuration des mods, ce qui permet de les paramétrés en surface, par ex. l'on peut souvent désactiver des items qui seraient trop puissants sur un serveur public, style un fly.
En programmation les « erreurs » sont accompagnées d'un message et d'un stack trace, qui indique toutes les fonctions appelées dans l'ordre antichronologique, celle en haut est la plus récente qui a causé le crash et celle tout en bas la moins récente, typiquement la fonction principale
main
qui est lancée par le système/Java.
Si on regarde l'erreur :
Code:
[4/16/2020 13:30:30.484] [main/INFO] [optifine.OptiFineTransformationService/]: OptiFineTransformationService.initialize
[4/16/2020 13:30:30.751] [main/INFO] [STDERR/]: com.electronwill.nightconfig.core.io.ParsingException: Not enough data available
[4/16/2020 13:30:30.754] [main/INFO] [STDERR/]: at com.electronwill.nightconfig.core.io.ParsingException.notEnoughData(ParsingException.java:22)
[4/16/2020 13:30:30.756] [main/INFO] [STDERR/]: at com.electronwill.nightconfig.core.io.ReaderInput.directReadChar(ReaderInput.java:36)
[4/16/2020 13:30:30.776] [main/INFO] [STDERR/]: at com.electronwill.nightconfig.core.io.AbstractInput.readChar(AbstractInput.java:49)
[4/16/2020 13:30:30.781] [main/INFO] [STDERR/]: at com.electronwill.nightconfig.core.io.AbstractInput.readCharsUntil(AbstractInput.java:123)
[4/16/2020 13:30:30.783] [main/INFO] [STDERR/]: at com.electronwill.nightconfig.toml.TableParser.parseKey(TableParser.java:166)
[4/16/2020 13:30:30.785] [main/INFO] [STDERR/]: at com.electronwill.nightconfig.toml.TableParser.parseDottedKey(TableParser.java:145)
[4/16/2020 13:30:30.787] [main/INFO] [STDERR/]: at com.electronwill.nightconfig.toml.TableParser.parseNormal(TableParser.java:55)
[4/16/2020 13:30:30.798] [main/INFO] [STDERR/]: at com.electronwill.nightconfig.toml.TomlParser.parse(TomlParser.java:44)
[4/16/2020 13:30:30.800] [main/INFO] [STDERR/]: at com.electronwill.nightconfig.toml.TomlParser.parse(TomlParser.java:37)
[4/16/2020 13:30:30.802] [main/INFO] [STDERR/]: at com.electronwill.nightconfig.core.io.ConfigParser.parse(ConfigParser.java:113)
[4/16/2020 13:30:30.804] [main/INFO] [STDERR/]: at com.electronwill.nightconfig.core.io.ConfigParser.parse(ConfigParser.java:219)
[4/16/2020 13:30:30.807] [main/INFO] [STDERR/]: at com.electronwill.nightconfig.core.io.ConfigParser.parse(ConfigParser.java:202)
[4/16/2020 13:30:30.809] [main/INFO] [STDERR/]: at com.electronwill.nightconfig.core.file.WriteSyncFileConfig.load(WriteSyncFileConfig.java:73)
[4/16/2020 13:30:30.811] [main/INFO] [STDERR/]: at com.electronwill.nightconfig.core.file.AutoreloadFileConfig.load(AutoreloadFileConfig.java:41)
[4/16/2020 13:30:30.813] [main/INFO] [STDERR/]: at com.electronwill.nightconfig.core.file.AutosaveCommentedFileConfig.load(AutosaveCommentedFileConfig.java:85)
[4/16/2020 13:30:30.815] [main/INFO] [STDERR/]: at net.minecraftforge.fml.loading.FMLConfig.loadFrom(FMLConfig.java:57)
[4/16/2020 13:30:30.818] [main/INFO] [STDERR/]: at net.minecraftforge.fml.loading.FMLConfig.load(FMLConfig.java:69)
[4/16/2020 13:30:30.819] [main/INFO] [STDERR/]: at net.minecraftforge.fml.loading.FMLServiceProvider.initialize(FMLServiceProvider.java:81)
[4/16/2020 13:30:30.821] [main/INFO] [STDERR/]: at cpw.mods.modlauncher.TransformationServiceDecorator.onInitialize(TransformationServiceDecorator.java:68)
[4/16/2020 13:30:30.824] [main/INFO] [STDERR/]: at cpw.mods.modlauncher.TransformationServicesHandler.lambda$initialiseTransformationServices$7(TransformationServicesHandler.java:107)
[4/16/2020 13:30:30.846] [main/INFO] [STDERR/]: at cpw.mods.modlauncher.TransformationServicesHandler$$Lambda$85/1313916817.accept(Unknown Source)
[4/16/2020 13:30:30.850] [main/INFO] [STDERR/]: at java.util.HashMap$Values.forEach(HashMap.java:972)
[4/16/2020 13:30:30.852] [main/INFO] [STDERR/]: at cpw.mods.modlauncher.TransformationServicesHandler.initialiseTransformationServices(TransformationServicesHandler.java:107)
[4/16/2020 13:30:30.853] [main/INFO] [STDERR/]: at cpw.mods.modlauncher.TransformationServicesHandler.initializeTransformationServices(TransformationServicesHandler.java:59)
[4/16/2020 13:30:30.854] [main/INFO] [STDERR/]: at cpw.mods.modlauncher.Launcher.run(Launcher.java:75)
[4/16/2020 13:30:30.856] [main/INFO] [STDERR/]: at cpw.mods.modlauncher.Launcher.main(Launcher.java:65)
Chaque ligne est préfixée par, dans l'ordre, la date, l'heure, le thread, la sévérité, la classe et le message.
Si l'on prend un example d'un facteur ;
- Le thread (fils d'exécution), c'est le nom du facteur. Ils travaillent tous en même temps, alors ce serait mieux de dire « John part, Bernard a fini son service » que de dire « Le facteur part, le facteur a fini son service ».
Généralement pour Minecraft tu auras principalement le main
, qui est le thread principale (Minecraft ne fait que peu de choses en même temps).
- La sévérité, c'est l'importance du message.
ERROR
: Il n'y a aucun bâtiment portant le numéro de l'enveloppe dans la rue, il ne peut plus livrer.
WARNING
: Le colis ne rentre pas dans la boîte aux lettres, il l'a redéposé à la Poste. Généralament ça veut juste indiquer qu'il a pris un autre chemin d'exécution, et l'on notifie l'utilisateur pour lui indiquer qu'il se pourrait que le comportement qu'il attende n'a pas été respecté. C'est toujours mieux de reçevoir un mot « Venez récupérer votre paquet à la Poste » que d'attendre deux semaines « Mais il arrive quand mon paquet ».
INFO
: Le facteur a déposé le paquet. Généralement, l'on indique les tâches qui commencent et celles qui ont réussie/sont terminées.
DEBUG
: Le facteur a mis le paquet dans sa camionnette. Les messages de débogages ne sont généralements pas affichés, l'on les affiche lorsqu'on recherche un bug, parce qu'elles disent généralement ce que l'on attend, style si l'on demande au facteur de livrer l'on a pas besoin qu'il nous dise « J'AI OUVERT LA PORTE ».
TRACE
: Tu mets tout et n'importe quoi dedans. Le facteur tourne à gauche, il s'arrête pour laisser passer des piétons, il ralentit au feu orange.
- La classe, c'est un peu l'endroit où l'erreur se produit. Par exemple, si tu essayes de calculer la racine carrée d'un nombre négatif, ce sera un truc dans le style de
Math
.
Bon après, si on prend les premières lignes de l'erreur :
Code:
com.electronwill.nightconfig.core.io.ParsingException: Not enough data available
at com.electronwill.nightconfig.core.io.ParsingException.notEnoughData(ParsingException.java:22)
at com.electronwill.nightconfig.core.io.ReaderInput.directReadChar(ReaderInput.java:36)
at com.electronwill.nightconfig.core.io.AbstractInput.readChar(AbstractInput.java:49)
Si on prend la classe de l'erreur,
com.electronwill.nightconfig.core.io.ParsingException
, l'on sait déjà que c'est une exception de parsage (analyse syntaxique), ce qui signifie qu'il n'arrive pas à lire le contenu d'un fichier. Le message après "Not enough data available" nous dit que le fichier est trop court, probablement parce qu'il est vide.
Après l'on a aussi accès à l'auteur du mod (
com.electronwill
→ TheElectronWill) et le nom du mod ; Night Config, ce qui implique qu'il est fortement probable qu'il ait affaire à des fichiers de configuration.
En l'occurence ce n'est pas réellement un mod mais c'est la librairy qu'utilise Forge pour les fichiers de configuration.
Après si tu descends plus bas tu peux voir qu'effectivement il essayait de lire un caractère.
Donc à partir de là l'on sait que ce qui pause problème est un fichier de configuration, l'on ne sait pas lequel car malheureusement il ne le dit pas mais tous les supprimer marche aussi très bien.
Quant à pourquoi le fichier était invalide, c'est sans-doute car tu avais déjà OptiFine avant et que la façon dont il sauvegarde ses données a changée entre les deux versions, donc lorsqu'il tente de lire l'ancien fichier il n'y arrive pas. Supprimer les fichiers de configuration fait que le jeu va les regénérés lors du prochain lancement, aux valeurs par défaut du mod.
Un peu long et sans doute mal rédigé, n'hésite pas si tu as encore des questions.