Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[Solved]KeyHandler crashes server, works in SSP

Featured Replies

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

 

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.

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...

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.