Acquire NetClientHandler for packets sent before the Player and World are established.

This commit is contained in:
Chicken Bones committed 2013-08-05 08:23:26 +10:00
1 parent 56776c8149
commit 7f42cd94e0
1 file changed
+53 -1
+53 -1
View File
@@ -14,6 +14,7 @@ import codechicken.lib.vec.BlockCoord;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import cpw.mods.fml.common.network.FMLNetworkHandler;
import cpw.mods.fml.common.network.IConnectionHandler;
import cpw.mods.fml.common.network.IPacketHandler;
import cpw.mods.fml.common.network.ITinyPacketHandler;
import cpw.mods.fml.common.network.NetworkModHandler;
@@ -28,10 +29,12 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompressedStreamTools;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.INetworkManager;
import net.minecraft.network.NetLoginHandler;
import net.minecraft.network.NetServerHandler;
import net.minecraft.network.packet.NetHandler;
import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.Packet131MapData;
import net.minecraft.network.packet.Packet1Login;
import net.minecraft.network.packet.Packet250CustomPayload;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.management.PlayerInstance;
@@ -148,6 +151,7 @@ public final class PacketCustom implements MCDataInput, MCDataOutput
public ClientPacketHandler(String channel)
{
super(channel);
NetClientHandlerHelper.register();
}
@Override
@@ -159,7 +163,7 @@ public final class PacketCustom implements MCDataInput, MCDataOutput
@Override
public void handle(ICustomPacketHandler handler, PacketCustom packet, Player player)
{
((IClientPacketHandler)handler).handlePacket(packet, Minecraft.getMinecraft().getNetHandler(), Minecraft.getMinecraft());
((IClientPacketHandler)handler).handlePacket(packet, NetClientHandlerHelper.handler, Minecraft.getMinecraft());
}
}
@@ -254,6 +258,54 @@ public final class PacketCustom implements MCDataInput, MCDataOutput
}
}
private static class NetClientHandlerHelper implements IConnectionHandler
{
private static boolean registered = false;
public static NetClientHandler handler;
public static void register()
{
if(registered)
return;
NetworkRegistry.instance().registerConnectionHandler(new NetClientHandlerHelper());
registered = true;
}
@Override
public void connectionOpened(NetHandler netClientHandler, MinecraftServer server, INetworkManager manager)
{
handler = (NetClientHandler) netClientHandler;
}
@Override
public void connectionOpened(NetHandler netClientHandler, String server, int port, INetworkManager manager)
{
handler = (NetClientHandler) netClientHandler;
}
@Override
public void connectionClosed(INetworkManager manager)
{
}
@Override
public String connectionReceived(NetLoginHandler netHandler, INetworkManager manager)
{
return null;
}
@Override
public void clientLoggedIn(NetHandler clientHandler, INetworkManager manager, Packet1Login login)
{
}
@Override
public void playerLoggedIn(Player player, NetHandler netHandler, INetworkManager manager)
{
}
}
public static interface IPacketCarrier
{
public int readType(Packet packet);