Posted May 11, 201312 yr I have a key handler, which works fine in SSP, but causes server crash, when used in SMP. I'm not sure why that's so, because other packets, sent in some item classes (onUpdate method) are delivered and handled just fine. I can't figure out what's going wrong here, and believe me, I have spent several hours trying to understand or bypass it, to no avail - any help would be appreciated. Crash log [sEVERE] Encountered an unexpected exception NoClassDefFoundError java.lang.NoClassDefFoundError: net/minecraft/client/entity/EntityClientPlayerMP at mods.senitielsSpaceMarineModCode.SenitielsSpaceMarineModPacketHandler.onPacketData(SenitielsSpaceMarineModPacketHandler.java:37) at cpw.mods.fml.common.network.NetworkRegistry.handlePacket(NetworkRegistry.java:255) at cpw.mods.fml.common.network.NetworkRegistry.handleCustomPacket(NetworkRegistry.java:245) at cpw.mods.fml.common.network.FMLNetworkHandler.handlePacket250Packet(FMLNetworkHandler.java:83) at net.minecraft.network.NetServerHandler.handleCustomPayload(NetServerHandler.java:1098) at net.minecraft.network.packet.Packet250CustomPayload.processPacket(Packet250CustomPayload.java:70) at net.minecraft.network.TcpConnection.processReadPackets(TcpConnection.java:461) at net.minecraft.network.NetServerHandler.networkTick(NetServerHandler.java:134) at net.minecraft.network.NetworkListenThread.networkTick(NetworkListenThread.java:53) at net.minecraft.server.dedicated.DedicatedServerListenThread.networkTick(DedicatedServerListenThread.java:34) at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:675) at net.minecraft.server.dedicated.DedicatedServer.updateTimeLightAndEntities(DedicatedServer.java:275) at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:571) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:469) at net.minecraft.server.ThreadMinecraftServer.run(ThreadMinecraftServer.java:16) Caused by: java.lang.ClassNotFoundException: net.minecraft.client.entity.EntityClientPlayerMP at cpw.mods.fml.relauncher.RelaunchClassLoader.findClass(RelaunchClassLoader.java:238) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 15 more Caused by: java.lang.RuntimeException: Attempted to load class net/minecraft/client/entity/EntityClientPlayerMP for invalid side SERVER at cpw.mods.fml.common.asm.transformers.SideTransformer.transform(SideTransformer.java:50) at cpw.mods.fml.relauncher.RelaunchClassLoader.runTransformers(RelaunchClassLoader.java:352) at cpw.mods.fml.relauncher.RelaunchClassLoader.findClass(RelaunchClassLoader.java:225) ... 17 more Main mod class relevant part @NetworkMod(clientSideRequired=true, serverSideRequired=false, channels={SenitielsSpaceMarineModPacketHandler.JET, SenitielsSpaceMarineModPacketHandler.FIST, SenitielsSpaceMarineModPacketHandler.FIRE}, packetHandler = SenitielsSpaceMarineModPacketHandler.class) Packet Handler package mods.senitielsSpaceMarineModCode; import mods.senitielsSpaceMarineModCode.items.ItemJetBoots; import mods.senitielsSpaceMarineModCode.items.ItemPowerFist; import mods.senitielsSpaceMarineModCode.items.guns.FireModeHandler; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.network.INetworkManager; import net.minecraft.network.packet.Packet250CustomPayload; import cpw.mods.fml.common.Mod.Init; import cpw.mods.fml.common.network.IPacketHandler; import cpw.mods.fml.common.network.Player; public class SenitielsSpaceMarineModPacketHandler implements IPacketHandler { public static String[] Chanels; public static final String JET = "SenitielsJets"; public static final String FIST = "SenitielsFist"; public static final String FIRE = "SenitielsFire"; // Before adding it remember to add it also in chanels, in network mod attribute @Override public void onPacketData(INetworkManager manager, Packet250CustomPayload packet, Player player) { if (packet.channel.equals(JET)) { ItemJetBoots.handlePacket(packet,player); } if(packet.channel.equals(FIST)) { ItemPowerFist.handleFistPacket(packet, player); } if(packet.channel.equals(FIRE)) { FireModeHandler.handlePacket(packet, (EntityPlayer)player); //Crash log indicates This line causes error } } } Key handler code package mods.senitielsSpaceMarineModCode.client; import java.util.EnumSet; import mods.senitielsSpaceMarineModCode.items.guns.FireModeHandler; import net.minecraft.client.settings.KeyBinding; import cpw.mods.fml.client.registry.KeyBindingRegistry.KeyHandler; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.TickType; import cpw.mods.fml.relauncher.Side; public class KeyHandlerFireMode extends KeyHandler { public static final String label = "Senitiels Space Marine Keys"; public KeyHandlerFireMode(KeyBinding[] keyBindings, boolean[] isRepeat) { super(keyBindings, isRepeat); } @Override public String getLabel() { return label; } @Override public void keyDown(EnumSet<TickType> types, KeyBinding kb, boolean tickEnd, boolean isRepeat) { } @Override public void keyUp(EnumSet<TickType> types, KeyBinding kb, boolean tickEnd) { if(tickEnd) { System.out.println("Key up"); FireModeHandler.sendPacket(); } } //FireModeHandler.switchFireMode(); @Override public EnumSet<TickType> ticks() { return EnumSet.of(TickType.CLIENT); } } Send packet method public static void sendPacket() { EntityPlayer player = Minecraft.getMinecraft().thePlayer; ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream(); DataOutputStream dataOutputStream = new DataOutputStream(byteOutputStream); try { dataOutputStream.writeInt(player.entityId); } catch (Exception e) { e.printStackTrace(); } Packet250CustomPayload packet = new Packet250CustomPayload(SenitielsSpaceMarineModPacketHandler.FIRE, byteOutputStream.toByteArray()); FMLClientHandler.instance().sendPacket(packet); } http://imageshack.us/a/img707/2757/senitielsspacemarinemod.png[/img]
May 12, 201312 yr I think the log is saying that when the on packet data method is ran it can find the class for player on the server side in SP it works because the server can see the client files.
May 13, 201312 yr Your code is looking for a class in net.minecraft.client the log says the server can't find it because IT IS ON THE CLIENT SIDE ONLY NOT THE SERVER SIDE!
May 14, 201312 yr Author I managed to solve it on my own. Strange thing is, that moving send packet method from some free class to a class deriving from Item solved it. I have no idea why that's so. http://imageshack.us/a/img707/2757/senitielsspacemarinemod.png[/img]
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.