Résolu (MCPC+) Serveur qui crash au lancement
-
Salut McNanotech !
Voila, j’ai posté une demande sur Ironcraft pour un problème, mais des personnes y ont répondus et ont finit pas abandonné… Alors je m’en remet à vous, car vous avez l’air d’en connaitre sous Forge !Voici le sujet tel qu’il était sur Ironcraft.
Version : .1.5.2
API utilisée(s) : .MCPC+
Recherche(s) effectuée(s) : .Dans mon cas, pas besoin de recherche
Explication détaillé du problème : .J’ai crée un serveur de test sur mon ordi avec mcpc + pour justement tester un serveur avec mes mods. Le serveur crash
Explication(s) complémentaire(s) liée(s) au problème : .Il me dit qu’il ne trouve pas la classe civilcraft.civilcraft.common.civilcraft ; mais ce n’est pas logique car elle y est belle est bien !
Code erreur : .Crashlog :–-- Minecraft Crash Report ---- // You should try our sister game, Minceraft! Time: 23/07/13 00:40 Description: Exception in server tick loop cpw.mods.fml.common.LoaderException: java.lang.ClassNotFoundException: civilcraft.civilcraft.common.civilcraft at cpw.mods.fml.common.LoadController.transition(LoadController.java:147) at cpw.mods.fml.common.Loader.loadMods(Loader.java:514) at cpw.mods.fml.server.FMLServerHandler.beginServerLoading(FMLServerHandler.java:85) at cpw.mods.fml.common.FMLCommonHandler.onServerStart(FMLCommonHandler.java:350) at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:94) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:574) at net.minecraft.server.ThreadMinecraftServer.run(SourceFile:573) Caused by: java.lang.ClassNotFoundException: civilcraft.civilcraft.common.civilcraft at cpw.mods.fml.relauncher.RelaunchClassLoader.findClass(RelaunchClassLoader.java:273) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at cpw.mods.fml.common.ModClassLoader.loadClass(ModClassLoader.java:56) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at cpw.mods.fml.common.FMLModContainer.constructMod(FMLModContainer.java:425) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:74) at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45) at com.google.common.eventbus.EventBus.dispatch(EventBus.java:314) at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:296) at com.google.common.eventbus.EventBus.post(EventBus.java:267) at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:192) at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:172) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:74) at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45) at com.google.common.eventbus.EventBus.dispatch(EventBus.java:314) at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:296) at com.google.common.eventbus.EventBus.post(EventBus.java:267) at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:103) at cpw.mods.fml.common.Loader.loadMods(Loader.java:504) ... 5 more Caused by: java.lang.NullPointerException A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- System Details -- Details: Minecraft Version: 1.5.2 Operating System: Windows 8 (amd64) version 6.2 Java Version: 1.7.0_21, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 894320808 bytes (852 MB) / 1029046272 bytes (981 MB) up to 1029046272 bytes (981 MB) JVM Flags: 2 total; -Xmx1G -Xms1G AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used Suspicious classes: FML and Forge are installed IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 CraftBukkit Information: Running: Failed to handle CraftCrashReport: java.lang.NullPointerException at org.bukkit.Bukkit.getName(Bukkit.java:72) at org.bukkit.craftbukkit.v1_5_R3.CraftCrashReport.call(CraftCrashReport.java:19) at net.minecraft.crash.CrashReportCategory.func_71500_a(CrashReportCategory.java:106) at net.minecraft.crash.CrashReport.func_71504_g(CrashReport.java:59) at net.minecraft.crash.CrashReport.<init>(CrashReport.java:41) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:630) at net.minecraft.server.ThreadMinecraftServer.run(SourceFile:573) FML: MCP v7.51 FML v5.2.23.738 Minecraft Forge 7.8.1.738 4 mods loaded, 4 mods active mcp{7.51} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed FML{5.2.23.738} [Forge Mod Loader] (coremods) Unloaded->Constructed Forge{7.8.1.738} [Minecraft Forge] (coremods) Unloaded->Constructed civilcraft{1.0.0} [CivilCraft] (civilcraft) Unloaded->Errored Profiler Position: N/A (disabled) Is Modded: Definitely; Server brand changed to 'mcpc,craftbukkit,fml,forge' Type: Dedicated Server (map_server.txt)
Code(s) : ./
Screen(s) : ./ -
Tu as essayé avec un serveur vanille forge ?
Tu peux m’envoyer l’archive du mod sinon ? -
J’ai essayé avec un serveur MCPC +
Je t’envoie en MP l’archive du mod -
Je viens de tester le mod sur un serveur Forge, il y a le même problème donc ça ne vient pas d’une incompatibilité avec mcpc plus.
Le mod fonctionne au moins en solo ?
Je pense que tu as mal compilé le mod, déjà tu as fait un .rar à la place d’un .zip, donc il n’est pas détecté dans le dossier mods, j’ai du le recompresser.Sur eclipse, le mod fonctionnait ?
-
C’est possible que tu ais oublié de recompiler avec reobfuscate_srg.bat
Sinon, une classe placée dans la partie client et hop, c’est la misère
Vérifie bien
-
robin :
Le mod fonctionne effectivement sur Eclipse et sur le mod solo
Gugu42 :
Sa fais longtemps que je me pose cette question :
A quoi sert reobfuscate_srg ?Au niveau des class mal placées, j’ai juste ma classe principal qui est dans mon package common, mais c’est tout
-
Vérifie que le serveur ce lance sur eclipse
Si tu as un NoClassDefFound net/minecraft/client/quelquechose c’est que tu as oublié un SideOnlyLe reobfuscate_srg permet de compiler en utilisant le nom srg, celui évite à forge de deobf ton mod au lancement, il sera donc changé plus vite et aura une meilleur compatibilité entre les différente maj de minecraft.
-
Je lance le serveur et j’ai en effet une NoClassDefFoundError
Le lien est : net/minecraft/client/renderer/tileentity/TileEntitySpecialRenderer
On peut savoir ou j’ai oublie le SideOnly ?___
Sachant que j’ai un block qui utilise les TileEntity -
Soit en haut de ta classe extends TileEntitySpecialRenderer, soit il faut déplacer les ClientRegistry.bindTileEntitySpecialRenderer dans le client proxy
-
J’ai pris mon code de ma class principale :
ModLoader .registerTileEntity(TileEntityBlockJumpEntity.class, "TileEntitytrampoline", new TileEntityBlockJumpEntityRenderer());
je l’ai placé dans clientproxy et ça marche !
Juste un problème : Ducoup je rebondis sur ce bloc juste en solo
-
En même temps si tu utilise du modloader …
Dans ta classe principale, la où tu avais ce code modloader mets :GameRegistry.registerTileEntity(TileEntityBlockJumpEntity.class, "TileEntitytrampoline");
Et dans ton clientProxy, à la place de la où tu as ton code modloader actuel :
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBlockJumpEntity.class, new TileEntityBlockJumpEntityRenderer());
-
Marche pas ._.
-
Je peux avoir tes codes de : la classe principale, le clientProxy, le commonProxy, TileEntityBlockJumpEntity, TileEntityBlockJumpEntityRenderer, et ton bloc tranmpoline ?
(paste bin pour éviter le spam) -
Class principal :
Le reste je peux te le mettre sous spoiler sans que ça spam
ClientProxy :
package civilcraft.civilcraft.client; import net.minecraft.src.ModLoader; import net.minecraftforge.client.MinecraftForgeClient; import civilcraft.civilcraft.common.CommonProxy; import civilcraft.civilcraft.entity.TileEntityBlockJumpEntity; import civilcraft.civilcraft.entity.TileEntityBlockJumpEntityRenderer; import civilcraft.civilcraft.tick.ClientTickHandler; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.common.registry.TickRegistry; import cpw.mods.fml.relauncher.Side; public class ClientProxy extends CommonProxy { public static int renderBlockChaiseID; public static int renderBlockEtagereID; public static String BlockTexture = "/CivilCraft/Block/"; public static String ItemTexture = "/CivilCraft/Item/"; /** * C'est ici que l'on va enregistrer tout ce qui concerne UNIQUEMENT le * Client comme les RenderBlocks,… et dans notre exemple, l'enregistrement * d'un fichier de texture. */ @Override public void registerRenderThings() { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBlockJumpEntity.class, new TileEntityBlockJumpEntityRenderer()); TickRegistry.registerTickHandler(new ClientTickHandler(), Side.CLIENT); } @Override public void registerTextures() { MinecraftForgeClient.preloadTexture(this.BlockTexture); MinecraftForgeClient.preloadTexture(this.ItemTexture); } }
CommonProxy :
package civilcraft.civilcraft.common; import net.minecraft.src.ModLoader; import civilcraft.civilcraft.entity.TileEntityBlockJumpEntity; import civilcraft.civilcraft.entity.TileEntityBlockJumpEntityRenderer; public class CommonProxy { /** * ici nous enregistrerons tout ce qui concerne la partie "serveur" et * commun avec le client (un peu comme le Load() mais ici il n'y aura pas * grand chose) */ public void registerRenderThings() { } public void registerTextures() { } }
TileEntityBlockJumpEntity :
package civilcraft.civilcraft.entity; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.tileentity.TileEntity; public class TileEntityBlockJumpEntity extends TileEntity { }
TileEntityBlockJumpEntityRenderer :
package civilcraft.civilcraft.entity; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; import org.lwjgl.opengl.GL11; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class TileEntityBlockJumpEntityRenderer extends TileEntitySpecialRenderer { private ModelBlockJumpEntityRenderer model = new ModelBlockJumpEntityRenderer(); public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float par8) { GL11.glPushMatrix(); GL11.glTranslatef((float) x + .5F, (float) y + .5F, (float) z + .5F); this.bindTextureByName("/civilcraft/Block/jump.png"); GL11.glPopMatrix(); } }
Jump bloc :
package civilcraft.civilcraft.block; import java.util.Random; import cpw.mods.fml.client.ITextureFX; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import civilcraft.civilcraft.client.ClientProxy; import civilcraft.civilcraft.entity.TileEntityBlockJumpEntity; import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.client.texturepacks.ITexturePack; import net.minecraft.entity.Entity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Icon; import net.minecraft.world.World; public class BlockJumpEntity extends BlockContainer { public BlockJumpEntity(int id) { super(id, Material.cake); } public boolean isOpaqueCube() { return false; } public int getRenderBlockPass() { return 1; } private Entity tentity; private float tfall; @SideOnly(Side.CLIENT) private Icon field_94393_a; @SideOnly(Side.CLIENT) private Icon field_94392_b; public void onFallenUpon(World world, int x, int y, int z, Entity entity, float par6) { if (tentity == null) { tentity = entity; tfall = entity.fallDistance; } else world.scheduleBlockUpdate(x, y, z, blockID, 1); entity.fallDistance = 0; } public void updateTick(World world, int x, int y, int z, Random random) { if (tentity != null) { float step = 0; if (tentity.isSneaking()) step = tfall / 6; if (step > 1) step = tfall / 10; if (step > 3) step = tfall / 15; if (step > 6) step = tfall / 20; tentity.motionY = .5F + step; tentity = null; } } @Override public TileEntity createNewTileEntity(World var1) { return new TileEntityBlockJumpEntity(); } @SideOnly(Side.CLIENT) /** * From the specified side and block metadata retrieves the blocks texture. Args: side, metadata */ public Icon getIcon(int par1, int par2) { return par1 == 0 ? this.field_94392_b : (par1 == 1 ? this.field_94393_a : this.blockIcon); } @SideOnly(Side.CLIENT) /** * When this method is called, your block should register all the icons it needs with the given IconRegister. This * is the only chance you get to register icons. */ public void registerIcons(IconRegister par1IconRegister) { this.blockIcon = par1IconRegister.registerIcon("jump_cote"); this.field_94393_a = par1IconRegister.registerIcon("jump_haut"); this.field_94392_b = par1IconRegister.registerIcon("piston_bottom"); } }
Dis moi ce que tu cherches sur ma class principale car elle fais plus de mille pages !
Je relance car sous MCPC+, le mod ne marche pasToujours le même crash-report
-
Étrange que le trampoline ne marche pas en smp. Même chose, si ça fonctionne en serveur sur eclipse ça devrait fonctionner sous mcpc plus …
Au pire tu peux me faire un zip des sources (si ça te dérange pas) ? -
Oui mais je te l’envoie en MP
-
Bon le problème est que … tu ne sais pas compiler un mod !
J’ai rien toucher au code, j’ai juste compiler le mod et c’est bon (par contre il y a pas les textures)
Du coup, refais un tour ici : https://www.minecraftforgefrance.fr/topic/55/compiler-votre-mod -
Ok, j’ai fais ce que le tuto m’a indiqué et ça marche !!!
Merci :D___
… sauf pour le trampo -
Le trampo il faudrait que tu revois le code, essaye de réduire la collision et d’utiliser onEntityIntract (ou un truc comme ça)
Regarde le code de la soul sand. -
Ok
Mais je le ferais plus tard, pour je te préviens quand je commence