Jump to content

Recommended Posts

Posted

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);
}

 

Posted

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.

Posted

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!

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.