Debugging

Logs are an essential part when it comes to debugging your server and figuring what went wrong. This page will show some basic logging examples and will try to explain what you can do to fix your issues, when encountering them. If you’re looking for details about specific mods that can cause problems with SpongeForge, then we recommend checking the Mod Compatibility page first.

Checklist

À chaque fois que vous faites face à un crash ou à un warning, vérifiez votre que installation SpongeForge ou SpongeVanilla est correcte. Ici se trouve une courte checklist pour vous aider à vous en sortir. Si vous n’êtes pas sûr de savoir comment obtenir les informations requises, jetez un coup d’œil à la page Fichiers Log qui explique comment avoir les réponses depuis vos logs.

Est-ce que Java 8 est installé et Sponge l’utilise ?

Sponge a besoin de Java 8 et va crasher en utilisant Java 7 ou des versions antérieures.

Il y a-t-il d’autres coremods d’installés ?

Certains coremods qui modifient Forge ou Minecraft peuvent empêcher SpongeForge de fonctionner normalement. Si des coremods sont installés et que Sponge crash, essayez de les supprimer et testez à nouveau. Vous êtes invités à prévenir toute incompatibilité avec un coremod sur GitHub. Ce qui permettra au staff de résoudre le problème dans les meilleurs délais.

Tous les plugins que vous utilisez sont-ils compatibles avec votre version de Sponge ?

SpongeAPI est sujette à changements. Lorsque vous d’utilisez un vieux plugin sur des versions de Sponge récentes et qu’un crash survient, essayez de rétrograder Sponge ou de contacter l’auteur du plugin en question pour qu’il corrige le problème. Si vous êtes sur une ancienne version de Sponge et qu’un plugin récent crash, mettez d’abord Sponge à jour. Si ça ne résout pas le problème, contactez le développeur du plugin pour lui demander de corriger le problème.

Séparer un plugin défectueux

Si le problème persiste, essayez de supprimer tous les plugins puis les ajouter un-à-un en redémarrant le serveur à chaque fois.

Si vous ne savez pas vraiment quoi net pourquoi votre serveur crash exactement, regardez dans le crashlog. Plusieurs crashes sont communs et leurs solutions sont listées ci-dessous.

Note

Si vous rencontrer un bug nous vous conseillons de faire un backup, puis d’essayer de le reproduire, et de trouver la source du bug en supprimant vos mods petit à petit. Seulement après vous devriez rapporter l’erreur. Si l’erreur se produit sans plugins, retirez SpongeForge. Si l’erreur persiste ce n’est donc pas lié à Sponge. C’est une bonne idée de d’abord prévenir les développeurs de mods comme ils connaissent bien le code avec lequel ils travaillent. Vous pouvez toujours nous contacter si vous avez des questions. Pour plus d’informations consultez Rapporter des bugs.

Avertissements Généraux

Une source commune d’erreurs et de bugs est l’incompatibilité soit entre SpongeForge et Forge, soit entre SpongeForge et les plugins. Nous allons tout d’abord regarder l’erreur que Forge donne pour chaque crash:

WARNING: coremods are present:
   SpongeForge (sponge-1.8-1521-2.1DEV-750.jar)
Contact their authors BEFORE contacting forge

Ce n’est ni un bug ni une erreur, c’est juste Forge qui vous dit qu’un coremod (en l’occurrence SpongeForge) est installé. Forge vous conseille donc de contacter les développeurs de Sponge avant de demander de l’aide à Forge. Vous n’avez rien à craindre.

Exceptions Communes

Ici sont quelques exceptions communes et quelques raisons que vous devriez rencontrer.

Note

Si vous rencontrez un crash, une erreur ou tout autre malfonctionnement qui n’est pas listé ici, veuillez le faire savoir sur les Forums Sponge ou sur GitHub. Vous aiderez tous ceux qui ont rencontré la même erreur.

Forge et SpongeForge ne correspondent pas

[12:59:21] [main/ERROR] [mixin/]: @Mixin target net.minecraftforge.event.world.BlockEvent$NeighborNotifyEvent was not found mixins.forge.core.json:event.block.MixinEventNotifyNeighborBlock

This is a common crash when you try to run SpongeForge on the wrong Forge build. Note that the target/Mixin can vary. Always match Forge against SpongeForge! If you’re unsure which version of Forge is required and you already got your SpongeForge build, take a look at the SpongeForge section of Lire le nom du fichier en téléchargement.

Autres erreurs communes

Caused by: java.lang.ClassNotFoundException: org.spongepowered.api.event.state.ServerStartedEvent
Caused by: java.lang.NullPointerException

Cette première erreur indique qu’une Class est manquante, la seconde est une NullPointer Exception qui signifie que le plugin que vous tentez d’utiliser dépends de paramètres manquants. C’est ce qui peut se passer en essayant de faire fonctionner un ancien plugin sur un SpongeForge ou SpongeVanilla récent et vice versa.

java.lang.AbstractMethodError: net.minecraft.entity.player.EntityPlayerMP.getTabList()Lorg/spongepowered/api/entity/living/player/tab/TabList;
at (...)

Une AbstractMethodError apparaît quand un plugin tente de faire appel à une méthode qui n’est pas encore implémentée. Veuillez vérifier si vous utilisez la toute dernière version de Sponge disponible, si ce n’est pas le cas, mettez Sponge à jour. Si le problème persiste, reportez le problème sur l’Issuetracker officiel, sur les forums ou sur l’IRC. Vous pouvez également demander à ce que l’implémentation manquant soit rajoutée.

[Server thread/INFO]: Starting minecraft server version 1.8
[Server thread/ERROR]: Encountered an unexpected exception
java.lang.NoClassDefFoundError: org/spongepowered/api/event/game/state/GameStartingServerEvent

Note

Vous pouvez lire le crashlog complet ici: SpongeForge 575 crashlog with a plugin built against build 750

Une NoClassDefFoundError se produit lorsqu’un plugin essaye d’accéder à une class qui n’est pas dans le classpath. Ce qui peut se passer quand l’API a été ajustée ou refactorisée et que vous essayez de faire tourner une ancien plugin sur une version récente de Sponge et vice versa. Essayez toujours d’utiliser la version correcte ! Demandez au développeur du plugin quelle version de Sponge il a utilisé pour développer son plugin ou essayez de mettre à jour/rétrograder SpongeForge ou SpongeVanilla pour résoudre cette erreur.

Exceptions durant l’exécution

Il y a deux types d’erreurs qui peuvent arriver sur un serveur moddé:

  • Les erreurs internes aux plugins, comme les NullPointerExceptions lors de l’exécution d’une commande. Ces erreurs sont enregistrées en utilisant le mécanisme standard de gestion des erreurs de Java.

  • Les erreurs durant le tick des mondes ou des entités. Sponge affiche une erreur plus structurée pour fournir le plus d’informations possible.

Avant de s’intéresser aux détails de la cause de l’exception, assurez vous d’avoir lu tout le rapport. Parfois l’erreur est expliquée dans le rapport lui-même (ou quelques lignes au dessus), ça peut être indiqué par un avertissement durant le chargement.

Le stacktrace suivant est un exemple de cette gestion spéciale (en excluant le début de la ligne avec l’heure et la sévérité):

/******************************************************************************************************************************/
/*                                           Exception occurred during a PhaseState                                           */
/******************************************************************************************************************************/
/* Sponge's tracking system makes a best effort to not throw exceptions randomly                                              */
/* but sometimes it is inevitable. In most cases, something else triggered this                                               */
/* exception and Sponge prevented a crash by catching it. The following stacktrace                                            */
/* can be used to help pinpoint the cause.                                                                                    */
/******************************************************************************************************************************/
/* The PhaseState having an exception: EntityTickPhase                                                                        */
/* The PhaseContext:                                                                                                          */
/*     - Owner: EntityPlayerMP['SomePlayer'/270, l='world', x=119,62, y=82,00, z=260,21]                                      */
/*     - Source: EntityCreeper['Creeper'/346, l='world', x=119,50, y=82,00, z=258,50]                                         */
/*     - CapturedBlockPosition: CaptureBlockPos{pos=null, world=Optional.empty}                                               */
/* org.spongepowered.asm.util.PrettyPrinter@56ec63ef                                                                          */
/******************************************************************************************************************************/
/* StackTrace:                                                                                                                */
/* java.lang.NullPointerException: null                                                                                       */
/*     net.minecraft.util.math.BlockPos.<init>(SourceFile:41)                                                                 */
/*     net.minecraft.pathfinding.PathNavigateGround.func_75494_a(SourceFile:73)                                               */
/*     net.minecraft.pathfinding.PathNavigate.func_75497_a(SourceFile:147)                                                    */
/*     com.example.extendedaiplugin.BrokenAITask.start(BrokenAITask.java:58)                                                  */
/*     org.spongepowered.common.entity.ai.SpongeEntityAICommonSuperclass.func_75249_e(SpongeEntityAICommonSuperclass.java:43) */
/*     net.minecraft.entity.ai.EntityAITasks.func_75774_a(SourceFile:102)                                                     */
/*     net.minecraft.entity.EntityLiving.func_70626_be(EntityLiving.java:763)                                                 */
/*     net.minecraft.entity.EntityLivingBase.func_70636_d(EntityLivingBase.java:2350)                                         */
/*     net.minecraft.entity.EntityLiving.func_70636_d(EntityLiving.java:577)                                                  */
/*     net.minecraft.entity.monster.EntityMob.func_70636_d(EntityMob.java:45)                                                 */
/*     net.minecraft.entity.EntityLivingBase.func_70071_h_(EntityLivingBase.java:2170)                                        */
/*     net.minecraft.entity.EntityLiving.func_70071_h_(EntityLiving.java:295)                                                 */
/*     net.minecraft.entity.monster.EntityMob.func_70071_h_(EntityMob.java:50)                                                */
/*     net.minecraft.entity.monster.EntityCreeper.func_70071_h_(EntityCreeper.java:172)                                       */
/*     org.spongepowered.common.event.tracking.TrackingUtil.tickEntity(TrackingUtil.java:160)                                 */
/*     net.minecraft.world.WorldServer.redirect$onCallEntityUpdate$zlo000(WorldServer.java:2986)                              */
/*     net.minecraft.world.World.func_72866_a(World.java:4154)                                                                */
/*     net.minecraft.world.WorldServer.func_72866_a(WorldServer.java:832)                                                     */
/*     net.minecraft.world.World.func_72870_g(World.java:1952)                                                                */
/*     net.minecraft.world.World.func_72939_s(World.java:6596)                                                                */
/*     net.minecraft.world.WorldServer.func_72939_s(WorldServer.java:2300)                                                    */
/*     net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:767)                                            */
/*     net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:396)                                  */
/*     net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:668)                                            */
/*     net.minecraft.server.MinecraftServer.run(MinecraftServer.java:526)                                                     */
/*     java.lang.Thread.run(Unknown Source)                                                                                   */
/*  Phases Remaining:                                                                                                         */
/*                                                                                                                            */
/* Minecraft : 1.12.2                                                                                                         */
/* SpongeAPI : 7.1.0-SNAPSHOT-7105dfc                                                                                         */
/* SpongeForge : 1.12.2-2705-7.1.0-BETA-3361                                                                                  */
/* Minecraft Forge : 14.23.4.2705                                                                                             */
/******************************************************************************************************************************/

This stacktrace contains the most important version numbers, as well some information about the phase the server was in. In this case a NullPointerException has been thrown during EntityTickPhase. At this point it’s important to check which plugins are involved with the crash. This requires some research as you have to match the package names with mod names; checking the Caused by blocks may also help.

  • java classes can be ignored during the error search.

  • net.minecraft is the vanilla Minecraft code. If only these elements are present, it’s either a Minecraft bug or a coremod.

  • org.spongepowered is from Sponge itself, having only these and Minecraft packages present usually indicates a Sponge bug (or another coremod being present).

  • Other classes have to be mapped to their mods by hand. In this case there is this entry com.example.extendedaiplugin; Java projects are usually named following this format groupId.groupId.artifactId. The group is usually a domain backwards; in this case example.com, followed by the name of the project also known as artifact, for more information on package naming in Java you can refer to its official docs. This plugin is probably called extendedaiplugin, when in doubt, searching the web for the full package name can help.

Avertissement

Be careful when coremods are present. It can mean that, although a Minecraft class was reported as the cause, it does not mean the code executed is necessarily part of the Minecraft source, and could have been added by a third party. You can check your logs for loaded coremods and potentially find the culprit by removing them one by one. Be warned the issue may only occur when certain coremods are loaded at the same time.