DaNatin Posted August 16, 2014 Posted August 16, 2014 After I've setup forge server and loaded my mod into it, it contained a crash report like this: Exception in server tick loop cpw.mods.fml.common.LoaderException: java.lang.NoClassDefFoundError: org/lwjgl/LWJGLException at cpw.mods.fml.common.LoadController.transition(LoadController.java:162) at cpw.mods.fml.common.Loader.initializeMods(Loader.java:692) at cpw.mods.fml.server.FMLServerHandler.finishServerLoading(FMLServerHandler.java:97) at cpw.mods.fml.common.FMLCommonHandler.onServerStarted(FMLCommonHandler.java:318) at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:210) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:387) at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:685) Caused by: java.lang.NoClassDefFoundError: org/lwjgl/LWJGLException at net.minecraftforge.client.MinecraftForgeClient.getStencilBits(MinecraftForgeClient.java:51) at net.minecraftforge.client.MinecraftForgeClient.<clinit>(MinecraftForgeClient.java:55) at com.natin.tf2mod.client.TF2Mod.init(TF2Mod.java:44) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:513) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) at com.google.common.eventbus.EventBus.post(EventBus.java:275) at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:208) at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:187) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) at com.google.common.eventbus.EventBus.post(EventBus.java:275) at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:118) at cpw.mods.fml.common.Loader.initializeMods(Loader.java:691) ... 5 more Caused by: java.lang.ClassNotFoundException: org.lwjgl.LWJGLException at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:104) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) ... 35 more It mentions my mod in a line, and also states that there was an exception in the server tick. So how do I make my mod server compatible? Quote
shieldbug1 Posted August 17, 2014 Posted August 17, 2014 Could you show us some code? Quote BEFORE ASKING FOR HELP READ THE EAQ! I'll help if I can. Apologies if I do something obviously stupid. If you don't know basic Java yet, go and follow these tutorials.
DaNatin Posted August 17, 2014 Author Posted August 17, 2014 Mkay, Here is the main file: package com.natin.tf2mod.client; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.client.MinecraftForgeClient; import net.minecraftforge.common.MinecraftForge; import com.natin.tf2mod.common.TF2ModCommonProxy; import com.natin.tf2mod.items.guns.Rocket; import com.natin.tf2mod.items.guns.RocketLauncher; import com.natin.tf2mod.render.RenderRocketLauncher; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; @Mod(modid = TF2Mod.MODID, version = TF2Mod.VERSION) public class TF2Mod { @SidedProxy(clientSide="com.natin.tf2mod.client.TF2ClientProxy", serverSide="com.natin.tf2mod.common.TF2ModCommonProxy") public static TF2ModCommonProxy proxy; public static final String MODID = "tf2mod"; public static final String VERSION = "v0.4"; /**Items**/ public static Item RocketLauncher; public static Item Rocket; @EventHandler public void init(FMLInitializationEvent event) { proxy.registerRenderThings(); RocketLauncher = new RocketLauncher().setUnlocalizedName("RocketLauncher"); MinecraftForgeClient.registerItemRenderer(TF2Mod.RocketLauncher, new RenderRocketLauncher()); GameRegistry.registerItem(RocketLauncher, "RocketLauncher"); GameRegistry.addRecipe(new ItemStack(RocketLauncher), new Object[] { "GRT", " S", 'T', Items.iron_ingot , 'G', Items.gunpowder, 'R', Items.redstone, 'S', Items.stick }); Rocket = new Rocket().setUnlocalizedName("Rocket"); GameRegistry.registerItem(Rocket, "Rocket"); GameRegistry.addRecipe(new ItemStack(Rocket), new Object[] { "SGS", 'S', Items.iron_ingot, 'G', Items.gunpowder }); } /** public static DamageSource causeMagnumDamage(EntityNormalBullet bullet, Entity par1Entity) { return par1Entity == null ? (new EntityDamageSourceIndirect("onFire", bullet, bullet)).setProjectile() : (new EntityDamageSourceIndirect("fireball", bullet, par1Entity)).setProjectile(); } **/ } The crash report really only mentions the main file, but if you need more just ask. Quote
shieldbug1 Posted August 17, 2014 Posted August 17, 2014 I don't know what line 44 is, but I'm guessing it's MinecraftForgeClient.registerItemRenderer(TF2Mod.RocketLauncher, new RenderRocketLauncher()); Try putting that code in your client proxy. Quote BEFORE ASKING FOR HELP READ THE EAQ! I'll help if I can. Apologies if I do something obviously stupid. If you don't know basic Java yet, go and follow these tutorials.
DaNatin Posted August 17, 2014 Author Posted August 17, 2014 That method actually renders that item into a custom 3D model, puting that into the Client Proxy actually disabled it... Is there another way? Quote
shieldbug1 Posted August 17, 2014 Posted August 17, 2014 Well, that's client code, and rendering should ONLY go on the client through the client proxy. When you put it in the proxy, did the game still crash? Quote BEFORE ASKING FOR HELP READ THE EAQ! I'll help if I can. Apologies if I do something obviously stupid. If you don't know basic Java yet, go and follow these tutorials.
DaNatin Posted August 17, 2014 Author Posted August 17, 2014 The game never really crashed from the start. I should've said that the SERVER crashed, not the game. Quote
shieldbug1 Posted August 17, 2014 Posted August 17, 2014 Put that line of code in your client proxy, and make sure to call it. Quote BEFORE ASKING FOR HELP READ THE EAQ! I'll help if I can. Apologies if I do something obviously stupid. If you don't know basic Java yet, go and follow these tutorials.
DaNatin Posted August 17, 2014 Author Posted August 17, 2014 I forgot how to call certain methods -.- How do I call the code from the Client proxy? Quote
shieldbug1 Posted August 17, 2014 Posted August 17, 2014 proxy.yourMethod(); This method should exist in both common/server proxy, and client proxy, but should be empty in the common/server proxy. Quote BEFORE ASKING FOR HELP READ THE EAQ! I'll help if I can. Apologies if I do something obviously stupid. If you don't know basic Java yet, go and follow these tutorials.
DaNatin Posted August 17, 2014 Author Posted August 17, 2014 The item still isn't rendered in 3D here's what I've done: -made a method in both proxies -put ItemRenderer into Client Proxy -called proxy.something() into the main file Quote
shieldbug1 Posted August 17, 2014 Posted August 17, 2014 Could you post your proxy code? Quote BEFORE ASKING FOR HELP READ THE EAQ! I'll help if I can. Apologies if I do something obviously stupid. If you don't know basic Java yet, go and follow these tutorials.
DaNatin Posted August 17, 2014 Author Posted August 17, 2014 Client Proxy package com.natin.tf2mod.client; import net.minecraftforge.client.MinecraftForgeClient; import com.natin.tf2mod.common.TF2ModCommonProxy; import com.natin.tf2mod.render.RenderRocketLauncher; public class TF2ClientProxy extends TF2ModCommonProxy { @Override public void registerRenderThings() { // This is for rendering entities and so forth later on } @Override public void registerItemRenderer() { MinecraftForgeClient.registerItemRenderer(TF2Mod.RocketLauncher, new RenderRocketLauncher()); } } Common Proxy package com.natin.tf2mod.common; public class TF2ModCommonProxy { public void registerRenderThings() { // Nothing here as the server doesn't render graphics or entities! } public void registerItemRenderer() { } } Quote
shieldbug1 Posted August 17, 2014 Posted August 17, 2014 Set up some debug statements in your rendering code to see if it gets called when you expect it to. Quote BEFORE ASKING FOR HELP READ THE EAQ! I'll help if I can. Apologies if I do something obviously stupid. If you don't know basic Java yet, go and follow these tutorials.
DaNatin Posted August 17, 2014 Author Posted August 17, 2014 I've made this in the Client Proxy @Override public void registerItemRenderer() { MinecraftForgeClient.registerItemRenderer(TF2Mod.RocketLauncher, new RenderRocketLauncher()); System.out.println("[TF2 Mod]TF2 Items Rendered!"); } The message I applied showed up in the console, some how the render code isn't working Quote
shieldbug1 Posted August 17, 2014 Posted August 17, 2014 Could you show your render code? I don't mess much with rendering, but if the proxy get's called then it has to be a problem with the renderer. Quote BEFORE ASKING FOR HELP READ THE EAQ! I'll help if I can. Apologies if I do something obviously stupid. If you don't know basic Java yet, go and follow these tutorials.
DaNatin Posted August 17, 2014 Author Posted August 17, 2014 RenderRocketLauncher package com.natin.tf2mod.render; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.inventory.GuiContainerCreative; import net.minecraft.client.gui.inventory.GuiInventory; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumAction; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.IItemRenderer; import org.lwjgl.opengl.GL11; import com.natin.tf2mod.models.RocketLauncherModel; public class RenderRocketLauncher implements IItemRenderer { //public static final ResourceLocation Texture = new ResourceLocation(BattleOfTheBeastsMod.modid, "/textures/entity/RocketLauncher.png"); protected RocketLauncherModel rocketlaunchermodel; public RenderRocketLauncher() { rocketlaunchermodel = new RocketLauncherModel(); } // protected ResourceLocation func_110832_a(RocketLauncherModel par1EntitySpiderQueen) //{ // return Texture; //} @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { switch(type) { case EQUIPPED_FIRST_PERSON: return true; case EQUIPPED: return true; default: return false; } } @Override public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { return false; } public EnumAction EQUIPPED(ItemStack par1ItemStack) { return EnumAction.bow; } @Override public void renderItem(ItemRenderType type, ItemStack item, Object... data) { switch(type) { case EQUIPPED: { GL11.glPushMatrix(); Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation("tf2mod", "textures/models/RocketLauncher.png")); //ResourceLocation Texture = new ResourceLocation(BattleOfTheBeastsMod.modid, "/textures/entity/RocketLauncher.png"); boolean isFirstPerson = false; if(data[1] != null && data[1] instanceof EntityPlayer) { if(!((EntityPlayer)data[1] == Minecraft.getMinecraft().renderViewEntity && Minecraft.getMinecraft().gameSettings.thirdPersonView == 1 && !((Minecraft.getMinecraft().currentScreen instanceof GuiInventory || Minecraft.getMinecraft().currentScreen instanceof GuiContainerCreative) && RenderManager.instance.playerViewY == 180.0F))) { isFirstPerson = false; GL11.glTranslatef(0.4F, 0.5F, 0.08F); //position GL11.glRotatef(-26F, 1.0F, 0.0F, 0.0F); //X GL11.glRotatef(165F, 0.0F, 1.0F, 0.0F); //y GL11.glRotatef(140F, 1.0F, 0.0F, 1.0F); //z //Size rocketlaunchermodel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.07F); } } GL11.glPopMatrix(); } case EQUIPPED_FIRST_PERSON: { GL11.glPushMatrix(); Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation("tf2mod", "textures/models/RocketLauncher.png")); //ResourceLocation Texture = new ResourceLocation(BattleOfTheBeastsMod.modid, "/textures/entity/RocketLauncher.png"); boolean isFirstPerson = true; if(data[1] != null && data[1] instanceof EntityPlayer) { if(!((EntityPlayer)data[1] == Minecraft.getMinecraft().renderViewEntity && Minecraft.getMinecraft().gameSettings.thirdPersonView == 0 && !((Minecraft.getMinecraft().currentScreen instanceof GuiInventory || Minecraft.getMinecraft().currentScreen instanceof GuiContainerCreative) && RenderManager.instance.playerViewY == 0.0F))) isFirstPerson = true; GL11.glTranslatef(0.5F, 0.8F, 0.1F); //position GL11.glRotatef(-10F, 1.0F, 0.0F, 0.0F); //X GL11.glRotatef(165F, 0.0F, 1.0F, 0.0F); //y GL11.glRotatef(160F, 1.0F, 0.0F, 1.0F); //z //Size rocketlaunchermodel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.07F); } } GL11.glPopMatrix(); default: break; } } } Quote
shieldbug1 Posted August 17, 2014 Posted August 17, 2014 Put some debug statements there as well and see what gets called, and what doesn't. Quote BEFORE ASKING FOR HELP READ THE EAQ! I'll help if I can. Apologies if I do something obviously stupid. If you don't know basic Java yet, go and follow these tutorials.
DaNatin Posted August 17, 2014 Author Posted August 17, 2014 I found the problem: renderItem's message was never mentioned in the console Meaning this whole chunk of code is being ignored for some reason @Override public void renderItem(ItemRenderType type, ItemStack item, Object... data) { switch(type) { case EQUIPPED_FIRST_PERSON: { GL11.glPushMatrix(); Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation("tf2mod", "textures/models/RocketLauncher.png")); //ResourceLocation Texture = new ResourceLocation(BattleOfTheBeastsMod.modid, "/textures/entity/RocketLauncher.png"); boolean isFirstPerson = true; if(data[1] != null && data[1] instanceof EntityPlayer) { if(!((EntityPlayer)data[1] == Minecraft.getMinecraft().renderViewEntity && Minecraft.getMinecraft().gameSettings.thirdPersonView == 0 && !((Minecraft.getMinecraft().currentScreen instanceof GuiInventory || Minecraft.getMinecraft().currentScreen instanceof GuiContainerCreative) && RenderManager.instance.playerViewY == 0.0F))) isFirstPerson = true; GL11.glTranslatef(0.5F, 0.8F, 0.1F); //position GL11.glRotatef(-10F, 1.0F, 0.0F, 0.0F); //X GL11.glRotatef(165F, 0.0F, 1.0F, 0.0F); //y GL11.glRotatef(160F, 1.0F, 0.0F, 1.0F); //z //Size rocketlaunchermodel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.07F); } } GL11.glPopMatrix(); default: break; case EQUIPPED: { GL11.glPushMatrix(); Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation("tf2mod", "textures/models/RocketLauncher.png")); //ResourceLocation Texture = new ResourceLocation(BattleOfTheBeastsMod.modid, "/textures/entity/RocketLauncher.png"); boolean isFirstPerson = false; if(data[1] != null && data[1] instanceof EntityPlayer) { if(!((EntityPlayer)data[1] == Minecraft.getMinecraft().renderViewEntity && Minecraft.getMinecraft().gameSettings.thirdPersonView == 1 && !((Minecraft.getMinecraft().currentScreen instanceof GuiInventory || Minecraft.getMinecraft().currentScreen instanceof GuiContainerCreative) && RenderManager.instance.playerViewY == 180.0F || RenderManager.instance.playerViewY == 0.0F))) { isFirstPerson = false; GL11.glTranslatef(0.4F, 0.5F, 0.08F); //position GL11.glRotatef(-26F, 1.0F, 0.0F, 0.0F); //X GL11.glRotatef(165F, 0.0F, 1.0F, 0.0F); //y GL11.glRotatef(140F, 1.0F, 0.0F, 1.0F); //z //Size rocketlaunchermodel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.07F); } } GL11.glPopMatrix(); } System.out.println("Item renderer loaded!"); } Quote
vilu Posted August 17, 2014 Posted August 17, 2014 You really should try clean your code and use correct indentation, because it helps you to see what part some if-statement handles for example. and what is this about?? GL11.glPopMatrix(); default: break; case EQUIPPED: { Check all your brackets and fix your switch-loop. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.